1 /* 2 * Copyright (c) 2022, sakumisu 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 #ifndef USB_OSAL_H 7 #define USB_OSAL_H 8 9 #include <stdint.h> 10 #include <string.h> 11 #include <stdbool.h> 12 13 #ifdef __INCLUDE_NUTTX_CONFIG_H 14 #define CONFIG_USB_OSAL_THREAD_SET_ARGV int argc, char **argv 15 #define CONFIG_USB_OSAL_THREAD_GET_ARGV ((uintptr_t)strtoul(argv[1], NULL, 16)) 16 #elif defined(__ZEPHYR__) 17 #define CONFIG_USB_OSAL_THREAD_SET_ARGV void *p1, void *p2, void *p3 18 #define CONFIG_USB_OSAL_THREAD_GET_ARGV ((uintptr_t)p1) 19 #else 20 #define CONFIG_USB_OSAL_THREAD_SET_ARGV void *argument 21 #define CONFIG_USB_OSAL_THREAD_GET_ARGV ((uintptr_t)argument) 22 #endif 23 24 #define USB_OSAL_WAITING_FOREVER (0xFFFFFFFFU) 25 26 typedef void *usb_osal_thread_t; 27 typedef void *usb_osal_sem_t; 28 typedef void *usb_osal_mutex_t; 29 typedef void *usb_osal_mq_t; 30 typedef void (*usb_thread_entry_t)(CONFIG_USB_OSAL_THREAD_SET_ARGV); 31 typedef void (*usb_timer_handler_t)(void *argument); 32 struct usb_osal_timer { 33 usb_timer_handler_t handler; 34 void *argument; 35 bool is_period; 36 uint32_t timeout_ms; 37 void *timer; 38 }; 39 40 /* 41 * Task with smaller priority value indicates higher task priority 42 */ 43 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); 44 void usb_osal_thread_delete(usb_osal_thread_t thread); 45 void usb_osal_thread_schedule_other(void); 46 47 usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count); 48 void usb_osal_sem_delete(usb_osal_sem_t sem); 49 int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout); 50 int usb_osal_sem_give(usb_osal_sem_t sem); 51 void usb_osal_sem_reset(usb_osal_sem_t sem); 52 53 usb_osal_mutex_t usb_osal_mutex_create(void); 54 void usb_osal_mutex_delete(usb_osal_mutex_t mutex); 55 int usb_osal_mutex_take(usb_osal_mutex_t mutex); 56 int usb_osal_mutex_give(usb_osal_mutex_t mutex); 57 58 usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs); 59 void usb_osal_mq_delete(usb_osal_mq_t mq); 60 int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr); 61 int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout); 62 63 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); 64 void usb_osal_timer_delete(struct usb_osal_timer *timer); 65 void usb_osal_timer_start(struct usb_osal_timer *timer); 66 void usb_osal_timer_stop(struct usb_osal_timer *timer); 67 68 size_t usb_osal_enter_critical_section(void); 69 void usb_osal_leave_critical_section(size_t flag); 70 71 void usb_osal_msleep(uint32_t delay); 72 73 void *usb_osal_malloc(size_t size); 74 void usb_osal_free(void *ptr); 75 76 #endif /* USB_OSAL_H */ 77