1 #include <aos/kernel.h>
2 #include "mpsalport.h"
3 #include "repl.h"
4 #include "amp_platform.h"
5 
6 #if MICROPY_PY_THREAD
7 
8 #define LOG_TAG "MP_SALPORT"
9 
mp_sal_get_stack_size()10 uint32_t mp_sal_get_stack_size() {
11     return 1024*32;
12 }
13 
mp_sal_get_stack_addr()14 void* mp_sal_get_stack_addr() {
15     return NULL;
16 }
17 
mp_sal_get_taskhandler()18 mp_sal_taskhandler_obj_t mp_sal_get_taskhandler() {
19     mp_sal_taskhandler_obj_t	task_ref;
20     ql_rtos_task_get_current_ref(&task_ref);
21 	return task_ref;
22 }
23 
24 // int32_t mp_sal_thread_set_state(void *state) {
25 //     int status = krhino_task_info_set(krhino_cur_task_get(), 1, state);
26 //     return status;
27 // }
28 
29 // int32_t mp_sal_thread_get_state(void **state) {
30 //     int status = krhino_task_info_get(krhino_cur_task_get(), 1, state);
31 //     return status;
32 // }
33 
mp_sal_task_create(mp_sal_taskhandler_obj_t id,void (* entry)(void *),void * arg,void * stack_buf,size_t * stack_size_byte,int priority,char * name)34 int32_t mp_sal_task_create(mp_sal_taskhandler_obj_t id,
35                             void (*entry)(void*),
36                             void *arg,
37                             void *stack_buf,
38                             size_t *stack_size_byte,
39                             int priority,
40                             char *name) {
41     QlOSStatus status;
42     status = ql_rtos_task_create(&id, stack_size_byte, 100, name, entry, arg);
43     return status;
44 }
45 
mp_sal_task_delete(mp_sal_taskhandler_obj_t id,int32_t * status)46 void mp_sal_task_delete(mp_sal_taskhandler_obj_t id, int32_t *status) {
47     if(id == NULL)
48     {
49         LOGE(LOG_TAG, "mpthread task delete error!!");
50         return;
51     }
52     *status = ql_rtos_task_delete(&id);
53 }
54 
mp_sal_mutex_create(mp_sal_mutex_obj_t * mutex)55 int32_t mp_sal_mutex_create(mp_sal_mutex_obj_t *mutex) {
56     int status = aos_mutex_new(mutex);
57     return status;
58 }
59 
mp_sal_mutex_lock(mp_sal_mutex_obj_t * mutex,uint32_t timeout)60 int32_t mp_sal_mutex_lock(mp_sal_mutex_obj_t *mutex, uint32_t timeout) {
61     if((timeout == 0) || (mutex == NULL)){
62         LOGE(LOG_TAG, "mpthread mutex lock error!!");
63         return 0;
64     }
65     int status = aos_mutex_lock(mutex, timeout);
66     return status;
67 }
68 
mp_sal_mutex_unlock(mp_sal_mutex_obj_t * mutex)69 int32_t mp_sal_mutex_unlock(mp_sal_mutex_obj_t *mutex) {
70     if(mutex == NULL)
71     {
72         LOGE(LOG_TAG, "mpthread mutex unlock error!!");
73         return 0;
74     }
75     int status = aos_mutex_unlock(mutex);
76     return status;
77 }
78 
mp_sal_mutex_delete(mp_sal_mutex_obj_t * mutex)79 void mp_sal_mutex_delete(mp_sal_mutex_obj_t *mutex) {
80     if(mutex == NULL)
81     {
82         LOGE(LOG_TAG, "mpthread mutex delete error!!");
83         return 0;
84     }
85     aos_mutex_free(mutex);
86 }
87 #else
88 
89 #endif
90