1 #include "mpsalport.h"
2
3 #include "aos/kernel.h"
4 #include "k_api.h"
5 #include "py/mperrno.h"
6 #include "ulog/ulog.h"
7
8 #define LOG_TAG "mp_sal_port"
9
mp_sal_get_stack_size()10 mp_uint_t mp_sal_get_stack_size()
11 {
12 ktask_t *task = krhino_cur_task_get();
13 return task->stack_size;
14 }
15
mp_sal_get_stack_addr()16 void *mp_sal_get_stack_addr()
17 {
18 ktask_t *task = krhino_cur_task_get();
19 return (void *)(task->task_stack_base);
20 }
21
mp_sal_task_delete(aos_task_t * id,mp_int_t * status)22 void mp_sal_task_delete(aos_task_t *id, mp_int_t *status)
23 {
24 *status = aos_task_delete(id);
25 }
26
mp_sal_mutex_create(mp_sal_mutex_obj_t * mutex)27 mp_int_t mp_sal_mutex_create(mp_sal_mutex_obj_t *mutex)
28 {
29 #ifndef AOS_BOARD_HAAS700
30 int status = aos_mutex_create(mutex, 0);
31 #else
32 int status = aos_mutex_new((aos_mutex_t *)mutex);
33 #endif
34 return status;
35 }
36
mp_sal_mutex_lock(mp_sal_mutex_obj_t * mutex,mp_uint_t timeout)37 mp_int_t mp_sal_mutex_lock(mp_sal_mutex_obj_t *mutex, mp_uint_t timeout)
38 {
39 if (mutex == NULL) {
40 LOGE(LOG_TAG, "mpthread mutex lock with mutex NULL !!");
41 return -MP_EINVAL;
42 }
43
44 if (timeout == 0) {
45 return 0;
46 }
47 int status = aos_mutex_lock(mutex, timeout);
48 return status;
49 }
50
mp_sal_mutex_unlock(mp_sal_mutex_obj_t * mutex)51 mp_int_t mp_sal_mutex_unlock(mp_sal_mutex_obj_t *mutex)
52 {
53 if (mutex == NULL) {
54 LOGE(LOG_TAG, "mpthread mutex unlock with mutex NULL !!");
55 return -MP_EINVAL;
56 }
57 int status = aos_mutex_unlock(mutex);
58 return status;
59 }
60
mp_sal_mutex_delete(mp_sal_mutex_obj_t * mutex)61 void mp_sal_mutex_delete(mp_sal_mutex_obj_t *mutex)
62 {
63 aos_mutex_free(mutex);
64 }
65
66 /* APIs for semphone */
67
mp_sal_sem_create(mp_sal_sem_obj_t * sem)68 mp_int_t mp_sal_sem_create(mp_sal_sem_obj_t *sem)
69 {
70 int status = aos_sem_create(sem, 0, 0);
71 return status;
72 }
73
mp_sal_sem_take(mp_sal_sem_obj_t * sem,mp_uint_t timeout)74 mp_int_t mp_sal_sem_take(mp_sal_sem_obj_t *sem, mp_uint_t timeout)
75 {
76 if (sem == NULL) {
77 LOGE(LOG_TAG, "mpthread sem lock with sem NULL !!");
78 return -MP_EINVAL;
79 }
80
81 if (timeout == 0) {
82 return 0;
83 }
84
85 int status = aos_sem_wait(sem, timeout);
86 return status;
87 }
88
mp_sal_sem_give(mp_sal_sem_obj_t * sem)89 mp_int_t mp_sal_sem_give(mp_sal_sem_obj_t *sem)
90 {
91 if (sem == NULL) {
92 LOGE(LOG_TAG, "mpthread sem unlock with sem NULL !!");
93 return -MP_EINVAL;
94 }
95 aos_sem_signal(sem);
96 return 0;
97 }
98
mp_sal_sem_delete(mp_sal_sem_obj_t * sem)99 void mp_sal_sem_delete(mp_sal_sem_obj_t *sem)
100 {
101 aos_sem_free(sem);
102 }
103