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