mirror of
https://github.com/hathach/tinyusb.git
synced 2026-03-10 09:34:43 +00:00
add osal_time_millis() to osal requirement
implement tusb_time_millis_api() with osal_time_millis() when OS is not NONE
This commit is contained in:
@ -90,12 +90,6 @@
|
||||
// TODO move to a more obvious place/file
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// Get current milliseconds, required by some port/configuration without RTOS
|
||||
extern uint32_t tusb_time_millis_api(void);
|
||||
|
||||
// Delay in milliseconds, use tusb_time_millis_api() by default. required by some port/configuration with no RTOS
|
||||
extern void tusb_time_delay_ms_api(uint32_t ms);
|
||||
|
||||
// flush data cache
|
||||
extern void tusb_app_dcache_flush(uintptr_t addr, uint32_t data_size);
|
||||
|
||||
|
||||
@ -74,6 +74,8 @@ typedef void (*osal_task_func_t)(void* param);
|
||||
/*--------------------------------------------------------------------
|
||||
OSAL Porting API
|
||||
Should be implemented as static inline function in osal_port.h header
|
||||
uint32_t osal_time_millis(void);
|
||||
|
||||
void osal_spin_init(osal_spinlock_t *ctx);
|
||||
void osal_spin_lock(osal_spinlock_t *ctx, bool in_isr)
|
||||
void osal_spin_unlock(osal_spinlock_t *ctx, bool in_isr);
|
||||
|
||||
@ -99,6 +99,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
vTaskDelay(pdMS_TO_TICKS(msec));
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return pdTICKS_TO_MS(xTaskGetTickCount());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
@ -40,6 +40,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
os_time_delay( os_time_ms_to_ticks32(msec) );
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return os_time_ticks_to_ms32(os_time_get());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
@ -31,6 +31,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// osal_time_millis() is not provided, tusb_time_millis_api() must be implemented by user application
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
@ -43,6 +43,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
sleep_ms(msec);
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return to_ms_since_boot(get_absolute_time());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
@ -42,6 +42,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
rt_thread_mdelay(msec);
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return (uint32_t)((((uint64_t)rt_tick_get()) * 1000) / RT_TICK_PER_SECOND);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
@ -46,6 +46,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
os_dly_wait(lo);
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return os_time_get();
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint16_t msec2wait(uint32_t msec) {
|
||||
if (msec == OSAL_TIMEOUT_WAIT_FOREVER) {
|
||||
return 0xFFFF;
|
||||
|
||||
@ -35,6 +35,10 @@ TU_ATTR_ALWAYS_INLINE static inline void osal_task_delay(uint32_t msec) {
|
||||
k_msleep(msec);
|
||||
}
|
||||
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t osal_time_millis(void) {
|
||||
return k_uptime_get_32();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Spinlock API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
10
src/tusb.c
10
src/tusb.c
@ -45,17 +45,23 @@ tusb_role_t _tusb_rhport_role[TUP_USBIP_CONTROLLER_NUM] = { TUSB_ROLE_INVALID };
|
||||
// Weak/Default API, can be overwritten by Application
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
#if CFG_TUSB_OS != OPT_OS_NONE
|
||||
uint32_t tusb_time_millis_api(void) {
|
||||
return osal_time_millis();
|
||||
}
|
||||
#endif
|
||||
|
||||
TU_ATTR_WEAK void tusb_time_delay_ms_api(uint32_t ms) {
|
||||
#if CFG_TUSB_OS != OPT_OS_NONE
|
||||
osal_task_delay(ms);
|
||||
#else
|
||||
// delay using millis() (if implemented) and/or frame number if possible
|
||||
// delay using millis()
|
||||
const uint32_t time_ms = tusb_time_millis_api();
|
||||
while ((tusb_time_millis_api() - time_ms) < ms) {}
|
||||
#endif
|
||||
}
|
||||
|
||||
TU_ATTR_WEAK void* tusb_app_virt_to_phys(void *virt_addr) {
|
||||
TU_ATTR_WEAK void *tusb_app_virt_to_phys(void *virt_addr) {
|
||||
return virt_addr;
|
||||
}
|
||||
|
||||
|
||||
12
src/tusb.h
12
src/tusb.h
@ -135,7 +135,7 @@
|
||||
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// User API
|
||||
// Application API
|
||||
//--------------------------------------------------------------------+
|
||||
#if CFG_TUH_ENABLED || CFG_TUD_ENABLED
|
||||
|
||||
@ -174,6 +174,16 @@ bool tusb_deinit(uint8_t rhport);
|
||||
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// Get current milliseconds, required by some port/configuration without RTOS
|
||||
extern uint32_t tusb_time_millis_api(void);
|
||||
|
||||
// Delay in milliseconds, use tusb_time_millis_api() by default. required by some port/configuration with no RTOS
|
||||
extern void tusb_time_delay_ms_api(uint32_t ms);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user