USB Component  Version 6.5
MDK-Professional Middleware for USB Device and Host
 All Data Structures Functions Variables Enumerations Enumerator Groups Pages
rl_usb.h
1 /*------------------------------------------------------------------------------
2  * MDK Middleware - Component ::USB
3  * Copyright (c) 2004-2015 ARM Germany GmbH. All rights reserved.
4  *------------------------------------------------------------------------------
5  * Name: rl_usb.h
6  * Purpose: USB User API
7  * Rev.: V6.5.0
8  *----------------------------------------------------------------------------*/
9 
10 #ifndef __RL_USB_H__
11 #define __RL_USB_H__
12 
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 #include <stdint.h>
19 #include <stdbool.h>
20 #include "cmsis_os.h"
21 #include "usb_def.h"
22 #include "usb_cdc.h"
23 #include "usb_hid.h"
24 #include "usb_msc.h"
25 
26 
28 
30 typedef enum {
31  usbOK = 0,
32 
35 
36  usbThreadError = 0x10,
39 
52 
55 
57 } usbStatus;
58 
60 #ifdef __BIG_ENDIAN
61  #define U32_LE(v) (uint32_t)(__rev(v))
62  #define U16_LE(v) (uint16_t)(__rev(v) >> 16)
63  #define U32_BE(v) (uint32_t)(v)
64  #define U16_BE(v) (uint16_t)(v)
65 #else
66  #define U32_BE(v) (uint32_t)(__rev(v))
67  #define U16_BE(v) (uint16_t)(__rev(v) >> 16)
68  #define U32_LE(v) (uint32_t)(v)
69  #define U16_LE(v) (uint16_t)(v)
70 #endif
71 
72 // ==== USB Device Constants and Defines ====
73 
75 typedef enum {
81 
83 #define USBD_MSC_MEDIA_READY (1U)
84 #define USBD_MSC_MEDIA_PROTECTED (1U<<1)
85 
86 
87 typedef enum {
92 
94 typedef struct _usbd_msc_data_t {
95  MSC_CBW cbw;
96  MSC_CSW csw;
97  uint32_t block;
98  uint32_t offset;
99  uint32_t length;
100  bool mem_ok;
101  uint8_t bulk_stage;
102  uint32_t bulk_len;
103  uint32_t bulk_req_len;
104  bool media_ready;
105  uint32_t memory_size;
106  uint32_t block_size;
107  uint32_t block_group;
108  uint32_t block_count;
109  uint8_t *block_buf;
110  uint8_t request_sense;
112 
113 /* USB Device Mass Storage configuration structure (containing configuration values for MSC device instance) */
115 typedef struct _usbd_msc_t {
116  uint8_t *bulk_buf;
117  usbd_msc_data_t *data_ptr;
118  uint8_t dev_num;
119  uint8_t if_num;
120  uint8_t ep_bulk_in;
121  uint8_t ep_bulk_out;
122  uint32_t bulk_buf_sz;
123  uint16_t max_packet_size[2];
124  uint8_t *inquiry_data;
125 } const usbd_msc_t;
127 
128 /* USB Host Constants and Defines */
129 
130 /* USB Host Pipe settings structure */
132 typedef struct {
133  uint32_t hw_handle;
134  uint8_t dev_addr;
135  uint8_t dev_speed;
136  uint8_t hub_addr;
137  uint8_t hub_port;
138  uint8_t bEndpointAddress;
139  uint8_t bmAttributes;
140  uint16_t wMaxPacketSize;
141  uint8_t bInterval;
142  uint32_t transferred;
143  uint8_t active;
144 } USBH_PIPE;
146 
147 /* USB Host Device Instance (DEV) structure */
149 typedef struct {
150  uint8_t ctrl;
151  uint8_t dev_addr;
152  uint8_t dev_speed;
153  uint8_t hub_addr;
154  uint8_t hub_port;
155  struct {
156  uint8_t configured : 1;
157  uint8_t initialized : 1;
158  } state;
159  uint8_t max_packet_size;
160  uint8_t vid;
161  uint8_t pid;
162 
163  uint8_t class_custom;
164  uint8_t class_instance;
165  uint8_t class_driver;
166  uint8_t dev_desc_len;
167  uint8_t cfg_desc_len;
168  osThreadId recovery_thread_id;
169 } USBH_DEV;
171 
172 
173 /* USB Host externally defined variables */
174 
175 /* USB Host number of Custom Class (CLS) instances as defined in USBH_Config_Class.h file */
177 extern const uint8_t usbh_cls_num;
179 
180 
181 // ==== USB Device Functions ====
182 
183 
187 extern usbStatus USBD_Initialize (uint8_t device);
188 
192 extern usbStatus USBD_Uninitialize (uint8_t device);
193 
197 extern usbStatus USBD_Connect (uint8_t device);
198 
202 extern usbStatus USBD_Disconnect (uint8_t device);
203 
208 extern bool USBD_Configured (uint8_t device);
209 
210 #ifdef __DOXYGEN__
211 
212 // following functions are available for each instance of a Device.
213 // generic prefix USBD_Devicen is USBD_Device0 for Device instance 0.
214 
217 void USBD_Devicen_Initialize (void);
218 
221 void USBD_Devicen_Uninitialize (void);
222 
225 void USBD_Devicen_EventReset (void);
226 
235 usbdRequestStatus USBD_Devicen_Endpoint0_SetupPacketReceived (const USB_SETUP_PACKET *setup_packet, uint8_t **buf, int32_t *len);
236 
240 void USBD_Devicen_Endpoint0_SetupPacketProcessed (const USB_SETUP_PACKET *setup_packet);
241 
249 usbdRequestStatus USBD_Devicen_Endpoint0_OutDataReceived (uint32_t len);
250 
258 usbdRequestStatus USBD_Devicen_Endpoint0_InDataSent (uint32_t len);
259 
260 #endif // __DOXYGEN
261 
262 // ==== USB Device Audio Device Functions ====
263 
264 #ifdef __DOXYGEN__
265 
266 // following functions are available for each instance of a ADC class.
267 // generic prefix USBD_ADCn is USBD_ADC0 for ADC class instance 0.
268 
271 void USBD_ADCn_Initialize (void);
272 
275 void USBD_ADCn_Uninitialize (void);
276 
280 void USBD_ADCn_SpeakerStatusEvent (bool active);
281 
289 void USBD_ADCn_SpeakerMuteEvent (uint8_t ch, bool cur);
290 
298 void USBD_ADCn_SpeakerVolumeEvent (uint8_t ch, uint16_t cur);
299 
303 void USBD_ADCn_MicrophoneStatusEvent (bool active);
304 
312 void USBD_ADCn_MicrophoneMuteEvent (uint8_t ch, bool cur);
313 
321 void USBD_ADCn_MicrophoneVolumeEvent (uint8_t ch, uint16_t cur);
322 
323 #endif // __DOXYGEN
324 
336 extern usbStatus USBD_ADC_SpeakerSetVolumeRange (uint8_t instance, uint8_t ch, uint16_t min, uint16_t max, uint16_t res, uint16_t cur);
337 
349 extern usbStatus USBD_ADC_MicrophoneSetVolumeRange (uint8_t instance, uint8_t ch, uint16_t min, uint16_t max, uint16_t res, uint16_t cur);
350 
354 extern uint32_t USBD_ADC_ReceivedSamplesAvailable (uint8_t instance);
355 
359 extern uint32_t USBD_ADC_WrittenSamplesPending (uint8_t instance);
360 
368 extern int32_t USBD_ADC_ReadSamples (uint8_t instance, void *buf, int32_t num);
369 
377 extern int32_t USBD_ADC_WriteSamples (uint8_t instance, const void *buf, int32_t num);
378 
379 
380 // ==== USB Device Communication Device (Abstract Control Model) Functions ====
381 
382 #ifdef __DOXYGEN__
383 
384 // following functions are available for each instance of a CDC class.
385 // generic prefix USBD_CDCn is USBD_CDC0 for CDC class instance 0.
386 
389 void USBD_CDCn_ACM_Initialize (void);
390 
393 void USBD_CDCn_ACM_Uninitialize (void);
394 
397 void USBD_CDCn_ACM_Reset (void);
398 
403 bool USBD_CDCn_ACM_SetLineCoding (CDC_LINE_CODING *line_coding);
404 
409 bool USBD_CDCn_ACM_GetLineCoding (CDC_LINE_CODING *line_coding);
410 
417 bool USBD_CDCn_ACM_SetControlLineState (uint16_t state);
418 
422 void USBD_CDCn_ACM_DataReceived (uint32_t len);
423 
426 void USBD_CDCn_ACM_DataSent (void);
427 
428 #endif // __DOXYGEN
429 
435 extern int USBD_CDC_ACM_GetChar (uint8_t instance);
436 
443 extern int USBD_CDC_ACM_PutChar (uint8_t instance, int ch);
444 
452 extern int32_t USBD_CDC_ACM_ReadData (uint8_t instance, uint8_t *buf, int32_t len);
453 
461 extern int32_t USBD_CDC_ACM_WriteData (uint8_t instance, const uint8_t *buf, int32_t len);
462 
467 extern int32_t USBD_CDC_ACM_DataAvailable (uint8_t instance);
468 
480 extern usbStatus USBD_CDC_ACM_Notify (uint8_t instance, uint16_t state);
481 
482 
483 // ==== USB Device Human Interface Device Functions ====
484 
485 #ifdef __DOXYGEN__
486 
487 // following functions are available for each instance of a HID class.
488 // generic prefix USBD_HIDn is USBD_HID0 for HID class instance 0.
489 
492 void USBD_HIDn_Initialize (void);
493 
496 void USBD_HIDn_Uninitialize (void);
497 
511 int32_t USBD_HIDn_GetReport (uint8_t rtype, uint8_t req, uint8_t rid, uint8_t *buf);
512 
525 bool USBD_HIDn_SetReport (uint8_t rtype, uint8_t req, uint8_t rid, const uint8_t *buf, int32_t len);
526 
527 #endif // __DOXYGEN
528 
535 extern usbStatus USBD_HID_GetReportTrigger (uint8_t instance, uint8_t rid, const uint8_t *buf, int32_t len);
536 
537 
538 #ifdef __DOXYGEN__
539 
540 // ==== USB Device Mass Storage Device Functions ====
541 
542 // following functions are available for each instance of a MSC class.
543 // generic prefix USBD_MSCn is USBD_MSC0 for MSC class instance 0.
544 
547 void USBD_MSCn_Initialize (void);
548 
551 void USBD_MSCn_Uninitialize (void);
552 
558 bool USBD_MSCn_GetCacheInfo (uint32_t *buffer, uint32_t *size);
559 
565 bool USBD_MSCn_GetMediaCapacity (uint32_t *block_count, uint32_t *block_size);
566 
573 bool USBD_MSCn_Read (uint32_t lba, uint32_t cnt, uint8_t *buf);
574 
581 bool USBD_MSCn_Write (uint32_t lba, uint32_t cnt, const uint8_t *buf);
582 
591 uint32_t USBD_MSCn_CheckMedia (void);
592 
593 #endif // __DOXYGEN
594 
595 
596 // ==== USB Device Custom Class Functions ====
597 
598 #ifdef __DOXYGEN__
599 
600 // following functions are available for each instance of a Custom class.
601 // generic prefix USBD_CustomClassn is USBD_CustomClass0 for Custom class instance 0.
602 
605 void USBD_CustomClassn_Initialize (void);
606 
610 
613 void USBD_CustomClassn_EventReset (void);
614 
620 void USBD_CustomClassn_EventEndpointStart (uint8_t ep_addr);
621 
627 void USBD_CustomClassn_EventEndpointStop (uint8_t ep_addr);
628 
637 usbdRequestStatus USBD_CustomClassn_Endpoint0_SetupPacketReceived (const USB_SETUP_PACKET *setup_packet, uint8_t **buf, uint32_t *len);
638 
643 
651 usbdRequestStatus USBD_CustomClassn_Endpoint0_OutDataReceived (uint32_t len);
652 
660 usbdRequestStatus USBD_CustomClassn_Endpoint0_InDataSent (uint32_t len);
661 
666 void USBD_CustomClassn_Endpoint1_Event (uint32_t event);
667 void USBD_CustomClassn_Endpoint2_Event (uint32_t event);
668 void USBD_CustomClassn_Endpoint3_Event (uint32_t event);
669 void USBD_CustomClassn_Endpoint4_Event (uint32_t event);
670 void USBD_CustomClassn_Endpoint5_Event (uint32_t event);
671 void USBD_CustomClassn_Endpoint6_Event (uint32_t event);
672 void USBD_CustomClassn_Endpoint7_Event (uint32_t event);
673 void USBD_CustomClassn_Endpoint8_Event (uint32_t event);
674 void USBD_CustomClassn_Endpoint9_Event (uint32_t event);
675 void USBD_CustomClassn_Endpoint10_Event (uint32_t event);
676 void USBD_CustomClassn_Endpoint11_Event (uint32_t event);
677 void USBD_CustomClassn_Endpoint12_Event (uint32_t event);
678 void USBD_CustomClassn_Endpoint13_Event (uint32_t event);
679 void USBD_CustomClassn_Endpoint14_Event (uint32_t event);
680 void USBD_CustomClassn_Endpoint15_Event (uint32_t event);
681 
682 #endif // __DOXYGEN
683 
692 extern usbStatus USBD_EndpointRead (uint8_t device, uint8_t ep_addr, uint8_t *buf, uint32_t len);
693 
700 extern uint32_t USBD_EndpointReadGetResult (uint8_t device, uint8_t ep_addr);
701 
710 extern usbStatus USBD_EndpointWrite (uint8_t device, uint8_t ep_addr, const uint8_t *buf, uint32_t len);
711 
718 extern uint32_t USBD_EndpointWriteGetResult (uint8_t device, uint8_t ep_addr);
719 
727 extern usbStatus USBD_EndpointStall (uint8_t device, uint8_t ep_addr, bool stall);
728 
735 extern usbStatus USBD_EndpointAbort (uint8_t device, uint8_t ep_addr);
736 
737 
738 // ==== USB Host Functions ====
739 
743 extern usbStatus USBH_Initialize (uint8_t ctrl);
744 
748 extern usbStatus USBH_Uninitialize (uint8_t ctrl);
749 
753 extern usbStatus USBH_GetDeviceStatus (uint8_t device);
754 
755 
756 // ==== USB Host Mass Storage Functions ====
757 
761 extern usbStatus USBH_MSC_GetDeviceStatus (uint8_t instance);
762 
769 extern usbStatus USBH_MSC_Read (uint8_t instance, uint32_t lba, uint32_t cnt, uint8_t *buf);
770 
777 extern usbStatus USBH_MSC_Write (uint8_t instance, uint32_t lba, uint32_t cnt, const uint8_t *buf);
778 
784 extern usbStatus USBH_MSC_ReadCapacity (uint8_t instance, uint32_t *block_count, uint32_t *block_size);
785 
786 
787 // ==== USB Host Human Interface Device Functions ====
788 
792 extern usbStatus USBH_HID_GetDeviceStatus (uint8_t instance);
793 
801 extern int32_t USBH_HID_Read (uint8_t instance, uint8_t *buf, int32_t len);
802 
810 extern int32_t USBH_HID_Write (uint8_t instance, const uint8_t *buf, int32_t len);
811 
817 extern int USBH_HID_GetKeyboardKey (uint8_t instance);
818 
820 typedef struct _usbHID_MouseState {
821  uint8_t button;
822  int16_t x;
823  int16_t y;
825 
830 extern usbStatus USBH_HID_GetMouseState (uint8_t instance, usbHID_MouseState *state);
831 
836 extern void USBH_HID_ParseReportDescriptor (uint8_t instance, uint8_t *ptr_hid_report_desc);
837 
842 extern void USBH_HID_DataReceived (uint8_t instance, uint32_t len);
843 
844 
845 // ==== USB Host Communication Device Class (Abstract Control Model) Functions ====
846 
850 extern usbStatus USBH_CDC_ACM_GetDeviceStatus (uint8_t instance);
851 
857 extern usbStatus USBH_CDC_ACM_Send (uint8_t instance, const uint8_t *data, uint32_t num);
858 
862 extern uint32_t USBH_CDC_ACM_GetTxCount (uint8_t instance);
863 
869 extern usbStatus USBH_CDC_ACM_Receive (uint8_t instance, uint8_t *data, uint32_t num);
870 
874 extern uint32_t USBH_CDC_ACM_GetRxCount (uint8_t instance);
875 
880 extern usbStatus USBH_CDC_ACM_SetLineCoding (uint8_t instance, CDC_LINE_CODING *line_coding);
881 
886 extern usbStatus USBH_CDC_ACM_GetLineCoding (uint8_t instance, CDC_LINE_CODING *line_coding);
887 
894 extern usbStatus USBH_CDC_ACM_SetControlLineState (uint8_t instance, uint16_t state);
895 
908 extern void USBH_CDC_ACM_Notify (uint8_t instance, uint16_t status);
909 
916 extern usbStatus USBH_CDC_ACM_SendBreak (uint8_t instance, uint16_t duration);
917 
918 
919 // ==== USB Host Custom Class Functions ====
920 
924 extern usbStatus USBH_CustomClass_GetDeviceStatus (uint8_t instance);
925 
933 extern uint8_t USBH_CustomClass_Configure (const USBH_DEV *ptr_dev, const USB_DEVICE_DESCRIPTOR *ptr_dev_desc, const USB_CONFIGURATION_DESCRIPTOR *ptr_cfg_desc);
934 
939 extern usbStatus USBH_CustomClass_Unconfigure (uint8_t instance);
940 
945 extern usbStatus USBH_CustomClass_Initialize (uint8_t instance);
946 
951 extern usbStatus USBH_CustomClass_Uninitialize (uint8_t instance);
952 
968 extern USBH_PIPE *USBH_PipeCreate (uint8_t ctrl, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_max_packet_size, uint8_t ep_interval);
969 
979 extern usbStatus USBH_PipeModify (uint8_t ctrl, USBH_PIPE *ptr_pipe, uint8_t dev_addr, uint8_t dev_speed, uint8_t hub_addr, uint8_t hub_port, uint16_t ep_max_packet_size);
980 
985 extern usbStatus USBH_PipeDelete (uint8_t ctrl, USBH_PIPE *ptr_pipe);
986 
991 extern usbStatus USBH_PipeReset (uint8_t ctrl, USBH_PIPE *ptr_pipe);
992 
999 extern usbStatus USBH_PipeReceive (uint8_t ctrl, USBH_PIPE *ptr_pipe, uint8_t *buf, uint32_t len);
1000 
1005 extern uint32_t USBH_PipeReceiveGetResult (uint8_t ctrl, const USBH_PIPE *ptr_pipe);
1006 
1013 extern usbStatus USBH_PipeSend (uint8_t ctrl, USBH_PIPE *ptr_pipe, const uint8_t *buf, uint32_t len);
1014 
1019 extern uint32_t USBH_PipeSendGetResult (uint8_t ctrl, const USBH_PIPE *ptr_pipe);
1020 
1025 extern usbStatus USBH_PipeAbort (uint8_t ctrl, const USBH_PIPE *ptr_pipe);
1026 
1032 extern usbStatus USBH_DefaultPipeReceive (uint8_t ctrl, uint8_t *buf, uint32_t len);
1033 
1037 extern uint32_t USBH_DefaultPipeReceiveGetResult (uint8_t ctrl);
1038 
1043 extern usbStatus USBH_DefaultPipeSendSetup (uint8_t ctrl, const USB_SETUP_PACKET *setup_packet);
1044 
1050 extern usbStatus USBH_DefaultPipeSend (uint8_t ctrl, const uint8_t *buf, uint32_t len);
1051 
1055 extern uint32_t USBH_DefaultPipeSendGetResult (uint8_t ctrl);
1056 
1060 extern usbStatus USBH_DefaultPipeAbort (uint8_t ctrl);
1061 
1068 extern usbStatus USBH_ControlTransfer (uint8_t ctrl, const USB_SETUP_PACKET *setup_packet, uint8_t *data, uint32_t len);
1069 
1076 extern usbStatus USBH_DeviceRequest_GetStatus (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t *ptr_stat_dat);
1077 
1084 extern usbStatus USBH_DeviceRequest_ClearFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
1085 
1092 extern usbStatus USBH_DeviceRequest_SetFeature (uint8_t ctrl, uint8_t recipient, uint8_t index, uint8_t feature_selector);
1093 
1098 extern usbStatus USBH_DeviceRequest_SetAddress (uint8_t ctrl, uint8_t device_address);
1099 
1109 extern usbStatus USBH_DeviceRequest_GetDescriptor (uint8_t ctrl, uint8_t recipient, uint8_t descriptor_type, uint8_t descriptor_index, uint8_t language_id, uint8_t *descriptor_data, uint16_t descriptor_length);
1110 
1120 extern usbStatus USBH_DeviceRequest_SetDescriptor (uint8_t ctrl, uint8_t recipient, uint8_t descriptor_type, uint8_t descriptor_index, uint8_t language_id, uint8_t *descriptor_data, uint16_t descriptor_length);
1121 
1126 extern usbStatus USBH_DeviceRequest_GetConfiguration (uint8_t ctrl, uint8_t *ptr_configuration);
1127 
1132 extern usbStatus USBH_DeviceRequest_SetConfiguration (uint8_t ctrl, uint8_t configuration);
1133 
1139 extern usbStatus USBH_DeviceRequest_GetInterface (uint8_t ctrl, uint8_t index, uint8_t *ptr_alternate);
1140 
1146 extern usbStatus USBH_DeviceRequest_SetInterface (uint8_t ctrl, uint8_t index, uint8_t alternate);
1147 
1153 extern usbStatus USBH_DeviceRequest_SynchFrame (uint8_t ctrl, uint8_t index, uint8_t *ptr_frame_number);
1154 
1155 #ifdef __cplusplus
1156 }
1157 #endif
1158 
1159 #endif