finish nimble blehr porting and do some kernel improve
This commit is contained in:
@@ -31,20 +31,6 @@ __STATIC__ void msgpool_free(k_msg_t *msg)
|
||||
tos_list_add(&msg->list, &k_msg_freelist);
|
||||
}
|
||||
|
||||
__API__ void tos_msg_queue_flush(k_msg_queue_t *msg_queue)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_list_t *curr, *next;
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
TOS_LIST_FOR_EACH_SAFE(curr, next, &msg_queue->queue_head) {
|
||||
msgpool_free(TOS_LIST_ENTRY(curr, k_msg_t, list));
|
||||
}
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_msg_queue_create(k_msg_queue_t *msg_queue)
|
||||
{
|
||||
TOS_PTR_SANITY_CHECK(msg_queue);
|
||||
@@ -82,6 +68,9 @@ __API__ k_err_t tos_msg_queue_get(k_msg_queue_t *msg_queue, void **msg_addr, siz
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_msg_t *msg;
|
||||
|
||||
TOS_PTR_SANITY_CHECK(msg_queue);
|
||||
TOS_PTR_SANITY_CHECK(msg_addr);
|
||||
|
||||
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||
if (!knl_object_verify(&msg_queue->knl_obj, KNL_OBJ_TYPE_MSG_QUEUE)) {
|
||||
return K_ERR_OBJ_INVALID;
|
||||
@@ -110,6 +99,9 @@ __API__ k_err_t tos_msg_queue_put(k_msg_queue_t *msg_queue, void *msg_addr, size
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_msg_t *msg;
|
||||
|
||||
TOS_PTR_SANITY_CHECK(msg_queue);
|
||||
TOS_PTR_SANITY_CHECK(msg_addr);
|
||||
|
||||
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||
if (!knl_object_verify(&msg_queue->knl_obj, KNL_OBJ_TYPE_MSG_QUEUE)) {
|
||||
return K_ERR_OBJ_INVALID;
|
||||
@@ -138,5 +130,63 @@ __API__ k_err_t tos_msg_queue_put(k_msg_queue_t *msg_queue, void *msg_addr, size
|
||||
return K_ERR_NONE;
|
||||
}
|
||||
|
||||
__API__ k_err_t tos_msg_queue_remove(k_msg_queue_t *msg_queue, void *msg_addr)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_msg_t *msg;
|
||||
k_list_t *curr, *next;
|
||||
int is_msg_exist = K_FALSE;
|
||||
|
||||
TOS_PTR_SANITY_CHECK(msg_queue);
|
||||
TOS_PTR_SANITY_CHECK(msg_addr);
|
||||
|
||||
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||
if (!knl_object_verify(&msg_queue->knl_obj, KNL_OBJ_TYPE_MSG_QUEUE)) {
|
||||
return K_ERR_OBJ_INVALID;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
TOS_LIST_FOR_EACH_SAFE(curr, next, &msg_queue->queue_head) {
|
||||
msg = TOS_LIST_ENTRY(curr, k_msg_t, list);
|
||||
|
||||
if (msg->msg_addr != msg_addr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
is_msg_exist = K_TRUE;
|
||||
msgpool_free(msg);
|
||||
}
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
|
||||
return is_msg_exist ? K_ERR_NONE : K_ERR_MSG_QUEUE_MSG_NOT_EXIST;
|
||||
}
|
||||
|
||||
__API__ void tos_msg_queue_flush(k_msg_queue_t *msg_queue)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
k_list_t *curr, *next;
|
||||
|
||||
if(!msg_queue) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if TOS_CFG_OBJECT_VERIFY_EN > 0u
|
||||
if (!knl_object_verify(&msg_queue->knl_obj, KNL_OBJ_TYPE_MSG_QUEUE)) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
|
||||
TOS_LIST_FOR_EACH_SAFE(curr, next, &msg_queue->queue_head) {
|
||||
msgpool_free(TOS_LIST_ENTRY(curr, k_msg_t, list));
|
||||
}
|
||||
|
||||
TOS_CPU_INT_ENABLE();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user