diff options
| author | sakumisu <[email protected]> | 2025-05-06 18:08:36 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2025-05-06 18:08:36 +0800 |
| commit | ccbe0232dc844a79ee3b9d9fe855e3186b2fb9a9 (patch) | |
| tree | b4dc6002962fe0bd70d2e9fdfc35c7200e82b796 | |
| parent | 9aa7a76353b1c899b04fb3171cd1224aa29f9fd4 (diff) | |
update(osal/usb_osal_nuttx): update timer driver
Signed-off-by: sakumisu <[email protected]>
| -rw-r--r-- | osal/usb_osal_nuttx.c | 49 |
1 files changed, 21 insertions, 28 deletions
diff --git a/osal/usb_osal_nuttx.c b/osal/usb_osal_nuttx.c index 1fb58ca8..6732cb3a 100644 --- a/osal/usb_osal_nuttx.c +++ b/osal/usb_osal_nuttx.c @@ -37,11 +37,6 @@ struct mq_adpt { char name[16]; /* Message queue name */ }; -struct timer_adpt { - struct usb_osal_timer timer; - struct wdog_s wdog; -}; - usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args) { int pid; @@ -291,60 +286,58 @@ int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout) static void os_timer_callback(wdparm_t arg) { - struct timer_adpt *timer; + struct usb_osal_timer *timer; - timer = (struct timer_adpt *)arg; + timer = (struct usb_osal_timer *)arg; - if (timer->timer.handler) { - timer->timer.handler(timer->timer.argument); + if (timer->handler) { + timer->handler(timer->argument); } - if (timer->timer.is_period) { - wd_start(&timer->wdog, timer->timer.ticks, os_timer_callback, arg); + if (timer->is_period) { + wd_start(timer->timer, timer->ticks, os_timer_callback, arg); } } struct usb_osal_timer *usb_osal_timer_create(const char *name, uint32_t timeout_ms, usb_timer_handler_t handler, void *argument, bool is_period) { - struct timer_adpt *timer = kmm_malloc(sizeof(struct timer_adpt)); + struct usb_osal_timer *timer = kmm_malloc(sizeof(struct usb_osal_timer)); + struct wdog_s *wdog = kmm_malloc(sizeof(struct wdog_s)); (void)name; - if (!timer) { + if (!timer || !wdog) { return NULL; } - memset((void *)timer, 0, sizeof(struct timer_adpt)); + memset((void *)timer, 0, sizeof(struct usb_osal_timer)); + memset((void *)wdog, 0, sizeof(struct wdog_s)); - timer->timer.handler = handler; - timer->timer.argument = argument; - timer->timer.ticks = MSEC2TICK(timeout_ms); - timer->timer.is_period = is_period; + timer->handler = handler; + timer->argument = argument; + timer->ticks = MSEC2TICK(timeout_ms); + timer->is_period = is_period; + timer->timer = (void *)wdog; return (struct usb_osal_timer *)timer; } void usb_osal_timer_delete(struct usb_osal_timer *timer) { - struct timer_adpt *__timer = (struct timer_adpt *)timer; - - wd_cancel(&__timer->wdog); + wd_cancel(timer->timer); - kmm_free(__timer); + kmm_free(timer->timer); + kmm_free(timer); } void usb_osal_timer_start(struct usb_osal_timer *timer) { - struct timer_adpt *__timer = (struct timer_adpt *)timer; - - wd_start(&__timer->wdog, __timer->timer.ticks, os_timer_callback, (wdparm_t)__timer); + wd_start(timer->timer, timer->ticks, os_timer_callback, (wdparm_t)timer); } void usb_osal_timer_stop(struct usb_osal_timer *timer) { - struct timer_adpt *__timer = (struct timer_adpt *)timer; - - wd_cancel(&__timer->wdog); + wd_cancel(timer->timer); } size_t usb_osal_enter_critical_section(void) |
