boart test board
Dependencies: USBDevice mbed-dev lwip
Fork of USBSerial_HelloWorld by
usbd_desc2.h@21:85a0f94a84cd, 2018-07-30 (annotated)
- Committer:
- ua1arn
- Date:
- Mon Jul 30 13:11:13 2018 +0000
- Revision:
- 21:85a0f94a84cd
prepare to generate new (multi-configuratiom USB)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ua1arn | 21:85a0f94a84cd | 1 | #ifndef APPLICATION_USER_RLNDIS_USBD_DESC2_H |
ua1arn | 21:85a0f94a84cd | 2 | #define APPLICATION_USER_RLNDIS_USBD_DESC2_H |
ua1arn | 21:85a0f94a84cd | 3 | |
ua1arn | 21:85a0f94a84cd | 4 | #include <stdint.h> |
ua1arn | 21:85a0f94a84cd | 5 | #include <stddef.h> |
ua1arn | 21:85a0f94a84cd | 6 | #include <stdio.h> |
ua1arn | 21:85a0f94a84cd | 7 | |
ua1arn | 21:85a0f94a84cd | 8 | //#define WITHDEBUG 1 |
ua1arn | 21:85a0f94a84cd | 9 | |
ua1arn | 21:85a0f94a84cd | 10 | #define WITHUSBHW 1 |
ua1arn | 21:85a0f94a84cd | 11 | //#define WITHUSBUAC 1 /* использовать виртуальную звуковую плату на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 12 | //#define WITHUSBUAC3 1 /* формируются три канала передачи звука */ |
ua1arn | 21:85a0f94a84cd | 13 | //#define WITHUABUACOUTAUDIO48MONO 1 /* для уменьшения размера буферов в endpoints */ |
ua1arn | 21:85a0f94a84cd | 14 | |
ua1arn | 21:85a0f94a84cd | 15 | #define WITHUSBRNDIS 1 /* RNDIS использовать Remote NDIS на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 16 | #define WITHUSBCDCECM 1 /* ECM использовать Ethernet Control Model на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 17 | |
ua1arn | 21:85a0f94a84cd | 18 | //#define WITHUSBCDC 1 /* ACM использовать виртуальный последовательный порт на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 19 | //#define WITHUSBCDCEEM 1 /* EEM использовать Ethernet Emulation Model на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 20 | //#define WITHUSBHID 1 /* HID использовать Human Interface Device на USB соединении */ |
ua1arn | 21:85a0f94a84cd | 21 | |
ua1arn | 21:85a0f94a84cd | 22 | #define WITHPLAINDESCROPTOR 0 /* один configuration descriptor с составным устройством */ |
ua1arn | 21:85a0f94a84cd | 23 | |
ua1arn | 21:85a0f94a84cd | 24 | #if WITHPLAINDESCROPTOR |
ua1arn | 21:85a0f94a84cd | 25 | |
ua1arn | 21:85a0f94a84cd | 26 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 27 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 28 | //#define INTERFACE_UAC_count 2 /* количество интерфейсов в одном UAC */ |
ua1arn | 21:85a0f94a84cd | 29 | #else /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 30 | #define INTERFACE_UAC_count 3 /* количество интерфейсов в одном UAC */ |
ua1arn | 21:85a0f94a84cd | 31 | #endif /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 32 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 33 | |
ua1arn | 21:85a0f94a84cd | 34 | /* Последовательность в данном enum должна соответствовать порядку использования в fill_Configuration_main_group */ |
ua1arn | 21:85a0f94a84cd | 35 | enum |
ua1arn | 21:85a0f94a84cd | 36 | { |
ua1arn | 21:85a0f94a84cd | 37 | |
ua1arn | 21:85a0f94a84cd | 38 | #if WITHUSBRNDIS |
ua1arn | 21:85a0f94a84cd | 39 | INTERFACE_RNDIS_CONTROL_5, /* RNDIS control Interface */ |
ua1arn | 21:85a0f94a84cd | 40 | INTERFACE_RNDIS_DATA_6, /* RNDIS data Interface */ |
ua1arn | 21:85a0f94a84cd | 41 | #endif /* WITHUSBRNDIS */ |
ua1arn | 21:85a0f94a84cd | 42 | |
ua1arn | 21:85a0f94a84cd | 43 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 44 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 45 | INTERFACE_AUDIO_CONTROL_0, /* AUDIO transmitter input control interface */ |
ua1arn | 21:85a0f94a84cd | 46 | INTERFACE_AUDIO_SPK_1, /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ |
ua1arn | 21:85a0f94a84cd | 47 | INTERFACE_AUDIO_MIKE_2, /* USB receiver output Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 48 | /* */INTERFACE_AUDIO_CONTROL_1, /* AUDIO spectrum control interface */ |
ua1arn | 21:85a0f94a84cd | 49 | INTERFACE_AUDIO_RTS_3, /* USB spectrum Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 50 | //INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 3, |
ua1arn | 21:85a0f94a84cd | 51 | #else |
ua1arn | 21:85a0f94a84cd | 52 | INTERFACE_AUDIO_CONTROL_0, /* AUDIO control interface */ |
ua1arn | 21:85a0f94a84cd | 53 | INTERFACE_AUDIO_SPK_1, /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ |
ua1arn | 21:85a0f94a84cd | 54 | INTERFACE_AUDIO_MIKE_2, /* USB Microphone Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 55 | //INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 2, |
ua1arn | 21:85a0f94a84cd | 56 | #endif |
ua1arn | 21:85a0f94a84cd | 57 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 58 | |
ua1arn | 21:85a0f94a84cd | 59 | #if WITHUSBCDC |
ua1arn | 21:85a0f94a84cd | 60 | INTERFACE_CDC_base, |
ua1arn | 21:85a0f94a84cd | 61 | INTERFACE_CDC_CONTROL_3a = INTERFACE_CDC_base, /* CDC ACM control Interface */ |
ua1arn | 21:85a0f94a84cd | 62 | INTERFACE_CDC_DATA_4a, /* CDC ACM data Interface */ |
ua1arn | 21:85a0f94a84cd | 63 | INTERFACE_CDC_CONTROL_3b, /* CDC ACM control Interface */ |
ua1arn | 21:85a0f94a84cd | 64 | INTERFACE_CDC_DATA_4b, /* CDC ACM data Interface */ |
ua1arn | 21:85a0f94a84cd | 65 | INTERFACE_CDC_last = INTERFACE_CDC_base + WITHUSBHWCDC_N * 2 - 1, |
ua1arn | 21:85a0f94a84cd | 66 | #endif /* WITHUSBCDC */ |
ua1arn | 21:85a0f94a84cd | 67 | |
ua1arn | 21:85a0f94a84cd | 68 | #if WITHUSBCDCEEM |
ua1arn | 21:85a0f94a84cd | 69 | INTERFACE_CDCEEM_DATA_6, /* CDC ECM/CDC EEM data Interface */ |
ua1arn | 21:85a0f94a84cd | 70 | #endif /* WITHUSBCDCEEM */ |
ua1arn | 21:85a0f94a84cd | 71 | |
ua1arn | 21:85a0f94a84cd | 72 | #if WITHUSBCDCECM |
ua1arn | 21:85a0f94a84cd | 73 | INTERFACE_CDCECM_CONTROL_5, /* CDC ECM control Interface */ |
ua1arn | 21:85a0f94a84cd | 74 | INTERFACE_CDCECM_DATA_6, /* CDC ECM/CDC EEM data Interface */ |
ua1arn | 21:85a0f94a84cd | 75 | #endif /* WITHUSBCDCECM */ |
ua1arn | 21:85a0f94a84cd | 76 | |
ua1arn | 21:85a0f94a84cd | 77 | #if WITHUSBHID |
ua1arn | 21:85a0f94a84cd | 78 | INTERFACE_HID_CONTROL_7, /* HID control Interface */ |
ua1arn | 21:85a0f94a84cd | 79 | #endif /* WITHUSBHID */ |
ua1arn | 21:85a0f94a84cd | 80 | // |
ua1arn | 21:85a0f94a84cd | 81 | INTERFACE_COMPOSITE_count /* Значение для configuration descriptor */ |
ua1arn | 21:85a0f94a84cd | 82 | }; |
ua1arn | 21:85a0f94a84cd | 83 | |
ua1arn | 21:85a0f94a84cd | 84 | #define INTERFACE_CDCACM_count 2 /* количество интерфейсов в одном CDC */ |
ua1arn | 21:85a0f94a84cd | 85 | #define INTERFACE_CDCEEM_count 1 /* количество интерфейсов в одном CDC EEM */ |
ua1arn | 21:85a0f94a84cd | 86 | #define INTERFACE_CDCECM_count 2 /* количество интерфейсов в одном CDC EEM */ |
ua1arn | 21:85a0f94a84cd | 87 | #define INTERFACE_HID_count 1 /* количество интерфейсов в одном HID */ |
ua1arn | 21:85a0f94a84cd | 88 | #define INTERFACE_RNDIS_count 2 /* количество интерфейсов в одном RNDIS */ |
ua1arn | 21:85a0f94a84cd | 89 | |
ua1arn | 21:85a0f94a84cd | 90 | enum |
ua1arn | 21:85a0f94a84cd | 91 | { |
ua1arn | 21:85a0f94a84cd | 92 | RNDIS_cfgidx = 1, |
ua1arn | 21:85a0f94a84cd | 93 | CDCECM_cfgidx = 1 |
ua1arn | 21:85a0f94a84cd | 94 | }; |
ua1arn | 21:85a0f94a84cd | 95 | |
ua1arn | 21:85a0f94a84cd | 96 | #else /* WITHPLAINDESCROPTOR */ |
ua1arn | 21:85a0f94a84cd | 97 | |
ua1arn | 21:85a0f94a84cd | 98 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 99 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 100 | //#define INTERFACE_UAC_count 2 /* количество интерфейсов в одном UAC */ |
ua1arn | 21:85a0f94a84cd | 101 | #else /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 102 | #define INTERFACE_UAC_count 3 /* количество интерфейсов в одном UAC */ |
ua1arn | 21:85a0f94a84cd | 103 | #endif /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 104 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 105 | |
ua1arn | 21:85a0f94a84cd | 106 | #if WITHUSBRNDIS |
ua1arn | 21:85a0f94a84cd | 107 | enum |
ua1arn | 21:85a0f94a84cd | 108 | { |
ua1arn | 21:85a0f94a84cd | 109 | INTERFACE_RNDIS_CONTROL_5, /* RNDIS control Interface */ |
ua1arn | 21:85a0f94a84cd | 110 | INTERFACE_RNDIS_DATA_6, /* RNDIS data Interface */ |
ua1arn | 21:85a0f94a84cd | 111 | }; |
ua1arn | 21:85a0f94a84cd | 112 | #endif /* WITHUSBRNDIS */ |
ua1arn | 21:85a0f94a84cd | 113 | |
ua1arn | 21:85a0f94a84cd | 114 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 115 | enum |
ua1arn | 21:85a0f94a84cd | 116 | { |
ua1arn | 21:85a0f94a84cd | 117 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 118 | INTERFACE_AUDIO_CONTROL_0, /* AUDIO transmitter input control interface */ |
ua1arn | 21:85a0f94a84cd | 119 | INTERFACE_AUDIO_SPK_1, /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ |
ua1arn | 21:85a0f94a84cd | 120 | INTERFACE_AUDIO_MIKE_2, /* USB receiver output Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 121 | /* */INTERFACE_AUDIO_CONTROL_1, /* AUDIO spectrum control interface */ |
ua1arn | 21:85a0f94a84cd | 122 | INTERFACE_AUDIO_RTS_3, /* USB spectrum Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 123 | //INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 3, |
ua1arn | 21:85a0f94a84cd | 124 | #else |
ua1arn | 21:85a0f94a84cd | 125 | INTERFACE_AUDIO_CONTROL_0, /* AUDIO control interface */ |
ua1arn | 21:85a0f94a84cd | 126 | INTERFACE_AUDIO_SPK_1, /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */ |
ua1arn | 21:85a0f94a84cd | 127 | INTERFACE_AUDIO_MIKE_2, /* USB Microphone Standard AS Interface Descriptor (Alt. Set. 0) (CODE == 3)*/ //zero-bandwidth interface |
ua1arn | 21:85a0f94a84cd | 128 | //INTERFACE_AUDIO_last = INTERFACE_AUDIO_CONTROL_0 + 2, |
ua1arn | 21:85a0f94a84cd | 129 | #endif |
ua1arn | 21:85a0f94a84cd | 130 | }; |
ua1arn | 21:85a0f94a84cd | 131 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 132 | #if WITHUSBCDC |
ua1arn | 21:85a0f94a84cd | 133 | enum |
ua1arn | 21:85a0f94a84cd | 134 | { |
ua1arn | 21:85a0f94a84cd | 135 | INTERFACE_CDC_base, |
ua1arn | 21:85a0f94a84cd | 136 | INTERFACE_CDC_CONTROL_3a = INTERFACE_CDC_base, /* CDC ACM control Interface */ |
ua1arn | 21:85a0f94a84cd | 137 | INTERFACE_CDC_DATA_4a, /* CDC ACM data Interface */ |
ua1arn | 21:85a0f94a84cd | 138 | INTERFACE_CDC_CONTROL_3b, /* CDC ACM control Interface */ |
ua1arn | 21:85a0f94a84cd | 139 | INTERFACE_CDC_DATA_4b, /* CDC ACM data Interface */ |
ua1arn | 21:85a0f94a84cd | 140 | INTERFACE_CDC_last = INTERFACE_CDC_base + WITHUSBHWCDC_N * 2 - 1, |
ua1arn | 21:85a0f94a84cd | 141 | }; |
ua1arn | 21:85a0f94a84cd | 142 | #endif /* WITHUSBCDC */ |
ua1arn | 21:85a0f94a84cd | 143 | #if WITHUSBCDCEEM |
ua1arn | 21:85a0f94a84cd | 144 | enum |
ua1arn | 21:85a0f94a84cd | 145 | { |
ua1arn | 21:85a0f94a84cd | 146 | |
ua1arn | 21:85a0f94a84cd | 147 | INTERFACE_CDCEEM_DATA_6, /* CDC ECM/CDC EEM data Interface */ |
ua1arn | 21:85a0f94a84cd | 148 | }; |
ua1arn | 21:85a0f94a84cd | 149 | #endif /* WITHUSBCDCEEM */ |
ua1arn | 21:85a0f94a84cd | 150 | #if WITHUSBCDCECM |
ua1arn | 21:85a0f94a84cd | 151 | enum |
ua1arn | 21:85a0f94a84cd | 152 | { |
ua1arn | 21:85a0f94a84cd | 153 | INTERFACE_CDCECM_CONTROL_5, /* CDC ECM control Interface */ |
ua1arn | 21:85a0f94a84cd | 154 | INTERFACE_CDCECM_DATA_6, /* CDC ECM/CDC EEM data Interface */ |
ua1arn | 21:85a0f94a84cd | 155 | }; |
ua1arn | 21:85a0f94a84cd | 156 | #endif /* WITHUSBCDCECM */ |
ua1arn | 21:85a0f94a84cd | 157 | #if WITHUSBHID |
ua1arn | 21:85a0f94a84cd | 158 | enum |
ua1arn | 21:85a0f94a84cd | 159 | { |
ua1arn | 21:85a0f94a84cd | 160 | INTERFACE_HID_CONTROL_7, /* HID control Interface */ |
ua1arn | 21:85a0f94a84cd | 161 | // |
ua1arn | 21:85a0f94a84cd | 162 | }; |
ua1arn | 21:85a0f94a84cd | 163 | #endif /* WITHUSBHID */ |
ua1arn | 21:85a0f94a84cd | 164 | |
ua1arn | 21:85a0f94a84cd | 165 | |
ua1arn | 21:85a0f94a84cd | 166 | #define INTERFACE_CDCACM_count 2 /* количество интерфейсов в одном CDC */ |
ua1arn | 21:85a0f94a84cd | 167 | #define INTERFACE_CDCEEM_count 1 /* количество интерфейсов в одном CDC EEM */ |
ua1arn | 21:85a0f94a84cd | 168 | #define INTERFACE_CDCECM_count 2 /* количество интерфейсов в одном CDC ECM */ |
ua1arn | 21:85a0f94a84cd | 169 | #define INTERFACE_HID_count 1 /* количество интерфейсов в одном HID */ |
ua1arn | 21:85a0f94a84cd | 170 | #define INTERFACE_RNDIS_count 2 /* количество интерфейсов в одном RNDIS */ |
ua1arn | 21:85a0f94a84cd | 171 | |
ua1arn | 21:85a0f94a84cd | 172 | enum |
ua1arn | 21:85a0f94a84cd | 173 | { |
ua1arn | 21:85a0f94a84cd | 174 | UNUSED_cfgidx = 0, |
ua1arn | 21:85a0f94a84cd | 175 | // |
ua1arn | 21:85a0f94a84cd | 176 | RNDIS_cfgidx, |
ua1arn | 21:85a0f94a84cd | 177 | CDCECM_cfgidx, |
ua1arn | 21:85a0f94a84cd | 178 | // |
ua1arn | 21:85a0f94a84cd | 179 | UNUSED2_cfgidx |
ua1arn | 21:85a0f94a84cd | 180 | }; |
ua1arn | 21:85a0f94a84cd | 181 | |
ua1arn | 21:85a0f94a84cd | 182 | #endif /* WITHPLAINDESCROPTOR */ |
ua1arn | 21:85a0f94a84cd | 183 | |
ua1arn | 21:85a0f94a84cd | 184 | //#define INTERFACE_UAC_count (INTERFACE_AUDIO_last - INTERFACE_AUDIO_CONTROL_0) |
ua1arn | 21:85a0f94a84cd | 185 | |
ua1arn | 21:85a0f94a84cd | 186 | // STM32F429: |
ua1arn | 21:85a0f94a84cd | 187 | // valid EPs: dcp, 0x01/0x81, 0x02/0x82, 0x03/0x83 |
ua1arn | 21:85a0f94a84cd | 188 | // STM32F446, STM32F746: |
ua1arn | 21:85a0f94a84cd | 189 | // valid EPs: dcp, 0x01/0x81, 0x02/0x82, 0x03/0x83, 0x04/0x84, 0x05/0x85 |
ua1arn | 21:85a0f94a84cd | 190 | |
ua1arn | 21:85a0f94a84cd | 191 | |
ua1arn | 21:85a0f94a84cd | 192 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 193 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 194 | |
ua1arn | 21:85a0f94a84cd | 195 | #define WITHUSBHWCDC_N 2 // количество виртуальных последовательных портов |
ua1arn | 21:85a0f94a84cd | 196 | |
ua1arn | 21:85a0f94a84cd | 197 | #else /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 198 | |
ua1arn | 21:85a0f94a84cd | 199 | #define WITHUSBHWCDC_N 2 // количество виртуальных последовательных портов |
ua1arn | 21:85a0f94a84cd | 200 | |
ua1arn | 21:85a0f94a84cd | 201 | #endif /* WITHUSBUAC3 */ |
ua1arn | 21:85a0f94a84cd | 202 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 203 | |
ua1arn | 21:85a0f94a84cd | 204 | #if ! defined (WITHUSBHWCDC_N) |
ua1arn | 21:85a0f94a84cd | 205 | #define WITHUSBHWCDC_N 2 // количество виртуальных последовательных портов |
ua1arn | 21:85a0f94a84cd | 206 | #endif /* ! defined (WITHUSBHWCDC_N) */ |
ua1arn | 21:85a0f94a84cd | 207 | |
ua1arn | 21:85a0f94a84cd | 208 | |
ua1arn | 21:85a0f94a84cd | 209 | // IN and INT Endpoints allocation |
ua1arn | 21:85a0f94a84cd | 210 | enum |
ua1arn | 21:85a0f94a84cd | 211 | { |
ua1arn | 21:85a0f94a84cd | 212 | ep0inxxx = 0x80, |
ua1arn | 21:85a0f94a84cd | 213 | |
ua1arn | 21:85a0f94a84cd | 214 | #if WITHUSBRNDIS |
ua1arn | 21:85a0f94a84cd | 215 | RNDIS_NOTIFICATION_IN_EP, |
ua1arn | 21:85a0f94a84cd | 216 | RNDIS_DATA_IN_EP, |
ua1arn | 21:85a0f94a84cd | 217 | #endif /* WITHUSBRNDIS */ |
ua1arn | 21:85a0f94a84cd | 218 | |
ua1arn | 21:85a0f94a84cd | 219 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 220 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 221 | USBD_EP_AUDIO_IN, // ISOC IN Аудиоданные в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 222 | USBD_EP_RTS_IN, // ISOC IN Аудиоданные в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 223 | #else |
ua1arn | 21:85a0f94a84cd | 224 | USBD_EP_AUDIO_IN, // ISOC IN Аудиоданные в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 225 | #endif |
ua1arn | 21:85a0f94a84cd | 226 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 227 | |
ua1arn | 21:85a0f94a84cd | 228 | #if WITHUSBCDC |
ua1arn | 21:85a0f94a84cd | 229 | USBD_EP_CDC_IN, // CDC IN Данные ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 230 | USBD_EP_CDC_INb, // CDC IN Данные ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 231 | USBD_EP_CDC_INlast = USBD_EP_CDC_IN + WITHUSBHWCDC_N - 1, |
ua1arn | 21:85a0f94a84cd | 232 | |
ua1arn | 21:85a0f94a84cd | 233 | USBD_EP_CDC_INT, // CDC INT События ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 234 | USBD_EP_CDC_INTb, // CDC INT События ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 235 | USBD_EP_CDC_INTlast = USBD_EP_CDC_INT + WITHUSBHWCDC_N - 1, |
ua1arn | 21:85a0f94a84cd | 236 | #endif /* WITHUSBCDC */ |
ua1arn | 21:85a0f94a84cd | 237 | |
ua1arn | 21:85a0f94a84cd | 238 | #if WITHUSBCDCEEM |
ua1arn | 21:85a0f94a84cd | 239 | USBD_EP_CDCEEM_IN, // CDC IN Данные ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 240 | #endif /* WITHUSBCDCEEM */ |
ua1arn | 21:85a0f94a84cd | 241 | |
ua1arn | 21:85a0f94a84cd | 242 | #if WITHUSBCDCECM |
ua1arn | 21:85a0f94a84cd | 243 | USBD_EP_CDCECM_IN, // CDC IN Данные ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 244 | USBD_EP_CDCECM_INT, // CDC INT События ком-порта в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 245 | #endif /* WITHUSBCDCECM */ |
ua1arn | 21:85a0f94a84cd | 246 | |
ua1arn | 21:85a0f94a84cd | 247 | #if WITHUSBHID |
ua1arn | 21:85a0f94a84cd | 248 | //USBD_EP_HIDMOUSE_INT, // HID INT События манипулятора в компьютер из TRX |
ua1arn | 21:85a0f94a84cd | 249 | #endif /* WITHUSBHID */ |
ua1arn | 21:85a0f94a84cd | 250 | |
ua1arn | 21:85a0f94a84cd | 251 | // |
ua1arn | 21:85a0f94a84cd | 252 | epincount |
ua1arn | 21:85a0f94a84cd | 253 | }; |
ua1arn | 21:85a0f94a84cd | 254 | |
ua1arn | 21:85a0f94a84cd | 255 | // OUT Endpoints allocation |
ua1arn | 21:85a0f94a84cd | 256 | enum |
ua1arn | 21:85a0f94a84cd | 257 | { |
ua1arn | 21:85a0f94a84cd | 258 | ep0outxxx = 0x00, |
ua1arn | 21:85a0f94a84cd | 259 | |
ua1arn | 21:85a0f94a84cd | 260 | #if WITHUSBRNDIS |
ua1arn | 21:85a0f94a84cd | 261 | RNDIS_DATA_OUT_EP, |
ua1arn | 21:85a0f94a84cd | 262 | #endif /* WITHUSBRNDIS */ |
ua1arn | 21:85a0f94a84cd | 263 | |
ua1arn | 21:85a0f94a84cd | 264 | #if WITHUSBUAC |
ua1arn | 21:85a0f94a84cd | 265 | #if WITHUSBUAC3 |
ua1arn | 21:85a0f94a84cd | 266 | USBD_EP_AUDIO_OUT, |
ua1arn | 21:85a0f94a84cd | 267 | #else |
ua1arn | 21:85a0f94a84cd | 268 | USBD_EP_AUDIO_OUT, // ISOC OUT Аудиоданные от компьютера в TRX |
ua1arn | 21:85a0f94a84cd | 269 | #endif |
ua1arn | 21:85a0f94a84cd | 270 | #endif /* WITHUSBUAC */ |
ua1arn | 21:85a0f94a84cd | 271 | |
ua1arn | 21:85a0f94a84cd | 272 | #if WITHUSBCDC |
ua1arn | 21:85a0f94a84cd | 273 | USBD_EP_CDC_OUT, // CDC OUT Данные ком-порта от компьютера в TRX |
ua1arn | 21:85a0f94a84cd | 274 | USBD_EP_CDC_OUTb, // CDC OUT Данные ком-порта от компьютера в TRX |
ua1arn | 21:85a0f94a84cd | 275 | USBD_EP_CDC_OUTlast = USBD_EP_CDC_OUT + WITHUSBHWCDC_N - 1, |
ua1arn | 21:85a0f94a84cd | 276 | #endif /* WITHUSBCDC */ |
ua1arn | 21:85a0f94a84cd | 277 | |
ua1arn | 21:85a0f94a84cd | 278 | #if WITHUSBCDCEEM |
ua1arn | 21:85a0f94a84cd | 279 | USBD_EP_CDCEEM_OUT, // CDC OUT Данные ком-порта от компьютера в TRX |
ua1arn | 21:85a0f94a84cd | 280 | #endif /* WITHUSBCDCEEM */ |
ua1arn | 21:85a0f94a84cd | 281 | |
ua1arn | 21:85a0f94a84cd | 282 | #if WITHUSBCDCECM |
ua1arn | 21:85a0f94a84cd | 283 | USBD_EP_CDCECM_OUT, // CDC OUT Данные ком-порта от компьютера в TRX |
ua1arn | 21:85a0f94a84cd | 284 | #endif /* WITHUSBCDCECM */ |
ua1arn | 21:85a0f94a84cd | 285 | |
ua1arn | 21:85a0f94a84cd | 286 | #if WITHUSBHID |
ua1arn | 21:85a0f94a84cd | 287 | #endif /* WITHUSBHID */ |
ua1arn | 21:85a0f94a84cd | 288 | // |
ua1arn | 21:85a0f94a84cd | 289 | epoutcount |
ua1arn | 21:85a0f94a84cd | 290 | }; |
ua1arn | 21:85a0f94a84cd | 291 | |
ua1arn | 21:85a0f94a84cd | 292 | //#if WITHUSBCDC |
ua1arn | 21:85a0f94a84cd | 293 | #define VIRTUAL_COM_PORT_INT_SIZE 10 |
ua1arn | 21:85a0f94a84cd | 294 | #define VIRTUAL_COM_PORT_DATA_SIZE 64 |
ua1arn | 21:85a0f94a84cd | 295 | //#endif /* WITHUSBCDC */ |
ua1arn | 21:85a0f94a84cd | 296 | |
ua1arn | 21:85a0f94a84cd | 297 | //#if WITHUSBHID |
ua1arn | 21:85a0f94a84cd | 298 | #define HIDMOUSE_INT_DATA_SIZE 4 |
ua1arn | 21:85a0f94a84cd | 299 | //#endif /* WITHUSBHID */ |
ua1arn | 21:85a0f94a84cd | 300 | |
ua1arn | 21:85a0f94a84cd | 301 | //#if WITHUSBCDCEEM |
ua1arn | 21:85a0f94a84cd | 302 | #define USBD_CDCEEM_BUFSIZE 64 |
ua1arn | 21:85a0f94a84cd | 303 | //#endif /* WITHUSBCDCEEM */ |
ua1arn | 21:85a0f94a84cd | 304 | |
ua1arn | 21:85a0f94a84cd | 305 | //#if WITHUSBCDCECM |
ua1arn | 21:85a0f94a84cd | 306 | #define CDCECM_NOTIFICATION_IN_SZ 16 |
ua1arn | 21:85a0f94a84cd | 307 | #define CDCECM_DATA_IN_SZ 64 |
ua1arn | 21:85a0f94a84cd | 308 | #define CDCECM_DATA_OUT_SZ 64 |
ua1arn | 21:85a0f94a84cd | 309 | //#endif /* WITHUSBCDCECM */ |
ua1arn | 21:85a0f94a84cd | 310 | |
ua1arn | 21:85a0f94a84cd | 311 | //#if WITHUSBRNDIS |
ua1arn | 21:85a0f94a84cd | 312 | #define RNDIS_NOTIFICATION_IN_SZ 8 |
ua1arn | 21:85a0f94a84cd | 313 | #define RNDIS_DATA_IN_SZ 64 |
ua1arn | 21:85a0f94a84cd | 314 | #define RNDIS_DATA_OUT_SZ 64 |
ua1arn | 21:85a0f94a84cd | 315 | //#endif /* WITHUSBRNDIS */ |
ua1arn | 21:85a0f94a84cd | 316 | |
ua1arn | 21:85a0f94a84cd | 317 | #define HSINTERVAL_AUDIO48 4 // endpoint descriptor parameters - для обеспечсения 1 кГц периода |
ua1arn | 21:85a0f94a84cd | 318 | #define FSINTERVAL_AUDIO48 1 |
ua1arn | 21:85a0f94a84cd | 319 | |
ua1arn | 21:85a0f94a84cd | 320 | #define HSINTERVAL_32MS 9 // endpoint descriptor parameters - для обеспечсения 1 кГц периода |
ua1arn | 21:85a0f94a84cd | 321 | #define FSINTERVAL_32MS 32 |
ua1arn | 21:85a0f94a84cd | 322 | |
ua1arn | 21:85a0f94a84cd | 323 | struct descholder |
ua1arn | 21:85a0f94a84cd | 324 | { |
ua1arn | 21:85a0f94a84cd | 325 | const uint8_t * data; |
ua1arn | 21:85a0f94a84cd | 326 | unsigned size; |
ua1arn | 21:85a0f94a84cd | 327 | }; |
ua1arn | 21:85a0f94a84cd | 328 | |
ua1arn | 21:85a0f94a84cd | 329 | #define USBD_NCONFIGS 4 |
ua1arn | 21:85a0f94a84cd | 330 | |
ua1arn | 21:85a0f94a84cd | 331 | extern struct descholder StringDescrTbl []; |
ua1arn | 21:85a0f94a84cd | 332 | extern struct descholder ConfigDescrTbl [USBD_NCONFIGS]; |
ua1arn | 21:85a0f94a84cd | 333 | extern struct descholder DeviceDescrTbl [USBD_NCONFIGS]; |
ua1arn | 21:85a0f94a84cd | 334 | extern struct descholder DeviceQualifierTbl [USBD_NCONFIGS]; |
ua1arn | 21:85a0f94a84cd | 335 | extern struct descholder OtherSpeedConfigurationTbl [USBD_NCONFIGS]; |
ua1arn | 21:85a0f94a84cd | 336 | extern struct descholder BinaryDeviceObjectStoreTbl [1]; |
ua1arn | 21:85a0f94a84cd | 337 | extern struct descholder HIDReportDescrTbl [1]; |
ua1arn | 21:85a0f94a84cd | 338 | |
ua1arn | 21:85a0f94a84cd | 339 | uint_fast8_t usbd_get_stringsdesc_count(void); |
ua1arn | 21:85a0f94a84cd | 340 | |
ua1arn | 21:85a0f94a84cd | 341 | void usbd_descriptors_initialize(uint_fast8_t HSdesc); |
ua1arn | 21:85a0f94a84cd | 342 | |
ua1arn | 21:85a0f94a84cd | 343 | #define HI_32BY(w) (((w) >> 24) & 0xFF) /* Extract 31..24 bits from unsigned word */ |
ua1arn | 21:85a0f94a84cd | 344 | #define HI_24BY(w) (((w) >> 16) & 0xFF) /* Extract 23..16 bits from unsigned word */ |
ua1arn | 21:85a0f94a84cd | 345 | #define HI_BYTE(w) (((w) >> 8) & 0xFF) /* Extract high-order byte from unsigned word */ |
ua1arn | 21:85a0f94a84cd | 346 | #define LO_BYTE(w) ((w) & 0xFF) /* Extract low-order byte from unsigned word */ |
ua1arn | 21:85a0f94a84cd | 347 | |
ua1arn | 21:85a0f94a84cd | 348 | #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) |
ua1arn | 21:85a0f94a84cd | 349 | /* bMaxPower in Configuration Descriptor */ |
ua1arn | 21:85a0f94a84cd | 350 | #define USB_CONFIG_POWER_MA(mA) ((mA)/2) |
ua1arn | 21:85a0f94a84cd | 351 | |
ua1arn | 21:85a0f94a84cd | 352 | |
ua1arn | 21:85a0f94a84cd | 353 | #include <inttypes.h> // format specifiers for printing |
ua1arn | 21:85a0f94a84cd | 354 | |
ua1arn | 21:85a0f94a84cd | 355 | |
ua1arn | 21:85a0f94a84cd | 356 | #define FLASHMEM /* */ |
ua1arn | 21:85a0f94a84cd | 357 | |
ua1arn | 21:85a0f94a84cd | 358 | uint_fast8_t local_snprintf_P( char *buffer, uint_fast8_t count, const FLASHMEM char *format, ... ); |
ua1arn | 21:85a0f94a84cd | 359 | |
ua1arn | 21:85a0f94a84cd | 360 | |
ua1arn | 21:85a0f94a84cd | 361 | void arm_hardware_invalidate(uintptr_t base, size_t size); // Сейчас в эту память будем читать по DMA |
ua1arn | 21:85a0f94a84cd | 362 | void arm_hardware_flush(uintptr_t base, size_t size); // Сейчас эта память будет записываться по DMA куда-то |
ua1arn | 21:85a0f94a84cd | 363 | void arm_hardware_flush_invalidate(uintptr_t base, size_t size); // Сейчас эта память будет записываться по DMA куда-то. Потом содержимое не требуется |
ua1arn | 21:85a0f94a84cd | 364 | void arm_hardware_flush_all(void); |
ua1arn | 21:85a0f94a84cd | 365 | |
ua1arn | 21:85a0f94a84cd | 366 | |
ua1arn | 21:85a0f94a84cd | 367 | |
ua1arn | 21:85a0f94a84cd | 368 | #define PSTR(s) (__extension__({static const char __c[] FLASHMEM = (s); &__c[0];})) |
ua1arn | 21:85a0f94a84cd | 369 | |
ua1arn | 21:85a0f94a84cd | 370 | #if WITHDEBUG |
ua1arn | 21:85a0f94a84cd | 371 | #define TP() \ |
ua1arn | 21:85a0f94a84cd | 372 | do { \ |
ua1arn | 21:85a0f94a84cd | 373 | static const char this_file [] = __FILE__; \ |
ua1arn | 21:85a0f94a84cd | 374 | printf(PSTR("At %d in %s.\n"), __LINE__, this_file); \ |
ua1arn | 21:85a0f94a84cd | 375 | } while(0) |
ua1arn | 21:85a0f94a84cd | 376 | #else /* WITHDEBUG */ |
ua1arn | 21:85a0f94a84cd | 377 | #define TP() do { } while(0) |
ua1arn | 21:85a0f94a84cd | 378 | #endif /* WITHDEBUG */ |
ua1arn | 21:85a0f94a84cd | 379 | |
ua1arn | 21:85a0f94a84cd | 380 | #if WITHDEBUG |
ua1arn | 21:85a0f94a84cd | 381 | |
ua1arn | 21:85a0f94a84cd | 382 | #define ASSERT(v) do { if ((v) == 0) { \ |
ua1arn | 21:85a0f94a84cd | 383 | printf(PSTR("%s(%d): Assert '%s'\n"), __FILE__, __LINE__, (# v)); \ |
ua1arn | 21:85a0f94a84cd | 384 | for (;;) ; \ |
ua1arn | 21:85a0f94a84cd | 385 | } } while (0) |
ua1arn | 21:85a0f94a84cd | 386 | |
ua1arn | 21:85a0f94a84cd | 387 | #define VERIFY(v) do { if ((v) == 0) { \ |
ua1arn | 21:85a0f94a84cd | 388 | printf(PSTR("%s(%d): Verify '%s'\n"), __FILE__, __LINE__, (# v)); \ |
ua1arn | 21:85a0f94a84cd | 389 | for (;;) ; \ |
ua1arn | 21:85a0f94a84cd | 390 | } } while (0) |
ua1arn | 21:85a0f94a84cd | 391 | |
ua1arn | 21:85a0f94a84cd | 392 | #define TRACE0(f) printf( PSTR(f)) |
ua1arn | 21:85a0f94a84cd | 393 | #define TRACE1(f,a1) printf( PSTR(f),(a1)) |
ua1arn | 21:85a0f94a84cd | 394 | #define TRACE2(f,a1,a2) printf( PSTR(f),(a1),(a2)) |
ua1arn | 21:85a0f94a84cd | 395 | #define TRACE3(f,a1,a2,a3) printf( PSTR(f),(a1),(a2),(a3)) |
ua1arn | 21:85a0f94a84cd | 396 | #define TRACE4(f,a1,a2,a3,a4) printf( PSTR(f),(a1),(a2),(a3),(a4)) |
ua1arn | 21:85a0f94a84cd | 397 | #define TRACE5(f,a1,a2,a3,a4,a5) printf( PSTR(f),(a1),(a2),(a3),(a4),(a5)) |
ua1arn | 21:85a0f94a84cd | 398 | |
ua1arn | 21:85a0f94a84cd | 399 | #else /* WITHDEBUG */ |
ua1arn | 21:85a0f94a84cd | 400 | |
ua1arn | 21:85a0f94a84cd | 401 | #define ASSERT(v) ((void) (0)) |
ua1arn | 21:85a0f94a84cd | 402 | #define VERIFY(v) ((void) (v)) |
ua1arn | 21:85a0f94a84cd | 403 | |
ua1arn | 21:85a0f94a84cd | 404 | #define TRACE0(f) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 405 | #define TRACE1(f,a1) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 406 | #define TRACE2(f,a1,a2) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 407 | #define TRACE3(f,a1,a2,a3) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 408 | #define TRACE4(f,a1,a2,a3,a4) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 409 | #define TRACE5(f,a1,a2,a3,a4,a5) do {} while (0) |
ua1arn | 21:85a0f94a84cd | 410 | |
ua1arn | 21:85a0f94a84cd | 411 | #endif /* WITHDEBUG */ |
ua1arn | 21:85a0f94a84cd | 412 | |
ua1arn | 21:85a0f94a84cd | 413 | /* NIC-to-LwIP buffers interface functions. |
ua1arn | 21:85a0f94a84cd | 414 | * Should be called in IRQ handler request or in disabled IRQ state. |
ua1arn | 21:85a0f94a84cd | 415 | * */ |
ua1arn | 21:85a0f94a84cd | 416 | unsigned comm_allocbuffer(uint8_t * * bp); |
ua1arn | 21:85a0f94a84cd | 417 | void comm_freebuffer(uint8_t * p); |
ua1arn | 21:85a0f94a84cd | 418 | void comm_saverxbuffer(uint8_t * p, unsigned len); |
ua1arn | 21:85a0f94a84cd | 419 | |
ua1arn | 21:85a0f94a84cd | 420 | #define PRINTF printf |
ua1arn | 21:85a0f94a84cd | 421 | |
ua1arn | 21:85a0f94a84cd | 422 | #endif /* APPLICATION_USER_RLNDIS_USBD_DESC2_H */ |