forked from xuos/xiuos
Modify osal functions
This commit is contained in:
parent
24b1b5ac56
commit
e7a92d9417
|
@ -93,6 +93,8 @@ usb_osal_mutex_t usb_osal_mutex_create(void){
|
|||
|
||||
mutex_id = semaphore_new(1);
|
||||
|
||||
printf("In %s, mutex_id = %d\n", __func__, mutex_id);
|
||||
|
||||
return (usb_osal_mutex_t)mutex_id;
|
||||
}
|
||||
|
||||
|
@ -129,6 +131,7 @@ int usb_osal_mutex_give(usb_osal_mutex_t mutex){
|
|||
|
||||
semaphore_signal(mutex_id);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -181,6 +184,8 @@ osal_msg_queue_t osal_mq_create(const char *name,
|
|||
mq->msg_size = msg_size;
|
||||
mq->max_msgs = max_msgs;
|
||||
|
||||
printf("In %s, msg_size = %d, max_msgs = %d\n", __func__, msg_size, max_msgs);
|
||||
|
||||
return mq;
|
||||
}
|
||||
|
||||
|
@ -227,8 +232,10 @@ int osal_mq_send(osal_msg_queue_t mq,
|
|||
|
||||
tail = mq->tail;
|
||||
header = mq->header;
|
||||
|
||||
printf("In %s, tail = %d, header = %d\n", __func__, tail, header);
|
||||
/* message queue is full. */
|
||||
tail_nxt = (tail + 1) > mq->max_msgs ? (tail + 1 -mq->max_msgs):(tail + 1);
|
||||
tail_nxt = (tail + 1) > mq->max_msgs ? (tail + 1 - mq->max_msgs):(tail + 1);
|
||||
if(tail_nxt == header){
|
||||
usb_osal_sem_give(mq->mutex);
|
||||
return 0;
|
||||
|
@ -246,7 +253,7 @@ int osal_mq_send(osal_msg_queue_t mq,
|
|||
|
||||
|
||||
|
||||
int osal_mq_recv(osal_msg_queue_t mq,
|
||||
int __osal_mq_recv(osal_msg_queue_t mq,
|
||||
void *msg,
|
||||
size_t msg_len,
|
||||
uint32_t timeout){
|
||||
|
@ -277,6 +284,8 @@ int osal_mq_recv(osal_msg_queue_t mq,
|
|||
return 0;
|
||||
}
|
||||
|
||||
printf("In %s, tail = %d, header = %d\n", __func__, tail, header);
|
||||
|
||||
msg_header = (osal_mq_msg_header_t)(mq->data + (sizeof(struct osal_mq_msg_header) + mq->msg_size) * header);
|
||||
msg_buf = (uint8_t *)(msg_header + 1);
|
||||
copy_len = (msg_header->len > msg_len ? msg_len : msg_header->len);
|
||||
|
@ -290,6 +299,35 @@ int osal_mq_recv(osal_msg_queue_t mq,
|
|||
return copy_len;
|
||||
}
|
||||
|
||||
int osal_mq_recv(osal_msg_queue_t mq,
|
||||
void *msg,
|
||||
size_t msg_len,
|
||||
uint32_t timeout){
|
||||
int ret = 0;
|
||||
int sleep_time = timeout;
|
||||
int for_ever = 0;
|
||||
|
||||
if(sleep_time == 0)
|
||||
for_ever = 1;
|
||||
|
||||
do{
|
||||
ret = __osal_mq_recv(mq, msg, msg_len, timeout);
|
||||
|
||||
if(ret == 0){
|
||||
if(sleep_time > 0 || for_ever == 1){
|
||||
usb_osal_msleep(10);
|
||||
|
||||
if(for_ever == 0)
|
||||
sleep_time -= 10;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}while(ret == 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs){
|
||||
|
|
Loading…
Reference in New Issue