mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
change OSAL_TASK_DEF to decouple variable name with task name
implement osal_task_delay for freeRTOS & non_os getting both no_os & freertos running with mouse + keyboard
This commit is contained in:
parent
1ae5484320
commit
3763e22c9a
@ -50,7 +50,7 @@
|
||||
//--------------------------------------------------------------------+
|
||||
// INTERNAL OBJECT & FUNCTION DECLARATION
|
||||
//--------------------------------------------------------------------+
|
||||
OSAL_TASK_DEF(keyboard_task_def, keyboard_app_task, 128, KEYBOARD_APP_TASK_PRIO);
|
||||
OSAL_TASK_DEF(keyboard_task_def, "keyboard app", keyboard_app_task, 128, KEYBOARD_APP_TASK_PRIO);
|
||||
|
||||
OSAL_QUEUE_DEF(queue_kbd_report, QUEUE_KEYBOARD_REPORT_DEPTH, tusb_keyboard_report_t);
|
||||
static osal_queue_handle_t q_kbd_report_hdl;
|
||||
|
@ -67,7 +67,7 @@
|
||||
void print_greeting(void);
|
||||
|
||||
OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para);
|
||||
OSAL_TASK_DEF(led_blinking_task_def, led_blinking_task, 128, LED_BLINKING_APP_TASK_PRIO);
|
||||
OSAL_TASK_DEF(led_blinking_task_def, "led blinking", led_blinking_task, 128, LED_BLINKING_APP_TASK_PRIO);
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// IMPLEMENTATION
|
||||
@ -132,48 +132,18 @@ void print_greeting(void)
|
||||
|
||||
OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para)
|
||||
{
|
||||
static uint32_t led_on_mask = 0;
|
||||
|
||||
#if TUSB_CFG_OS != TUSB_OS_NONE // TODO abstract to approriate place
|
||||
print_greeting();
|
||||
#endif
|
||||
|
||||
OSAL_TASK_LOOP_BEGIN
|
||||
|
||||
vTaskDelay(CFG_TICKS_PER_SECOND);
|
||||
osal_task_delay(1000);
|
||||
|
||||
/* Toggle LED once per second */
|
||||
if ( (xTaskGetTickCount()/CFG_TICKS_PER_SECOND) % 2)
|
||||
{
|
||||
board_leds(0x01, 0x00);
|
||||
}
|
||||
else
|
||||
{
|
||||
board_leds(0x00, 0x01);
|
||||
}
|
||||
board_leds(led_on_mask, 1 - led_on_mask);
|
||||
led_on_mask = 1 - led_on_mask; // toggle
|
||||
|
||||
OSAL_TASK_LOOP_END
|
||||
}
|
||||
|
||||
//OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para)
|
||||
//{
|
||||
// static uint32_t current_tick = 0;
|
||||
//
|
||||
// OSAL_TASK_LOOP_BEGIN
|
||||
//
|
||||
// if (current_tick + CFG_TICKS_PER_SECOND < system_ticks)
|
||||
// {
|
||||
// current_tick += CFG_TICKS_PER_SECOND;
|
||||
//
|
||||
// /* Toggle LED once per second */
|
||||
// if ( (current_tick/CFG_TICKS_PER_SECOND) % 2)
|
||||
// {
|
||||
// board_leds(0x01, 0x00);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// board_leds(0x00, 0x01);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// OSAL_TASK_LOOP_END
|
||||
//}
|
||||
|
||||
|
@ -50,7 +50,7 @@
|
||||
//--------------------------------------------------------------------+
|
||||
// INTERNAL OBJECT & FUNCTION DECLARATION
|
||||
//--------------------------------------------------------------------+
|
||||
OSAL_TASK_DEF(mouse_task_def, mouse_app_task, 128, MOUSE_APP_TASK_PRIO);
|
||||
OSAL_TASK_DEF(mouse_task_def, "mouse app", mouse_app_task, 128, MOUSE_APP_TASK_PRIO);
|
||||
|
||||
OSAL_QUEUE_DEF(queue_mouse_report, QUEUE_MOUSE_REPORT_DEPTH, tusb_mouse_report_t);
|
||||
static osal_queue_handle_t q_mouse_report_hdl;
|
||||
|
@ -89,7 +89,7 @@ static host_class_driver_t const usbh_class_drivers[TUSB_CLASS_MAX_CONSEC_NUMBER
|
||||
usbh_device_info_t usbh_devices[TUSB_CFG_HOST_DEVICE_MAX+1] TUSB_CFG_ATTR_USBRAM; // including zero-address
|
||||
|
||||
//------------- Enumeration Task Data -------------//
|
||||
OSAL_TASK_DEF(enum_task_def, usbh_enumeration_task, 128, TUSB_CFG_OS_TASK_PRIO);
|
||||
OSAL_TASK_DEF(enum_task_def, "tinyusb host", usbh_enumeration_task, 128, TUSB_CFG_OS_TASK_PRIO);
|
||||
OSAL_QUEUE_DEF(enum_queue_def, ENUM_QUEUE_DEPTH, uint32_t);
|
||||
osal_queue_handle_t enum_queue_hdl;
|
||||
STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM;
|
||||
@ -287,9 +287,7 @@ tusb_error_t enumeration_body_subtask(void)
|
||||
|
||||
#ifndef _TEST_
|
||||
// TODO finalize delay after reset, hack delay 100 ms, otherwise speed is detected as LOW in most cases
|
||||
volatile uint32_t delay_us = 10000;
|
||||
delay_us *= (SystemCoreClock / 1000000) / 3;
|
||||
while(delay_us--);
|
||||
osal_task_delay(100);
|
||||
#endif
|
||||
|
||||
//------------- Get first 8 bytes of device descriptor to get Control Endpoint Size -------------//
|
||||
|
@ -86,8 +86,8 @@ uint32_t osal_tick_get(void);
|
||||
typedef uint32_t osal_task_t;
|
||||
tusb_error_t osal_task_create(osal_task_t *task);
|
||||
|
||||
#define OSAL_TASK_DEF(name, code, stack_depth, prio) \
|
||||
osal_task_t name
|
||||
#define OSAL_TASK_DEF(variable, name, code, stack_depth, prio) \
|
||||
osal_task_t variable
|
||||
|
||||
#define OSAL_TASK_FUNCTION(task_name) \
|
||||
void task_name
|
||||
|
@ -81,9 +81,9 @@ typedef struct {
|
||||
unsigned portBASE_TYPE prio;
|
||||
} osal_task_t;
|
||||
|
||||
#define OSAL_TASK_DEF(task_name, task_code, task_stack_depth, task_prio) \
|
||||
osal_task_t task_name = {\
|
||||
.name = #task_name , \
|
||||
#define OSAL_TASK_DEF(task_variable, task_name, task_code, task_stack_depth, task_prio) \
|
||||
osal_task_t task_variable = {\
|
||||
.name = task_name , \
|
||||
.code = task_code , \
|
||||
.stack_depth = task_stack_depth , \
|
||||
.prio = task_prio \
|
||||
@ -96,6 +96,12 @@ static inline tusb_error_t osal_task_create(osal_task_t *task)
|
||||
TUSB_ERROR_NONE : TUSB_ERROR_OSAL_TASK_CREATE_FAILED;
|
||||
}
|
||||
|
||||
static inline void osal_task_delay(uint32_t msec) ATTR_ALWAYS_INLINE;
|
||||
static inline void osal_task_delay(uint32_t msec)
|
||||
{
|
||||
vTaskDelay(TUSB_CFG_OS_TICKS_PER_SECOND * msec);
|
||||
}
|
||||
|
||||
#define OSAL_TASK_LOOP_BEGIN \
|
||||
while(1) {
|
||||
|
||||
|
@ -87,7 +87,7 @@ static inline volatile uint32_t osal_tick_get(void)
|
||||
// OSAL_TASK_LOOP_ENG
|
||||
// }
|
||||
//--------------------------------------------------------------------+
|
||||
#define OSAL_TASK_DEF(name, code, stack_depth, prio)
|
||||
#define OSAL_TASK_DEF(variable, name, code, stack_depth, prio)
|
||||
#define osal_task_create(x) TUSB_ERROR_NONE
|
||||
|
||||
#define OSAL_TASK_FUNCTION(task_func) \
|
||||
@ -107,6 +107,16 @@ static inline volatile uint32_t osal_tick_get(void)
|
||||
}\
|
||||
return TUSB_ERROR_NONE;
|
||||
|
||||
|
||||
#define osal_task_delay(msec) \
|
||||
do {\
|
||||
timeout = osal_tick_get();\
|
||||
state = __LINE__; case __LINE__:\
|
||||
if ( timeout + osal_tick_from_msec(msec) < osal_tick_get() ) /* time out */ \
|
||||
return TUSB_ERROR_OSAL_WAITING;\
|
||||
}while(0)
|
||||
|
||||
|
||||
//------------- Sub Task -------------//
|
||||
#define OSAL_SUBTASK_INVOKED_AND_WAIT(subtask, status) \
|
||||
do {\
|
||||
|
@ -63,7 +63,7 @@ void FreeRTOSDelay(uint32_t ms)
|
||||
/* FreeRTOS malloc fail hook */
|
||||
void vApplicationMallocFailedHook(void)
|
||||
{
|
||||
DEBUGSTR("DIE:ERROR:FreeRTOS: Malloc Failure!\r\n");
|
||||
PRINTF("DIE:ERROR:FreeRTOS: Malloc Failure!\r\n");
|
||||
taskDISABLE_INTERRUPTS();
|
||||
for (;; ) {}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user