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:
hathach
2026-02-27 23:34:48 +07:00
parent 8302adfab8
commit 7ea02fd6c9
11 changed files with 47 additions and 9 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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;

View File

@ -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
//--------------------------------------------------------------------+

View File

@ -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;
}

View File

@ -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