mirror of
https://github.com/sakumisu/CherryUSB.git
synced 2025-05-09 00:21:44 +08:00
update(osal/usb_osal_nuttx): update timer driver
Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
parent
9aa7a76353
commit
ccbe0232dc
@ -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->timer);
|
||||
|
||||
wd_cancel(&__timer->wdog);
|
||||
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user