git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9002 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
1c9814ef11
commit
360ca869c8
|
@ -405,7 +405,8 @@ int32 OS_TimerDelete(uint32 timer_id) {
|
||||||
|
|
||||||
/* Range check.*/
|
/* Range check.*/
|
||||||
if ((otp < &osal.timers[0]) ||
|
if ((otp < &osal.timers[0]) ||
|
||||||
(otp >= &osal.timers[OS_MAX_TIMERS])) {
|
(otp >= &osal.timers[OS_MAX_TIMERS]) ||
|
||||||
|
(otp->is_free)) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,7 +442,8 @@ int32 OS_TimerSet(uint32 timer_id, uint32 start_time, uint32 interval_time) {
|
||||||
|
|
||||||
/* Range check.*/
|
/* Range check.*/
|
||||||
if ((otp < &osal.timers[0]) ||
|
if ((otp < &osal.timers[0]) ||
|
||||||
(otp >= &osal.timers[OS_MAX_TIMERS])) {
|
(otp >= &osal.timers[OS_MAX_TIMERS]) ||
|
||||||
|
(otp->is_free)) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,7 +511,8 @@ int32 OS_TimerGetInfo(uint32 timer_id, OS_timer_prop_t *timer_prop) {
|
||||||
|
|
||||||
/* Range check.*/
|
/* Range check.*/
|
||||||
if ((otp < &osal.timers[0]) ||
|
if ((otp < &osal.timers[0]) ||
|
||||||
(otp >= &osal.timers[OS_MAX_TIMERS])) {
|
(otp >= &osal.timers[OS_MAX_TIMERS]) ||
|
||||||
|
(otp->is_free)) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -603,7 +606,8 @@ int32 OS_QueueDelete(uint32 queue_id) {
|
||||||
|
|
||||||
/* Range check.*/
|
/* Range check.*/
|
||||||
if ((oqp < &osal.queues[0]) ||
|
if ((oqp < &osal.queues[0]) ||
|
||||||
(oqp >= &osal.queues[OS_MAX_QUEUES])) {
|
(oqp >= &osal.queues[OS_MAX_QUEUES]) ||
|
||||||
|
(oqp->is_free)) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -638,14 +642,62 @@ int32 OS_QueueDelete(uint32 queue_id) {
|
||||||
|
|
||||||
int32 OS_QueueGet(uint32 queue_id, void *data, uint32 size,
|
int32 OS_QueueGet(uint32 queue_id, void *data, uint32 size,
|
||||||
uint32 *size_copied, int32 timeout) {
|
uint32 *size_copied, int32 timeout) {
|
||||||
|
osal_queue_t *oqp = (osal_queue_t *)queue_id;
|
||||||
|
msg_t msg, msgsts;
|
||||||
|
void *body;
|
||||||
|
|
||||||
(void)queue_id;
|
/* NULL pointer checks.*/
|
||||||
(void)data;
|
if ((data == NULL) || (size_copied == NULL)) {
|
||||||
(void)size;
|
return OS_INVALID_POINTER;
|
||||||
(void)size_copied;
|
}
|
||||||
(void)timeout;
|
|
||||||
|
|
||||||
return OS_ERR_NOT_IMPLEMENTED;
|
/* Range check.*/
|
||||||
|
if ((oqp < &osal.queues[0]) ||
|
||||||
|
(oqp >= &osal.queues[OS_MAX_QUEUES]) ||
|
||||||
|
(oqp->is_free)) {
|
||||||
|
return OS_ERR_INVALID_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check on minimum size.*/
|
||||||
|
if (size < oqp->size) {
|
||||||
|
return OS_QUEUE_INVALID_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Special time handling.*/
|
||||||
|
if (timeout == OS_PEND) {
|
||||||
|
msgsts = chMBFetch(&oqp->mb, &msg, TIME_INFINITE);
|
||||||
|
if (msgsts < MSG_OK) {
|
||||||
|
*size_copied = 0;
|
||||||
|
return OS_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (timeout == OS_CHECK) {
|
||||||
|
msgsts = chMBFetch(&oqp->mb, &msg, TIME_IMMEDIATE);
|
||||||
|
if (msgsts < MSG_OK) {
|
||||||
|
*size_copied = 0;
|
||||||
|
return OS_QUEUE_EMPTY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msgsts = chMBFetch(&oqp->mb, &msg, (systime_t)timeout);
|
||||||
|
if (msgsts < MSG_OK) {
|
||||||
|
*size_copied = 0;
|
||||||
|
return OS_QUEUE_TIMEOUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Message body and size.*/
|
||||||
|
*size_copied = ((osal_message_t *)msg)->size;
|
||||||
|
body = (void *)((osal_message_t *)msg)->buf;
|
||||||
|
|
||||||
|
/* Copying the message body.*/
|
||||||
|
memcpy(data, body, *size_copied);
|
||||||
|
|
||||||
|
/* Freeing the message buffer.*/
|
||||||
|
chPoolFree(&oqp->messages, (void *)msg);
|
||||||
|
chSemSignal(&oqp->free_msgs);
|
||||||
|
|
||||||
|
return OS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 OS_QueuePut(uint32 queue_id, void *data, uint32 size, uint32 flags) {
|
int32 OS_QueuePut(uint32 queue_id, void *data, uint32 size, uint32 flags) {
|
||||||
|
|
Loading…
Reference in New Issue