summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-04-25 16:41:00 +0700
committerhathach <[email protected]>2013-04-25 16:41:00 +0700
commit3763e22c9a91e9bb21f9fa3dc5dafc9eea6254b7 (patch)
treea7dad3f9b4b3b3fd39e381119d6213fb0f7ac0f3
parent1ae548432099fde8ccf9b0be5de899b2168c1f41 (diff)
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
-rw-r--r--demos/host/src/keyboard_app.c2
-rw-r--r--demos/host/src/main.c42
-rw-r--r--demos/host/src/mouse_app.c2
-rw-r--r--tinyusb/host/usbh.c6
-rw-r--r--tinyusb/osal/osal.h4
-rw-r--r--tinyusb/osal/osal_freeRTOS.h12
-rw-r--r--tinyusb/osal/osal_none.h12
-rw-r--r--vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c2
8 files changed, 33 insertions, 49 deletions
diff --git a/demos/host/src/keyboard_app.c b/demos/host/src/keyboard_app.c
index 6bf075bb6..e6096d514 100644
--- a/demos/host/src/keyboard_app.c
+++ b/demos/host/src/keyboard_app.c
@@ -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;
diff --git a/demos/host/src/main.c b/demos/host/src/main.c
index f3fd13f1d..aee0474d7 100644
--- a/demos/host/src/main.c
+++ b/demos/host/src/main.c
@@ -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
-//}
-
diff --git a/demos/host/src/mouse_app.c b/demos/host/src/mouse_app.c
index 18ebe4e68..cb529fc7c 100644
--- a/demos/host/src/mouse_app.c
+++ b/demos/host/src/mouse_app.c
@@ -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;
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index 3c1630b75..c62b75c48 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -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 -------------//
diff --git a/tinyusb/osal/osal.h b/tinyusb/osal/osal.h
index f0174c080..63ebb0d45 100644
--- a/tinyusb/osal/osal.h
+++ b/tinyusb/osal/osal.h
@@ -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
diff --git a/tinyusb/osal/osal_freeRTOS.h b/tinyusb/osal/osal_freeRTOS.h
index 4dd3a67ca..44681e736 100644
--- a/tinyusb/osal/osal_freeRTOS.h
+++ b/tinyusb/osal/osal_freeRTOS.h
@@ -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) {
diff --git a/tinyusb/osal/osal_none.h b/tinyusb/osal/osal_none.h
index fa20585fd..9661278f7 100644
--- a/tinyusb/osal/osal_none.h
+++ b/tinyusb/osal/osal_none.h
@@ -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 {\
diff --git a/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c b/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c
index 80756930a..dcd008928 100644
--- a/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c
+++ b/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c
@@ -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 (;; ) {}
}