mirror of https://github.com/rusefi/ChibiOS.git
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8934 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
c6ce51eb22
commit
34c29c9e19
|
@ -68,8 +68,9 @@
|
||||||
* @brief Type of OSAL timer.
|
* @brief Type of OSAL timer.
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void *free;
|
uint32 is_free;
|
||||||
char name[OS_MAX_API_NAME];
|
char name[OS_MAX_API_NAME];
|
||||||
|
OS_TimerCallback_t callback_ptr;
|
||||||
uint32 start_time;
|
uint32 start_time;
|
||||||
uint32 interval_time;
|
uint32 interval_time;
|
||||||
virtual_timer_t vt;
|
virtual_timer_t vt;
|
||||||
|
@ -262,6 +263,80 @@ int32 OS_Milli2Ticks(uint32 milli_seconds) {
|
||||||
|
|
||||||
/*-- timers API -------------------------------------------------------------*/
|
/*-- timers API -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int32 OS_TimerCreate(uint32 *timer_id, const char *timer_name,
|
||||||
|
uint32 *clock_accuracy, OS_TimerCallback_t callback_ptr) {
|
||||||
|
osal_timer_t *otp;
|
||||||
|
|
||||||
|
/* NULL pointer checks.*/
|
||||||
|
if ((timer_id == NULL) || (timer_name == NULL) || (clock_accuracy == NULL)) {
|
||||||
|
return OS_INVALID_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NULL callback check.*/
|
||||||
|
if (callback_ptr == NULL) {
|
||||||
|
return OS_TIMER_ERR_INVALID_ARGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Checking semaphore name length.*/
|
||||||
|
if (strlen(timer_name) >= OS_MAX_API_NAME) {
|
||||||
|
return OS_ERR_NAME_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
|
otp = chPoolAlloc(&osal.binary_semaphores_pool);
|
||||||
|
if (otp == NULL) {
|
||||||
|
return OS_ERR_NO_FREE_IDS;
|
||||||
|
}
|
||||||
|
|
||||||
|
chSysLock();
|
||||||
|
|
||||||
|
strncpy(otp->name, timer_name, OS_MAX_API_NAME);
|
||||||
|
chVTObjectInit(&otp->vt);
|
||||||
|
otp->is_free = 0;
|
||||||
|
otp->start_time = 0;
|
||||||
|
otp->interval_time = 0;
|
||||||
|
otp->callback_ptr = callback_ptr;
|
||||||
|
|
||||||
|
chSysUnlock();
|
||||||
|
|
||||||
|
return OS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 OS_TimerDelete(uint32 timer_id) {
|
||||||
|
osal_timer_t *otp = (osal_timer_t *)timer_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
|
if ((otp < &osal.timers[0]) ||
|
||||||
|
(otp >= &osal.timers[OS_MAX_TIMERS])) {
|
||||||
|
return OS_ERR_INVALID_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
chSysLock();
|
||||||
|
|
||||||
|
/* Resetting the timer.*/
|
||||||
|
chVTResetI(&otp->vt);
|
||||||
|
otp->start_time = 0;
|
||||||
|
otp->interval_time = 0;
|
||||||
|
|
||||||
|
/* Flagging it as unused and returning it to the pool.*/
|
||||||
|
chPoolFreeI(&osal.timers_pool, (void *)otp);
|
||||||
|
|
||||||
|
chSysUnlock();
|
||||||
|
|
||||||
|
return OS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 OS_TimerSet(uint32 timer_id, uint32 start_time, uint32 interval_time) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 OS_TimerGetIdByName (uint32 *timer_id, const char *timer_name) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int32 OS_TimerGetInfo (uint32 timer_id, OS_timer_prop_t *timer_prop) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*-- Queues API -------------------------------------------------------------*/
|
/*-- Queues API -------------------------------------------------------------*/
|
||||||
|
|
||||||
/*-- Binary Semaphore API ---------------------------------------------------*/
|
/*-- Binary Semaphore API ---------------------------------------------------*/
|
||||||
|
@ -299,9 +374,8 @@ int32 OS_BinSemCreate (uint32 *sem_id, const char *sem_name,
|
||||||
}
|
}
|
||||||
|
|
||||||
bsp = chPoolAlloc(&osal.binary_semaphores_pool);
|
bsp = chPoolAlloc(&osal.binary_semaphores_pool);
|
||||||
|
if (bsp == NULL) {
|
||||||
if (bsp == 0) {
|
return OS_ERR_NO_FREE_IDS;
|
||||||
return OS_SEM_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Semaphore is initialized.*/
|
/* Semaphore is initialized.*/
|
||||||
|
@ -323,6 +397,7 @@ int32 OS_BinSemCreate (uint32 *sem_id, const char *sem_name,
|
||||||
int32 OS_BinSemDelete(uint32 sem_id) {
|
int32 OS_BinSemDelete(uint32 sem_id) {
|
||||||
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -359,6 +434,7 @@ int32 OS_BinSemFlush(uint32 sem_id) {
|
||||||
syssts_t sts;
|
syssts_t sts;
|
||||||
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -392,6 +468,7 @@ int32 OS_BinSemGive(uint32 sem_id) {
|
||||||
syssts_t sts;
|
syssts_t sts;
|
||||||
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -423,6 +500,7 @@ int32 OS_BinSemGive(uint32 sem_id) {
|
||||||
int32 OS_BinSemTake(uint32 sem_id) {
|
int32 OS_BinSemTake(uint32 sem_id) {
|
||||||
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -456,6 +534,7 @@ int32 OS_BinSemTimedWait(uint32 sem_id, uint32 msecs) {
|
||||||
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
binary_semaphore_t *bsp = (binary_semaphore_t *)sem_id;
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -521,6 +600,7 @@ int32 OS_BinSemGetInfo(uint32 sem_id, OS_bin_sem_prop_t *bin_prop) {
|
||||||
return OS_INVALID_POINTER;
|
return OS_INVALID_POINTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((bsp < &osal.binary_semaphores[0]) ||
|
if ((bsp < &osal.binary_semaphores[0]) ||
|
||||||
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(bsp >= &osal.binary_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -574,9 +654,8 @@ int32 OS_CountSemCreate (uint32 *sem_id, const char *sem_name,
|
||||||
}
|
}
|
||||||
|
|
||||||
sp = chPoolAlloc(&osal.count_semaphores_pool);
|
sp = chPoolAlloc(&osal.count_semaphores_pool);
|
||||||
|
if (sp == NULL) {
|
||||||
if (sp == 0) {
|
return OS_ERR_NO_FREE_IDS;
|
||||||
return OS_SEM_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Semaphore is initialized.*/
|
/* Semaphore is initialized.*/
|
||||||
|
@ -598,6 +677,7 @@ int32 OS_CountSemCreate (uint32 *sem_id, const char *sem_name,
|
||||||
int32 OS_CountSemDelete(uint32 sem_id) {
|
int32 OS_CountSemDelete(uint32 sem_id) {
|
||||||
semaphore_t *sp = (semaphore_t *)sem_id;
|
semaphore_t *sp = (semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((sp < &osal.count_semaphores[0]) ||
|
if ((sp < &osal.count_semaphores[0]) ||
|
||||||
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -633,6 +713,7 @@ int32 OS_CountSemGive(uint32 sem_id) {
|
||||||
syssts_t sts;
|
syssts_t sts;
|
||||||
semaphore_t *sp = (semaphore_t *)sem_id;
|
semaphore_t *sp = (semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((sp < &osal.count_semaphores[0]) ||
|
if ((sp < &osal.count_semaphores[0]) ||
|
||||||
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -664,6 +745,7 @@ int32 OS_CountSemGive(uint32 sem_id) {
|
||||||
int32 OS_CountSemTake(uint32 sem_id) {
|
int32 OS_CountSemTake(uint32 sem_id) {
|
||||||
semaphore_t *sp = (semaphore_t *)sem_id;
|
semaphore_t *sp = (semaphore_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((sp < &osal.count_semaphores[0]) ||
|
if ((sp < &osal.count_semaphores[0]) ||
|
||||||
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -697,6 +779,7 @@ int32 OS_CountSemTimedWait(uint32 sem_id, uint32 msecs) {
|
||||||
semaphore_t *sp = (semaphore_t *)sem_id;
|
semaphore_t *sp = (semaphore_t *)sem_id;
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((sp < &osal.count_semaphores[0]) ||
|
if ((sp < &osal.count_semaphores[0]) ||
|
||||||
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
(sp >= &osal.count_semaphores[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -762,6 +845,7 @@ int32 OS_CountSemGetInfo(uint32 sem_id, OS_count_sem_prop_t *sem_prop) {
|
||||||
return OS_INVALID_POINTER;
|
return OS_INVALID_POINTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((sp < &osal.count_semaphores[0]) ||
|
if ((sp < &osal.count_semaphores[0]) ||
|
||||||
(sp >= &osal.count_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
(sp >= &osal.count_semaphores[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -808,9 +892,8 @@ int32 OS_MutSemCreate (uint32 *sem_id, const char *sem_name, uint32 options) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mp = chPoolAlloc(&osal.mutexes_pool);
|
mp = chPoolAlloc(&osal.mutexes_pool);
|
||||||
|
if (mp == NULL) {
|
||||||
if (mp == 0) {
|
return OS_ERR_NO_FREE_IDS;
|
||||||
return OS_SEM_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Semaphore is initialized.*/
|
/* Semaphore is initialized.*/
|
||||||
|
@ -832,6 +915,7 @@ int32 OS_MutSemCreate (uint32 *sem_id, const char *sem_name, uint32 options) {
|
||||||
int32 OS_MutSemDelete(uint32 sem_id) {
|
int32 OS_MutSemDelete(uint32 sem_id) {
|
||||||
mutex_t *mp = (mutex_t *)sem_id;
|
mutex_t *mp = (mutex_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((mp < &osal.mutexes[0]) ||
|
if ((mp < &osal.mutexes[0]) ||
|
||||||
(mp >= &osal.mutexes[OS_MAX_MUTEXES])) {
|
(mp >= &osal.mutexes[OS_MAX_MUTEXES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -865,6 +949,7 @@ int32 OS_MutSemDelete(uint32 sem_id) {
|
||||||
int32 OS_MutSemGive(uint32 sem_id) {
|
int32 OS_MutSemGive(uint32 sem_id) {
|
||||||
mutex_t *mp = (mutex_t *)sem_id;
|
mutex_t *mp = (mutex_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((mp < &osal.mutexes[0]) ||
|
if ((mp < &osal.mutexes[0]) ||
|
||||||
(mp >= &osal.mutexes[OS_MAX_COUNT_SEMAPHORES])) {
|
(mp >= &osal.mutexes[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -897,6 +982,7 @@ int32 OS_MutSemGive(uint32 sem_id) {
|
||||||
int32 OS_MutSemTake(uint32 sem_id) {
|
int32 OS_MutSemTake(uint32 sem_id) {
|
||||||
mutex_t *mp = (mutex_t *)sem_id;
|
mutex_t *mp = (mutex_t *)sem_id;
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((mp < &osal.mutexes[0]) ||
|
if ((mp < &osal.mutexes[0]) ||
|
||||||
(mp >= &osal.mutexes[OS_MAX_COUNT_SEMAPHORES])) {
|
(mp >= &osal.mutexes[OS_MAX_COUNT_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -957,6 +1043,7 @@ int32 OS_MutSemGetInfo(uint32 sem_id, OS_mut_sem_prop_t *sem_prop) {
|
||||||
return OS_INVALID_POINTER;
|
return OS_INVALID_POINTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Range check.*/
|
||||||
if ((mp < &osal.mutexes[0]) ||
|
if ((mp < &osal.mutexes[0]) ||
|
||||||
(mp >= &osal.mutexes[OS_MAX_BIN_SEMAPHORES])) {
|
(mp >= &osal.mutexes[OS_MAX_BIN_SEMAPHORES])) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
|
@ -1036,10 +1123,8 @@ int32 OS_TaskCreate(uint32 *task_id,
|
||||||
|
|
||||||
tp = chThdCreateFromHeap(NULL, (size_t)stack_size, task_name,
|
tp = chThdCreateFromHeap(NULL, (size_t)stack_size, task_name,
|
||||||
rt_prio, (tfunc_t)function_pointer, NULL);
|
rt_prio, (tfunc_t)function_pointer, NULL);
|
||||||
|
|
||||||
/* Out-of-memory condition.*/
|
|
||||||
if (tp == NULL) {
|
if (tp == NULL) {
|
||||||
return OS_ERROR;
|
return OS_ERR_NO_FREE_IDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Storing the task id.*/
|
/* Storing the task id.*/
|
||||||
|
|
Loading…
Reference in New Issue