osal clean up

remove OSAL_TASK_DEF, osal_task_create. Applicaton should create a task
and call tinyusb_task(). This make API consistent with NO OS.
This commit is contained in:
hathach 2018-12-13 13:49:09 +07:00
parent b562fa741b
commit bc46dc6edf
19 changed files with 75 additions and 238 deletions

View File

@ -20,7 +20,6 @@
#define CFG_TUSB_MCU ///< Select one of the supported MCU, the value must be from \ref group_mcu #define CFG_TUSB_MCU ///< Select one of the supported MCU, the value must be from \ref group_mcu
#define CFG_TUSB_OS ///< Select one of the supported RTOS, the value must be from \ref group_supported_os. #define CFG_TUSB_OS ///< Select one of the supported RTOS, the value must be from \ref group_supported_os.
#define CFG_TUD_TASK_PRIO ///< If \ref CFG_TUSB_OS is configured to use a real RTOS (other than OPT_OS_NONE). This determines the priority of the usb stack task.
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// HOST CONFIGURATION // HOST CONFIGURATION

View File

@ -37,7 +37,7 @@ It is relatively simple to incorporate tinyusb to your (existing) project
1. Copy or `git submodule` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb* 1. Copy or `git submodule` this repo into your project in a subfolder. Let's say it is *your_project/tinyusb*
2. Add all the .c in the src folder to your project settings (uvproj, ewp, makefile) 2. Add all the .c in the src folder to your project settings (uvproj, ewp, makefile)
3. Add *your_project/tinysb* to your include path. Also make sure your current include path also contains the configuration file tusb_config.h. Or you could simply put the tusb_config.h into the tinyusb folder as well. 3. Add *your_project/tinysb* to your include path. Also make sure your current include path also contains the configuration file tusb_config.h. Or you could simply put the tusb_config.h into the tinyusb folder as well.
4. Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as CFG_TUSB_MCU, CFG_TUSB_OS, CFG_TUD_TASK_PRIO since they are passed by IDE/compiler to maintain a unique configure for all demo projects). 4. Make sure all required macros are all defined properly in tusb_config.h (configure file in demo application is sufficient, but you need to add a few more such as CFG_TUSB_MCU, CFG_TUSB_OS since they are passed by IDE/compiler to maintain a unique configure for all demo projects).
5. If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to fill out required pointers in tusbd_descriptor_pointers for that stack to work. 5. If you use the device stack, make sure you have created/modified usb descriptors for your own need. Ultimately you need to fill out required pointers in tusbd_descriptor_pointers for that stack to work.
6. Add tusb_init() call to your reset initialization code. 6. Add tusb_init() call to your reset initialization code.
7. Implement all enabled classes's callbacks. 7. Implement all enabled classes's callbacks.

View File

@ -46,7 +46,6 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF PROTYPES // MACRO CONSTANT TYPEDEF PROTYPES
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
void print_greeting(void);
void led_blinking_task(void); void led_blinking_task(void);
extern void virtual_com_task(void); extern void virtual_com_task(void);
@ -56,7 +55,6 @@ extern void usb_hid_task(void);
int main(void) int main(void)
{ {
board_init(); board_init();
print_greeting();
tusb_init(); tusb_init();
@ -84,9 +82,9 @@ int main(void)
#if CFG_TUD_CDC #if CFG_TUD_CDC
void virtual_com_task(void) void virtual_com_task(void)
{ {
// connected and there are data available
if ( tud_cdc_connected() ) if ( tud_cdc_connected() )
{ {
// connected and there are data available
if ( tud_cdc_available() ) if ( tud_cdc_available() )
{ {
uint8_t buf[64]; uint8_t buf[64];
@ -98,11 +96,7 @@ void virtual_com_task(void)
{ {
tud_cdc_write_char(buf[i]); tud_cdc_write_char(buf[i]);
if ( buf[i] == '\r' ) if ( buf[i] == '\r' ) tud_cdc_write_char('\n');
{
tud_cdc_write_char('\n');
tud_cdc_write_str("tinyusb cdc: ");
}
} }
tud_cdc_write_flush(); tud_cdc_write_flush();
@ -117,8 +111,8 @@ void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
// connected // connected
if ( dtr && rts ) if ( dtr && rts )
{ {
// print greeting // print initial message when connected
tud_cdc_write_str("tinyusb cdc: "); tud_cdc_write_str("\r\nTinyUSB CDC MSC HID device example\r\n");
} }
} }
#endif #endif
@ -213,28 +207,3 @@ void led_blinking_task(void)
board_led_control(led_state); board_led_control(led_state);
led_state = 1 - led_state; // toggle led_state = 1 - led_state; // toggle
} }
//--------------------------------------------------------------------+
// HELPER FUNCTION
//--------------------------------------------------------------------+
void print_greeting(void)
{
char const * const rtos_name[] =
{
[OPT_OS_NONE] = "None",
[OPT_OS_FREERTOS] = "FreeRTOS",
};
printf("\n--------------------------------------------------------------------\n");
printf("- Device Demo (a tinyusb example)\n");
printf("- if you find any bugs or get any questions, feel free to file an\n");
printf("- issue at https://github.com/hathach/tinyusb\n");
printf("--------------------------------------------------------------------\n\n");
printf("This DEVICE demo is configured to support:");
printf(" - RTOS = %s\n", rtos_name[CFG_TUSB_OS]);
if (CFG_TUD_CDC ) puts(" - Communication Device Class");
if (CFG_TUD_MSC ) puts(" - Mass Storage");
if (CFG_TUD_HID_KEYBOARD ) puts(" - HID Keyboard");
if (CFG_TUD_HID_MOUSE ) puts(" - HID Mouse");
}

View File

@ -18,11 +18,12 @@
arm_target_debug_interface_type="ADIv5" arm_target_debug_interface_type="ADIv5"
arm_target_device_name="nRF52840_xxAA" arm_target_device_name="nRF52840_xxAA"
arm_target_interface_type="SWD" arm_target_interface_type="SWD"
build_treat_warnings_as_errors="Yes" build_treat_warnings_as_errors="No"
c_preprocessor_definitions="NRF52840_XXAA;__nRF_FAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_PCA10056;CFG_TUSB_MCU=OPT_MCU_NRF5X" c_preprocessor_definitions="NRF52840_XXAA;__nRF_FAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_PCA10056;CFG_TUSB_MCU=OPT_MCU_NRF5X"
c_user_include_directories="./;../../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(nrfxDir)/..;$(nrfxDir);$(nrfxDir)/mdk;$(nrfxDir)/hal;$(nrfxDir)/drivers/include;$(freertosDir)/Source/include;$(freertosDir)/Source/portable/GCC/ARM_CM4F" c_user_include_directories="./;../../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(nrfxDir)/..;$(nrfxDir);$(nrfxDir)/mdk;$(nrfxDir)/hal;$(nrfxDir)/drivers/include;$(freertosDir)/Source/include;$(freertosDir)/Source/portable/GCC/ARM_CM4F"
debug_register_definition_file="nrf52840_Registers.xml" debug_register_definition_file="nrf52840_Registers.xml"
debug_target_connection="J-Link" debug_target_connection="J-Link"
gcc_enable_all_warnings="Yes"
gcc_entry_point="Reset_Handler" gcc_entry_point="Reset_Handler"
link_use_linker_script_file="No" link_use_linker_script_file="No"
linker_memory_map_file="nRF52840_xxAA_MemoryMap.xml" linker_memory_map_file="nRF52840_xxAA_MemoryMap.xml"

View File

@ -59,14 +59,13 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION // INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
void print_greeting(void);
void led_blinky_cb(TimerHandle_t xTimer); void led_blinky_cb(TimerHandle_t xTimer);
void usb_device_task(void* param);
/*------------- MAIN -------------*/ /*------------- MAIN -------------*/
int main(void) int main(void)
{ {
board_init(); board_init();
print_greeting();
// soft timer for blinky // soft timer for blinky
TimerHandle_t tm_hdl = xTimerCreate(NULL, pdMS_TO_TICKS(1000), true, NULL, led_blinky_cb); TimerHandle_t tm_hdl = xTimerCreate(NULL, pdMS_TO_TICKS(1000), true, NULL, led_blinky_cb);
@ -74,10 +73,13 @@ int main(void)
tusb_init(); tusb_init();
// Create a task for tinyusb device stack
xTaskCreate( usb_device_task, "usbd", 150, NULL, configMAX_PRIORITIES-1, NULL);
// Create task // Create task
#if CFG_TUD_CDC #if CFG_TUD_CDC
extern void cdc_task(void* params); extern void cdc_task(void* params);
xTaskCreate( cdc_task, "cdc", 256, NULL, 2, NULL); xTaskCreate( cdc_task, "cdc", 256, NULL, configMAX_PRIORITIES-2, NULL);
#endif #endif
#if CFG_TUD_HID #if CFG_TUD_HID
@ -90,6 +92,19 @@ int main(void)
return 0; return 0;
} }
// USB Device Driver task
// This top level thread process all usb events and invoke callbacks
void usb_device_task(void* param)
{
(void) param;
// RTOS forever loop
while (1)
{
tusb_task();
}
}
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// USB CDC // USB CDC
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -98,11 +113,12 @@ void cdc_task(void* params)
{ {
(void) params; (void) params;
// RTOS forever loop
while ( 1 ) while ( 1 )
{ {
// connected and there are data available
if ( tud_cdc_connected() ) if ( tud_cdc_connected() )
{ {
// connected and there are data available
if ( tud_cdc_available() ) if ( tud_cdc_available() )
{ {
uint8_t buf[64]; uint8_t buf[64];
@ -110,10 +126,15 @@ void cdc_task(void* params)
// read and echo back // read and echo back
uint32_t count = tud_cdc_read(buf, sizeof(buf)); uint32_t count = tud_cdc_read(buf, sizeof(buf));
tud_cdc_write(buf, count); for(uint32_t i=0; i<count; i++)
} {
tud_cdc_write_char(buf[i]);
tud_cdc_write_flush(); if ( buf[i] == '\r' ) tud_cdc_write_char('\n');
}
tud_cdc_write_flush();
}
} }
} }
} }
@ -125,8 +146,8 @@ void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
// connected // connected
if ( dtr && rts ) if ( dtr && rts )
{ {
// print greeting // print initial message when connected
tud_cdc_write_str("tinyusb usb cdc\n"); tud_cdc_write_str("\r\nTinyUSB CDC MSC HID device with FreeRTOS example\r\n");
} }
} }
#endif #endif
@ -206,6 +227,7 @@ void tud_umount_cb(void)
void tud_cdc_rx_cb(uint8_t itf) void tud_cdc_rx_cb(uint8_t itf)
{ {
(void) itf;
} }
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -219,28 +241,3 @@ void led_blinky_cb(TimerHandle_t xTimer)
board_led_control(led_state); board_led_control(led_state);
led_state = 1 - led_state; // toggle led_state = 1 - led_state; // toggle
} }
//--------------------------------------------------------------------+
// HELPER FUNCTION
//--------------------------------------------------------------------+
void print_greeting(void)
{
char const * const rtos_name[] =
{
[OPT_OS_NONE] = "None",
[OPT_OS_FREERTOS] = "FreeRTOS",
};
printf("\n--------------------------------------------------------------------\n");
printf("- Device Demo (a tinyusb example)\n");
printf("- if you find any bugs or get any questions, feel free to file an\n");
printf("- issue at https://github.com/hathach/tinyusb\n");
printf("--------------------------------------------------------------------\n\n");
printf("This DEVICE demo is configured to support:");
printf(" - RTOS = %s\n", rtos_name[CFG_TUSB_OS]);
if (CFG_TUD_CDC ) puts(" - Communication Device Class");
if (CFG_TUD_MSC ) puts(" - Mass Storage");
if (CFG_TUD_HID_KEYBOARD ) puts(" - HID Keyboard");
if (CFG_TUD_HID_MOUSE ) puts(" - HID Mouse");
}

View File

@ -53,14 +53,8 @@
#endif #endif
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE #define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
#define CFG_TUSB_DEBUG 2
/*------------- RTOS -------------*/
#define CFG_TUSB_OS OPT_OS_FREERTOS #define CFG_TUSB_OS OPT_OS_FREERTOS
#define CFG_TUD_TASK_PRIO (configMAX_PRIORITIES-1) #define CFG_TUSB_DEBUG 2
//#define CFG_TUD_TASK_QUEUE_SZ 16
//#define CFG_TUD_TASK_STACK_SZ 150
/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment. /* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
* Tinyusb use follows macros to declare transferring memory so that they can be put * Tinyusb use follows macros to declare transferring memory so that they can be put

View File

@ -80,14 +80,14 @@
// DEVICE CONFIGURATION // DEVICE CONFIGURATION
//-------------------------------------------------------------------- //--------------------------------------------------------------------
#define CFG_TUH_HUB 1 #define CFG_TUH_HUB 1
#define CFG_TUH_CDC 1 #define CFG_TUH_CDC 1
#define CFG_TUH_HID_KEYBOARD 0 #define CFG_TUH_HID_KEYBOARD 0
#define CFG_TUH_HID_MOUSE 0 #define CFG_TUH_HID_MOUSE 0
#define CFG_TUSB_HOST_HID_GENERIC 0 // (not yet supported) #define CFG_TUSB_HOST_HID_GENERIC 0 // (not yet supported)
#define CFG_TUH_MSC 0 #define CFG_TUH_MSC 0
#define CFG_TUSB_HOST_DEVICE_MAX (CFG_TUH_HUB ? 5 : 1) // normal hub has 4 ports #define CFG_TUSB_HOST_DEVICE_MAX (CFG_TUH_HUB ? 5 : 1) // normal hub has 4 ports
//------------- CLASS -------------// //------------- CLASS -------------//
#define CFG_TUD_CDC 0 #define CFG_TUD_CDC 0

View File

@ -55,9 +55,6 @@
/*------------- RTOS -------------*/ /*------------- RTOS -------------*/
//#define CFG_TUSB_OS OPT_OS_NONE // be passed from IDE/command line for easy project switching //#define CFG_TUSB_OS OPT_OS_NONE // be passed from IDE/command line for easy project switching
//#define CFG_TUD_TASK_PRIO 0
//#define CFG_TUD_TASK_QUEUE_SZ 16
//#define CFG_TUD_TASK_STACK_SZ 150
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// DEVICE CONFIGURATION // DEVICE CONFIGURATION

View File

@ -46,16 +46,17 @@
void vApplicationMallocFailedHook(void) void vApplicationMallocFailedHook(void)
{ {
taskDISABLE_INTERRUPTS(); taskDISABLE_INTERRUPTS();
TU_ASSERT(false, ); TU_ASSERT(false, );
} }
void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName) void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName)
{ {
(void) pxTask; (void) pxTask;
(void) pcTaskName;
taskDISABLE_INTERRUPTS(); taskDISABLE_INTERRUPTS();
TU_ASSERT(false, ); TU_ASSERT(false, );
} }
/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an /* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an

View File

@ -48,9 +48,7 @@ static void tu_fifo_lock(tu_fifo_t *f)
{ {
if (f->mutex) if (f->mutex)
{ {
uint32_t err; osal_mutex_lock(f->mutex, OSAL_TIMEOUT_WAIT_FOREVER);
(void) err;
osal_mutex_lock(f->mutex, OSAL_TIMEOUT_WAIT_FOREVER, &err);
} }
} }

View File

@ -36,8 +36,6 @@
*/ */
/**************************************************************************/ /**************************************************************************/
// This top level class manages the bus state and delegates events to class-specific drivers.
#include "tusb_option.h" #include "tusb_option.h"
#if TUSB_OPT_DEVICE_ENABLED #if TUSB_OPT_DEVICE_ENABLED
@ -52,15 +50,6 @@
#define CFG_TUD_TASK_QUEUE_SZ 16 #define CFG_TUD_TASK_QUEUE_SZ 16
#endif #endif
#ifndef CFG_TUD_TASK_STACK_SZ
#define CFG_TUD_TASK_STACK_SZ 150
#endif
#ifndef CFG_TUD_TASK_PRIO
#define CFG_TUD_TASK_PRIO 0
#endif
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// Device Data // Device Data
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -153,16 +142,14 @@ static usbd_class_driver_t const usbd_class_drivers[] =
#endif #endif
}; };
enum { USBD_CLASS_DRIVER_COUNT = sizeof(usbd_class_drivers) / sizeof(usbd_class_driver_t) }; enum { USBD_CLASS_DRIVER_COUNT = TU_ARRAY_SZIE(usbd_class_drivers) };
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// DCD Event // DCD Event
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
OSAL_TASK_DEF(_usbd_task_def, "usbd", usbd_task, CFG_TUD_TASK_PRIO, CFG_TUD_TASK_STACK_SZ);
// Event queue // Event queue
// role device/host is used by OS NONE for mutex (disable usb isr) only // OPT_MODE_DEVICE is used by OS NONE for mutex (disable usb isr)
OSAL_QUEUE_DEF(OPT_MODE_DEVICE, _usbd_qdef, CFG_TUD_TASK_QUEUE_SZ, dcd_event_t); OSAL_QUEUE_DEF(OPT_MODE_DEVICE, _usbd_qdef, CFG_TUD_TASK_QUEUE_SZ, dcd_event_t);
static osal_queue_t _usbd_q; static osal_queue_t _usbd_q;
@ -195,8 +182,6 @@ bool usbd_init (void)
_usbd_q = osal_queue_create(&_usbd_qdef); _usbd_q = osal_queue_create(&_usbd_qdef);
TU_ASSERT(_usbd_q != NULL); TU_ASSERT(_usbd_q != NULL);
osal_task_create(&_usbd_task_def);
// Init class drivers // Init class drivers
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++) usbd_class_drivers[i].init(); for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++) usbd_class_drivers[i].init();
@ -221,9 +206,13 @@ static void usbd_reset(uint8_t rhport)
} }
} }
// Main device task implementation /* USB Device Driver task
static void usbd_task_body(void) * This top level thread manages all device controller event and delegates events to class-specific drivers.
*/
void usbd_task( void* param)
{ {
(void) param;
// Loop until there is no more events in the queue // Loop until there is no more events in the queue
while (1) while (1)
{ {
@ -297,25 +286,6 @@ static void usbd_task_body(void)
} }
} }
/* USB device task
* Thread that handles all device events. With an real RTOS, the task must be a forever loop and never return.
* For coding convenience with no RTOS, we use wrapped sub-function for processing to easily return at any time.
*/
void usbd_task( void* param)
{
(void) param;
#if CFG_TUSB_OS != OPT_OS_NONE
while (1) {
#endif
usbd_task_body();
#if CFG_TUSB_OS != OPT_OS_NONE
}
#endif
}
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// Control Request Parser & Handling // Control Request Parser & Handling
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+

View File

@ -46,15 +46,6 @@
#define CFG_TUH_TASK_QUEUE_SZ 16 #define CFG_TUH_TASK_QUEUE_SZ 16
#endif #endif
#ifndef CFG_TUH_TASK_STACK_SZ
#define CFG_TUH_TASK_STACK_SZ 200
#endif
#ifndef CFG_TUH_TASK_PRIO
#define CFG_TUH_TASK_PRIO 0
#endif
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// INCLUDE // INCLUDE
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -123,9 +114,9 @@ enum { USBH_CLASS_DRIVER_COUNT = TU_ARRAY_SZIE(usbh_class_drivers) };
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION // INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
CFG_TUSB_MEM_SECTION usbh_device_t _usbh_devices[CFG_TUSB_HOST_DEVICE_MAX+1]; // including zero-address
OSAL_TASK_DEF(_usbh_task_def, "usbh", usbh_task, CFG_TUH_TASK_PRIO, CFG_TUH_TASK_STACK_SZ); // including zero-address
CFG_TUSB_MEM_SECTION usbh_device_t _usbh_devices[CFG_TUSB_HOST_DEVICE_MAX+1];
// Event queue // Event queue
// role device/host is used by OS NONE for mutex (disable usb isr) only // role device/host is used by OS NONE for mutex (disable usb isr) only
@ -161,8 +152,6 @@ bool usbh_init(void)
_usbh_q = osal_queue_create( &_usbh_qdef ); _usbh_q = osal_queue_create( &_usbh_qdef );
TU_ASSERT(_usbh_q != NULL); TU_ASSERT(_usbh_q != NULL);
osal_task_create(&_usbh_task_def);
//------------- Semaphore, Mutex for Control Pipe -------------// //------------- Semaphore, Mutex for Control Pipe -------------//
for(uint8_t i=0; i<CFG_TUSB_HOST_DEVICE_MAX+1; i++) // including address zero for(uint8_t i=0; i<CFG_TUSB_HOST_DEVICE_MAX+1; i++) // including address zero
{ {
@ -610,12 +599,18 @@ bool enum_task(hcd_event_t* event)
return true; return true;
} }
bool usbh_task_body(void) /* USB Host Driver task
* This top level thread manages all host controller event and delegates events to class-specific drivers.
*/
void usbh_task(void* param)
{ {
(void) param;
// Loop until there is no more events in the queue
while (1) while (1)
{ {
hcd_event_t event; hcd_event_t event;
if ( !osal_queue_receive(_usbh_q, &event) ) return false; if ( !osal_queue_receive(_usbh_q, &event) ) return;
switch (event.event_id) switch (event.event_id)
{ {
@ -629,25 +624,6 @@ bool usbh_task_body(void)
} }
} }
/* USB Host task
* Thread that handles all device events. With an real RTOS, the task must be a forever loop and never return.
* For coding convenience with no RTOS, we use wrapped sub-function for processing to easily return at any time.
*/
void usbh_task(void* param)
{
(void) param;
#if CFG_TUSB_OS != OPT_OS_NONE
while (1) {
#endif
usbh_task_body();
#if CFG_TUSB_OS != OPT_OS_NONE
}
#endif
}
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// INTERNAL HELPER // INTERNAL HELPER
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+

View File

@ -68,8 +68,6 @@ typedef void (*osal_task_func_t)( void * );
* uint32_t tusb_hal_millis(void) * uint32_t tusb_hal_millis(void)
* *
* Task * Task
* osal_task_def_t
* bool osal_task_create(osal_task_def_t* taskdef)
* void osal_task_delay(uint32_t msec) * void osal_task_delay(uint32_t msec)
* *
* Queue * Queue

View File

@ -65,27 +65,6 @@ static inline bool in_isr(void)
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// TASK API // TASK API
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#define OSAL_TASK_DEF(_name, _str, _func, _prio, _stack_sz) \
static uint8_t _name##_##buf[_stack_sz*sizeof(StackType_t)]; \
osal_task_def_t _name = { .func = _func, .prio = _prio, .stack_sz = _stack_sz, .buf = _name##_##buf, .strname = _str };
typedef struct
{
osal_task_func_t func;
uint16_t prio;
uint16_t stack_sz;
void* buf;
const char* strname;
StaticTask_t stask;
}osal_task_def_t;
static inline bool osal_task_create(osal_task_def_t* taskdef)
{
return NULL != xTaskCreateStatic(taskdef->func, taskdef->strname, taskdef->stack_sz, NULL, taskdef->prio, (StackType_t*) taskdef->buf, &taskdef->stask);
}
static inline void osal_task_delay(uint32_t msec) static inline void osal_task_delay(uint32_t msec)
{ {
vTaskDelay( pdMS_TO_TICKS(msec) ); vTaskDelay( pdMS_TO_TICKS(msec) );

View File

@ -46,27 +46,6 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// TASK API // TASK API
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#define OSAL_TASK_DEF(_name, _str, _func, _prio, _stack_sz) \
static os_stack_t _name##_##buf[_stack_sz]; \
osal_task_def_t _name = { .func = _func, .prio = _prio, .stack_sz = _stack_sz, .buf = _name##_##buf, .strname = _str };
typedef struct
{
struct os_task mynewt_task;
osal_task_func_t func;
uint16_t prio;
uint16_t stack_sz;
void* buf;
const char* strname;
}osal_task_def_t;
static inline bool osal_task_create(osal_task_def_t* taskdef)
{
return OS_OK == os_task_init(&taskdef->mynewt_task, taskdef->strname, taskdef->func, NULL, taskdef->prio, OS_WAIT_FOREVER,
(os_stack_t*) taskdef->buf, taskdef->stack_sz);
}
static inline void osal_task_delay(uint32_t msec) static inline void osal_task_delay(uint32_t msec)
{ {
os_time_delay( os_time_ms_to_ticks32(msec) ); os_time_delay( os_time_ms_to_ticks32(msec) );

View File

@ -51,17 +51,7 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// TASK API // TASK API
// Virtually do nothing in osal none
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#define OSAL_TASK_DEF(_name, _str, _func, _prio, _stack_sz) osal_task_def_t _name;
typedef uint8_t osal_task_def_t;
static inline bool osal_task_create(osal_task_def_t* taskdef)
{
(void) taskdef;
return true;
}
static inline void osal_task_delay(uint32_t msec) static inline void osal_task_delay(uint32_t msec)
{ {
uint32_t start = tusb_hal_millis(); uint32_t start = tusb_hal_millis();

View File

@ -68,7 +68,6 @@ bool tusb_init(void)
return TUSB_ERROR_NONE; return TUSB_ERROR_NONE;
} }
#if CFG_TUSB_OS == OPT_OS_NONE
void tusb_task(void) void tusb_task(void)
{ {
#if TUSB_OPT_HOST_ENABLED #if TUSB_OPT_HOST_ENABLED
@ -79,8 +78,6 @@ void tusb_task(void)
usbd_task(NULL); usbd_task(NULL);
#endif #endif
} }
#endif
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
/* Debug /* Debug

View File

@ -105,11 +105,9 @@
// return true if success // return true if success
bool tusb_init(void); bool tusb_init(void);
#if CFG_TUSB_OS == OPT_OS_NONE /** Run all tinyusb's internal tasks (e.g host task, device task) and invoke callback
/** \brief Run all tinyusb's internal tasks (e.g host task, device task). * This should be called periodically within the mainloop.
* \note This function is only required when using no RTOS (\ref CFG_TUSB_OS == OPT_OS_NONE). All the stack functions
* & callback are invoked within this function. This should be called periodically within the mainloop
*
@code @code
int main(void) int main(void)
{ {
@ -126,10 +124,9 @@ bool tusb_init(void);
} }
} }
@endcode @endcode
*
*/ */
void tusb_task(void); void tusb_task(void);
#endif
/** @} */ /** @} */

View File

@ -224,11 +224,6 @@
//------------------------------------------------------------------ //------------------------------------------------------------------
// Configuration Validation // Configuration Validation
//------------------------------------------------------------------ //------------------------------------------------------------------
#if (CFG_TUSB_OS != OPT_OS_NONE) && !defined (CFG_TUD_TASK_PRIO)
#error CFG_TUD_TASK_PRIO need to be defined (hint: use the highest if possible)
#endif
#if CFG_TUD_ENDOINT0_SIZE > 64 #if CFG_TUD_ENDOINT0_SIZE > 64
#error Control Endpoint Max Packet Size cannot be larger than 64 #error Control Endpoint Max Packet Size cannot be larger than 64
#endif #endif