1 /* 2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef R_USB_DEVICE_API_H 8 #define R_USB_DEVICE_API_H 9 10 /*********************************************************************************************************************** 11 * Includes 12 **********************************************************************************************************************/ 13 14 /* Includes board and MCU related header files. */ 15 #include "bsp_api.h" 16 17 /* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ 18 FSP_HEADER 19 20 /********************************************************************************************************************** 21 * Macro definitions 22 **********************************************************************************************************************/ 23 24 /********************************************************************************************************************** 25 * Typedef definitions 26 **********************************************************************************************************************/ 27 28 /** USB setup packet */ 29 typedef struct __PACKED st_usbd_setup 30 { 31 uint16_t request_type; 32 uint16_t request_value; 33 uint16_t request_index; 34 uint16_t request_length; 35 } usbd_setup_t; 36 37 /** USB Endpoint Descriptor */ 38 typedef struct __PACKED st_usbd_desc_endpoint 39 { 40 uint8_t bLength; 41 uint8_t bDescriptorType; 42 uint8_t bEndpointAddress; 43 union 44 { 45 uint8_t bmAttributes; 46 struct 47 { 48 uint8_t xfer : 2; 49 uint8_t sync : 2; 50 uint8_t usage : 2; 51 uint8_t : 2; 52 } Attributes; 53 }; 54 55 uint16_t wMaxPacketSize; 56 uint8_t bInterval; 57 } usbd_desc_endpoint_t; 58 59 /** USB speed */ 60 typedef enum e_usbd_speed 61 { 62 USBD_SPEED_LS = 0, 63 USBD_SPEED_FS, 64 USBD_SPEED_HS, 65 USBD_SPEED_INVALID, 66 } usbd_speed_t; 67 68 /** USB event code */ 69 typedef enum e_usbd_event_id 70 { 71 USBD_EVENT_INVALID = 0, 72 USBD_EVENT_BUS_RESET, 73 USBD_EVENT_VBUS_RDY, 74 USBD_EVENT_VBUS_REMOVED, 75 USBD_EVENT_SOF, 76 USBD_EVENT_SUSPEND, 77 USBD_EVENT_RESUME, 78 USBD_EVENT_SETUP_RECEIVED, 79 USBD_EVENT_XFER_COMPLETE, 80 } usbd_event_id_t; 81 82 /** USB transfer result code */ 83 typedef enum e_usbd_xfer_result 84 { 85 USBD_XFER_RESULT_SUCCESS = 0, 86 USBD_XFER_RESULT_FAILED, 87 USBD_XFER_RESULT_STALLED, 88 USBD_XFER_RESULT_TIMEOUT, 89 USBD_XFER_RESULT_INVALID 90 } usbd_xfer_result_t; 91 92 /** USB bus reset event input argument */ 93 typedef struct st_usbd_bus_reset_evt 94 { 95 usbd_speed_t speed; 96 } usbd_bus_reset_evt_t; 97 98 /** USB SOF detection event input argument */ 99 typedef struct st_usbd_sof_evt 100 { 101 uint32_t frame_count; 102 } usbd_sof_evt_t; 103 104 /** USB transfer complete event input argument */ 105 typedef struct st_usbd_xfer_complete 106 { 107 usbd_xfer_result_t result; 108 uint8_t ep_addr; 109 uint32_t len; 110 } usbd_xfer_complete_t; 111 112 typedef struct st_usb_event 113 { 114 usbd_event_id_t event_id; 115 union 116 { 117 usbd_bus_reset_evt_t bus_reset; 118 usbd_sof_evt_t sof; 119 usbd_setup_t setup_received; 120 usbd_xfer_complete_t xfer_complete; 121 }; 122 } usbd_event_t; 123 124 typedef struct st_usbd_callback_arg 125 { 126 uint32_t module_number; 127 usbd_event_t event; 128 void const * p_context; 129 } usbd_callback_arg_t; 130 131 /** USB configuration */ 132 typedef struct st_usbd_cfg 133 { 134 uint32_t module_number; 135 usbd_speed_t usb_speed; 136 IRQn_Type irq; 137 IRQn_Type irq_r; 138 IRQn_Type irq_d0; 139 IRQn_Type irq_d1; 140 IRQn_Type hs_irq; 141 IRQn_Type hsirq_d0; 142 IRQn_Type hsirq_d1; 143 uint8_t ipl; 144 uint8_t ipl_r; 145 uint8_t ipl_d0; 146 uint8_t ipl_d1; 147 uint8_t hsipl; 148 uint8_t hsipl_d0; 149 uint8_t hsipl_d1; 150 void (* p_callback)(usbd_callback_arg_t * p_args); 151 void const * p_context; 152 void const * p_extend; 153 } usbd_cfg_t; 154 155 typedef void usbd_ctrl_t; 156 157 #endif /* R_USB_DEVICE_API_H */ 158