delete event and thread suppend/resume port
This commit is contained in:
@@ -12,13 +12,9 @@
|
||||
typedef void *usb_osal_thread_t;
|
||||
typedef void *usb_osal_sem_t;
|
||||
typedef void *usb_osal_mutex_t;
|
||||
typedef void *usb_osal_event_t;
|
||||
typedef void (*usb_thread_entry_t)(void *argument);
|
||||
|
||||
usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args);
|
||||
void usb_osal_thread_delete(usb_osal_thread_t thread);
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread);
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread);
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count);
|
||||
void usb_osal_sem_delete(usb_osal_sem_t sem);
|
||||
@@ -30,11 +26,6 @@ void usb_osal_mutex_delete(usb_osal_mutex_t mutex);
|
||||
int usb_osal_mutex_take(usb_osal_mutex_t mutex);
|
||||
int usb_osal_mutex_give(usb_osal_mutex_t mutex);
|
||||
|
||||
usb_osal_event_t usb_osal_event_create(void);
|
||||
void usb_osal_event_delete(usb_osal_event_t event);
|
||||
int usb_osal_event_recv(usb_osal_event_t event, uint32_t set, uint32_t *recved);
|
||||
int usb_osal_event_send(usb_osal_event_t event, uint32_t set);
|
||||
|
||||
size_t usb_osal_enter_critical_section(void);
|
||||
void usb_osal_leave_critical_section(size_t flag);
|
||||
|
||||
|
||||
@@ -18,16 +18,6 @@ usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size,
|
||||
return (usb_osal_thread_t)htask;
|
||||
}
|
||||
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread)
|
||||
{
|
||||
vTaskSuspend(thread);
|
||||
}
|
||||
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread)
|
||||
{
|
||||
vTaskResume(thread);
|
||||
}
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
|
||||
{
|
||||
return (usb_osal_sem_t)xSemaphoreCreateCounting(1, initial_count);
|
||||
@@ -76,34 +66,6 @@ int usb_osal_mutex_give(usb_osal_mutex_t mutex)
|
||||
return (xSemaphoreGive((SemaphoreHandle_t)mutex) == pdPASS) ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
usb_osal_event_t usb_osal_event_create(void)
|
||||
{
|
||||
return (usb_osal_event_t)xEventGroupCreate();
|
||||
}
|
||||
|
||||
void usb_osal_event_delete(usb_osal_event_t event)
|
||||
{
|
||||
vEventGroupDelete((EventGroupHandle_t)event);
|
||||
}
|
||||
|
||||
int usb_osal_event_recv(usb_osal_event_t event, uint32_t set, uint32_t *recved)
|
||||
{
|
||||
*recved = xEventGroupWaitBits((EventGroupHandle_t)event, set, pdTRUE, pdFALSE, portMAX_DELAY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int usb_osal_event_send(usb_osal_event_t event, uint32_t set)
|
||||
{
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
int ret;
|
||||
|
||||
ret = xEventGroupSetBitsFromISR((EventGroupHandle_t)event, set, &xHigherPriorityTaskWoken);
|
||||
if (ret == pdPASS) {
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
return (ret == pdPASS) ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
size_t usb_osal_enter_critical_section(void)
|
||||
{
|
||||
taskDISABLE_INTERRUPTS();
|
||||
|
||||
@@ -16,16 +16,6 @@ usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size,
|
||||
return (usb_osal_thread_t)htask;
|
||||
}
|
||||
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread)
|
||||
{
|
||||
rt_thread_suspend(thread);
|
||||
}
|
||||
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread)
|
||||
{
|
||||
rt_thread_resume(thread);
|
||||
}
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
|
||||
{
|
||||
return (usb_osal_sem_t)rt_sem_create("usbh_sem", initial_count, RT_IPC_FLAG_FIFO);
|
||||
@@ -78,46 +68,6 @@ int usb_osal_mutex_give(usb_osal_mutex_t mutex)
|
||||
return (int)rt_mutex_release((rt_mutex_t)mutex);
|
||||
}
|
||||
|
||||
usb_osal_event_t usb_osal_event_create(void)
|
||||
{
|
||||
return (usb_osal_event_t)rt_event_create("psc_event", RT_IPC_FLAG_FIFO);
|
||||
}
|
||||
|
||||
void usb_osal_event_delete(usb_osal_event_t event)
|
||||
{
|
||||
rt_event_delete((rt_event_t)event);
|
||||
}
|
||||
|
||||
int usb_osal_event_recv(usb_osal_event_t event, uint32_t set, uint32_t *recved)
|
||||
{
|
||||
int ret = 0;
|
||||
rt_err_t result = RT_EOK;
|
||||
|
||||
result = rt_event_recv((rt_event_t)event, set, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, (rt_uint32_t *)recved);
|
||||
if (result == RT_ETIMEOUT) {
|
||||
ret = -ETIMEDOUT;
|
||||
} else if (result == RT_ERROR) {
|
||||
ret = -EINVAL;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int usb_osal_event_send(usb_osal_event_t event, uint32_t set)
|
||||
{
|
||||
int ret = 0;
|
||||
rt_err_t result = RT_EOK;
|
||||
|
||||
result = rt_event_send((rt_event_t)event, set);
|
||||
if (result != RT_EOK) {
|
||||
ret = -EINVAL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t usb_osal_enter_critical_section(void)
|
||||
{
|
||||
return rt_hw_interrupt_disable();
|
||||
|
||||
@@ -24,16 +24,6 @@ usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size,
|
||||
args);
|
||||
}
|
||||
|
||||
void usb_osal_thread_suspend(usb_osal_thread_t thread)
|
||||
{
|
||||
os_suspend();
|
||||
}
|
||||
|
||||
void usb_osal_thread_resume(usb_osal_thread_t thread)
|
||||
{
|
||||
os_resume(0);
|
||||
}
|
||||
|
||||
usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
|
||||
{
|
||||
void *sem = _alloc_box(sem_mpool);
|
||||
@@ -90,38 +80,6 @@ int usb_osal_mutex_give(usb_osal_mutex_t mutex)
|
||||
return (os_mut_release(mutex) == OS_R_OK) ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
usb_osal_event_t usb_osal_event_create(void)
|
||||
{
|
||||
return (usb_osal_event_t)os_tsk_self();
|
||||
}
|
||||
|
||||
void usb_osal_event_delete(usb_osal_event_t event)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int usb_osal_event_recv(usb_osal_event_t event, uint32_t set, uint32_t *recved)
|
||||
{
|
||||
os_evt_wait_or(set, 0xffff);
|
||||
*recved = os_evt_get();
|
||||
return 0;
|
||||
}
|
||||
|
||||
//在线程,中断均调用
|
||||
int usb_osal_event_send(usb_osal_event_t event, uint32_t set)
|
||||
{
|
||||
uint32_t intstatus = 0;
|
||||
/* Obtain the number of the currently executing interrupt. */
|
||||
__asm volatile ( "mrs intstatus, cpsr" );
|
||||
if ((intstatus & 0xf) == 0) { //user mode
|
||||
os_evt_set(set, (OS_TID)event);
|
||||
} else {
|
||||
isr_evt_set(set, (OS_TID)event);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//这两个函数只在线程调用,可以改为tsk_lock和tsk_unlock版本
|
||||
size_t usb_osal_enter_critical_section(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user