Subversion Repositories chibiosIgnition

Rev

Rev 7 | Rev 19 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7 Rev 18
Line 14... Line 14...
14
    limitations under the License.
14
    limitations under the License.
15
*/
15
*/
16
 
16
 
17
#include "hal.h"
17
#include "hal.h"
18
 
18
 
-
 
19
 
-
 
20
 
19
/* Virtual serial port over USB.*/
21
/* Virtual serial port over USB.*/
20
SerialUSBDriver SDU1;
22
SerialUSBDriver SDU1;
21
 
23
 
-
 
24
#if HAL_USE_SERIAL_USB  == TRUE
-
 
25
SerialUSBDriver SDU2;
-
 
26
#endif
-
 
27
 
-
 
28
 
22
/*
29
/*
23
 * Endpoints to be used for USBD1.
30
 * Endpoints to be used for USBD1/SDU1.
24
 */
31
 */
25
#define USBD1_DATA_REQUEST_EP           1
32
#define USBD1_DATA_REQUEST_EP           1
26
#define USBD1_DATA_AVAILABLE_EP         1
33
#define USBD1_DATA_AVAILABLE_EP         1
27
#define USBD1_INTERRUPT_REQUEST_EP      2
34
#define USBD1_INTERRUPT_REQUEST_EP      2
28
 
35
 
29
/*
36
/*
-
 
37
 * Endpoints to be used for USBD1/SDU2
-
 
38
 */
-
 
39
#if HAL_USE_USB_DUAL_CDC == TRUE
-
 
40
#define USBD1_DATA2_REQUEST_EP           3
-
 
41
#define USBD1_DATA2_AVAILABLE_EP         3
-
 
42
#define USBD1_INTERRUPT2_REQUEST_EP      4
-
 
43
#endif
-
 
44
/*
30
 * USB Device Descriptor.
45
 * USB Device Descriptor.
31
 */
46
 */
32
static const uint8_t vcom_device_descriptor_data[18] = {
47
static const uint8_t vcom_device_descriptor_data[18] = {
33
  USB_DESC_DEVICE       (0x0110,        /* bcdUSB (1.1).                    */
48
  USB_DESC_DEVICE       (0x0110,        /* bcdUSB (1.1).                    */
34
                         0x02,          /* bDeviceClass (CDC).              */
49
                         0x02,          /* bDeviceClass (CDC).              */
Line 38... Line 53...
38
                         0x0483,        /* idVendor (ST).                   */
53
                         0x0483,        /* idVendor (ST).                   */
39
                         0x5740,        /* idProduct.                       */
54
                         0x5740,        /* idProduct.                       */
40
                         0x0200,        /* bcdDevice.                       */
55
                         0x0200,        /* bcdDevice.                       */
41
                         1,             /* iManufacturer.                   */
56
                         1,             /* iManufacturer.                   */
42
                         2,             /* iProduct.                        */
57
                         2,             /* iProduct.                        */
43
                         3,             /* iSerialNumber.                   */
58
                         3,             /* iSerialNumber. */
44
                         1)             /* bNumConfigurations.              */
59
                         1)             /* bNumConfigurations.              */
45
};
60
};
46
 
61
 
47
/*
62
/*
48
 * Device Descriptor wrapper.
63
 * Device Descriptor wrapper.
Line 50... Line 65...
50
static const USBDescriptor vcom_device_descriptor = {
65
static const USBDescriptor vcom_device_descriptor = {
51
  sizeof vcom_device_descriptor_data,
66
  sizeof vcom_device_descriptor_data,
52
  vcom_device_descriptor_data
67
  vcom_device_descriptor_data
53
};
68
};
54
 
69
 
-
 
70
 
55
/* Configuration Descriptor tree for a CDC.*/
71
/* Configuration Descriptor tree for a CDC.*/
-
 
72
 
56
static const uint8_t vcom_configuration_descriptor_data[67] = {
73
static const uint8_t vcom_configuration_descriptor_data[] = {
57
  /* Configuration Descriptor.*/
74
  /* Configuration Descriptor.*/
-
 
75
#if HAL_USE_USB_DUAL_CDC == FALSE
-
 
76
                                 /* the header is 9 bytes long, total has 2 EPs in use = 67 bytes */
58
  USB_DESC_CONFIGURATION(67,            /* wTotalLength.                    */
77
  USB_DESC_CONFIGURATION(67,            /* wTotalLength.                    */
59
                         0x02,          /* bNumInterfaces.                  */
78
                         0x02,          /* bNumInterfaces.                  */
60
                         0x01,          /* bConfigurationValue.             */
79
                         0x01,          /* bConfigurationValue.             */
61
                         0,             /* iConfiguration.                  */
80
                         0,             /* iConfiguration.                  */
62
                         0xC0,          /* bmAttributes (self powered).     */
81
                         0xC0,          /* bmAttributes (self powered).     */
63
                         50),           /* bMaxPower (100mA).               */
82
                         50),           /* bMaxPower (100mA).               */
-
 
83
#else
-
 
84
                                                 /* the header is 9 bytes long, total has 4 EP in use = 67 * 2 -9 bytes */
-
 
85
  USB_DESC_CONFIGURATION(125,           /* wTotalLength.                    */
-
 
86
                                             0x04,          /* bNumInterfaces.                  */
-
 
87
                                                 0x01,          /* bConfigurationValue.             */
-
 
88
                                                 0,             /* iConfiguration.                  */
-
 
89
                                                 0xC0,          /* bmAttributes (self powered).     */
-
 
90
                                                 50),           /* bMaxPower (100mA).               */
-
 
91
#endif
64
  /* Interface Descriptor.*/
92
                                                                                                 /* Interface Descriptor.*/
65
  USB_DESC_INTERFACE    (0x00,          /* bInterfaceNumber.                */
93
  USB_DESC_INTERFACE    (0x00,          /* bInterfaceNumber.                */
66
                         0x00,          /* bAlternateSetting.               */
94
                         0x00,          /* bAlternateSetting.               */
67
                         0x01,          /* bNumEndpoints.                   */
95
                         0x01,          /* bNumEndpoints.                   */
68
                         0x02,          /* bInterfaceClass (Communications
96
                         0x02,          /* bInterfaceClass (Communications
69
                                           Interface Class, CDC section
97
                                           Interface Class, CDC section
Line 71... Line 99...
71
                         0x02,          /* bInterfaceSubClass (Abstract
99
                         0x02,          /* bInterfaceSubClass (Abstract
72
                                         Control Model, CDC section 4.3).   */
100
                                         Control Model, CDC section 4.3).   */
73
                         0x01,          /* bInterfaceProtocol (AT commands,
101
                         0x01,          /* bInterfaceProtocol (AT commands,
74
                                           CDC section 4.4).                */
102
                                           CDC section 4.4).                */
75
                         0),            /* iInterface.                      */
103
                         0),            /* iInterface.                      */
-
 
104
 
76
  /* Header Functional Descriptor (CDC section 5.2.3).*/
105
                                                 /* Header Functional Descriptor (CDC section 5.2.3).*/
77
  USB_DESC_BYTE         (5),            /* bLength.                         */
106
  USB_DESC_BYTE         (5),            /* bLength.                         */
78
  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
107
  USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
79
  USB_DESC_BYTE         (0x00),         /* bDescriptorSubtype (Header
108
  USB_DESC_BYTE         (0x00),         /* bDescriptorSubtype (Header
80
                                           Functional Descriptor.           */
109
                                           Functional Descriptor.           */
81
  USB_DESC_BCD          (0x0110),       /* bcdCDC.                          */
110
  USB_DESC_BCD          (0x0110),       /* bcdCDC.                          */
Line 124... Line 153...
124
                         0x00),         /* bInterval.                       */
153
                         0x00),         /* bInterval.                       */
125
  /* Endpoint 1 Descriptor.*/
154
  /* Endpoint 1 Descriptor.*/
126
  USB_DESC_ENDPOINT     (USBD1_DATA_REQUEST_EP|0x80,    /* bEndpointAddress.*/
155
  USB_DESC_ENDPOINT     (USBD1_DATA_REQUEST_EP|0x80,    /* bEndpointAddress.*/
127
                         0x02,          /* bmAttributes (Bulk).             */
156
                         0x02,          /* bmAttributes (Bulk).             */
128
                         0x0040,        /* wMaxPacketSize.                  */
157
                         0x0040,        /* wMaxPacketSize.                  */
129
                         0x00)          /* bInterval.                       */
158
                         0x00),          /* bInterval.                       */
-
 
159
#if HAL_USE_USB_DUAL_CDC ==TRUE
-
 
160
/* Configuration Descriptor tree for a CDC.*/
-
 
161
USB_DESC_INTERFACE    (0x02,          /* bInterfaceNumber.                */
-
 
162
                       0x00,          /* bAlternateSetting.               */
-
 
163
                       0x01,          /* bNumEndpoints.                   */
-
 
164
                       0x02,          /* bInterfaceClass (Communications
-
 
165
                                         Interface Class, CDC section
-
 
166
                                         4.2).                            */
-
 
167
                       0x02,          /* bInterfaceSubClass (Abstract
-
 
168
                                       Control Model, CDC section 4.3).   */
-
 
169
                       0x01,          /* bInterfaceProtocol (AT commands,
-
 
170
                                         CDC section 4.4).                */
-
 
171
                       0),            /* iInterface.                      */
-
 
172
 
-
 
173
                                                 /* Header Functional Descriptor (CDC section 5.2.3).*/
-
 
174
USB_DESC_BYTE         (5),            /* bLength.                         */
-
 
175
USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
-
 
176
USB_DESC_BYTE         (0x00),         /* bDescriptorSubtype (Header
-
 
177
                                         Functional Descriptor.           */
-
 
178
USB_DESC_BCD          (0x0110),       /* bcdCDC.                          */
-
 
179
/* Call Management Functional Descriptor. */
-
 
180
USB_DESC_BYTE         (5),            /* bFunctionLength.                 */
-
 
181
USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
-
 
182
USB_DESC_BYTE         (0x01),         /* bDescriptorSubtype (Call Management
-
 
183
                                         Functional Descriptor).          */
-
 
184
USB_DESC_BYTE         (0x00),         /* bmCapabilities (D0+D1).          */
-
 
185
USB_DESC_BYTE         (0x01),         /* bDataInterface.                  */
-
 
186
/* ACM Functional Descriptor.*/
-
 
187
USB_DESC_BYTE         (4),            /* bFunctionLength.                 */
-
 
188
USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
-
 
189
USB_DESC_BYTE         (0x02),         /* bDescriptorSubtype (Abstract
-
 
190
                                         Control Management Descriptor).  */
-
 
191
USB_DESC_BYTE         (0x02),         /* bmCapabilities.                  */
-
 
192
/* Union Functional Descriptor.*/
-
 
193
USB_DESC_BYTE         (5),            /* bFunctionLength.                 */
-
 
194
USB_DESC_BYTE         (0x24),         /* bDescriptorType (CS_INTERFACE).  */
-
 
195
USB_DESC_BYTE         (0x06),         /* bDescriptorSubtype (Union
-
 
196
                                         Functional Descriptor).          */
-
 
197
USB_DESC_BYTE         (0x00),         /* bMasterInterface (Communication
-
 
198
                                         Class Interface).                */
-
 
199
USB_DESC_BYTE         (0x01),         /* bSlaveInterface0 (Data Class
-
 
200
                                         Interface).                      */
-
 
201
/* Endpoint 2 Descriptor.*/
-
 
202
USB_DESC_ENDPOINT     (USBD1_INTERRUPT2_REQUEST_EP|0x80,
-
 
203
                       0x03,          /* bmAttributes (Interrupt).        */
-
 
204
                       0x0008,        /* wMaxPacketSize.                  */
-
 
205
                       0xFF),         /* bInterval.                       */
-
 
206
/* Interface Descriptor.*/
-
 
207
USB_DESC_INTERFACE    (0x03,          /* bInterfaceNumber.                */
-
 
208
                       0x00,          /* bAlternateSetting.               */
-
 
209
                       0x02,          /* bNumEndpoints.                   */
-
 
210
                       0x0A,          /* bInterfaceClass (Data Class
-
 
211
                                         Interface, CDC section 4.5).     */
-
 
212
                       0x00,          /* bInterfaceSubClass (CDC section
-
 
213
                                         4.6).                            */
-
 
214
                       0x00,          /* bInterfaceProtocol (CDC section
-
 
215
                                         4.7).                            */
-
 
216
                       0x00),         /* iInterface.                      */
-
 
217
/* Endpoint 3 Descriptor.*/
-
 
218
USB_DESC_ENDPOINT     (USBD1_DATA2_AVAILABLE_EP,       /* bEndpointAddress.*/
-
 
219
                       0x02,          /* bmAttributes (Bulk).             */
-
 
220
                       0x0040,        /* wMaxPacketSize.                  */
-
 
221
                       0x00),         /* bInterval.                       */
-
 
222
/* Endpoint 1 Descriptor.*/
-
 
223
USB_DESC_ENDPOINT     (USBD1_DATA2_REQUEST_EP|0x80,    /* bEndpointAddress.*/
-
 
224
                       0x02,          /* bmAttributes (Bulk).             */
-
 
225
                       0x0040,        /* wMaxPacketSize.                  */
-
 
226
                       0x00)          /* bInterval.                       */
-
 
227
#endif
130
};
228
};
131
 
-
 
132
/*
229
/*
133
 * Configuration Descriptor wrapper.
230
 * Configuration Descriptor wrapper.
134
 */
231
 */
135
static const USBDescriptor vcom_configuration_descriptor = {
232
static const USBDescriptor vcom_configuration_descriptor = {
136
  sizeof vcom_configuration_descriptor_data,
233
  sizeof vcom_configuration_descriptor_data,
Line 258... Line 355...
258
  NULL,
355
  NULL,
259
  1,
356
  1,
260
  NULL
357
  NULL
261
};
358
};
262
 
359
 
-
 
360
 
-
 
361
#if DUAL_CDC_EP ==TRUE
-
 
362
/**
-
 
363
 * @brief   IN EP3 state.
-
 
364
 */
-
 
365
static USBInEndpointState ep3instate;
-
 
366
 
-
 
367
/**
-
 
368
 * @brief   OUT EP3 state.
-
 
369
 */
-
 
370
static USBOutEndpointState ep3outstate;
-
 
371
 
-
 
372
/**
-
 
373
 * @brief   EP3 initialization structure (both IN and OUT).
-
 
374
 */
-
 
375
static const USBEndpointConfig ep3config = {
-
 
376
  USB_EP_MODE_TYPE_BULK,
-
 
377
  NULL,
-
 
378
  sduDataTransmitted,
-
 
379
  sduDataReceived,
-
 
380
  0x0040,
-
 
381
  0x0040,
-
 
382
  &ep3instate,
-
 
383
  &ep3outstate,
-
 
384
  2,
-
 
385
  NULL
-
 
386
};
-
 
387
 
-
 
388
/**
-
 
389
 * @brief   IN EP4 state.
-
 
390
 */
-
 
391
static USBInEndpointState ep4instate;
-
 
392
 
-
 
393
/**
-
 
394
 * @brief   EP4 initialization structure (IN only).
-
 
395
 */
-
 
396
static const USBEndpointConfig ep4config = {
-
 
397
  USB_EP_MODE_TYPE_INTR,
-
 
398
  NULL,
-
 
399
  sduInterruptTransmitted,
-
 
400
  NULL,
-
 
401
  0x0010,
-
 
402
  0x0000,
-
 
403
  &ep4instate,
-
 
404
  NULL,
-
 
405
  1,
-
 
406
  NULL
-
 
407
};
-
 
408
 
-
 
409
 
-
 
410
#endif
263
/*
411
/*
264
 * Handles the USB driver global events.
412
 * Handles the USB driver global events.
265
 */
413
 */
266
static void usb_event(USBDriver *usbp, usbevent_t event) {
414
static void usb_event(USBDriver *usbp, usbevent_t event) {
267
  extern SerialUSBDriver SDU1;
415
  extern SerialUSBDriver SDU1;
Line 275... Line 423...
275
    /* Enables the endpoints specified into the configuration.
423
    /* Enables the endpoints specified into the configuration.
276
       Note, this callback is invoked from an ISR so I-Class functions
424
       Note, this callback is invoked from an ISR so I-Class functions
277
       must be used.*/
425
       must be used.*/
278
    usbInitEndpointI(usbp, USBD1_DATA_REQUEST_EP, &ep1config);
426
    usbInitEndpointI(usbp, USBD1_DATA_REQUEST_EP, &ep1config);
279
    usbInitEndpointI(usbp, USBD1_INTERRUPT_REQUEST_EP, &ep2config);
427
    usbInitEndpointI(usbp, USBD1_INTERRUPT_REQUEST_EP, &ep2config);
-
 
428
#if DUAL_CDC_EP == TRUE
-
 
429
    usbInitEndpointI(usbp, USBD1_DATA2_REQUEST_EP, &ep3config);
-
 
430
    usbInitEndpointI(usbp, USBD1_INTERRUPT2_REQUEST_EP, &ep4config);
280
 
431
#endif
281
    /* Resetting the state of the CDC subsystem.*/
432
    /* Resetting the state of the CDC subsystem.*/
282
    sduConfigureHookI(&SDU1);
433
    sduConfigureHookI(&SDU1);
283
 
434
 
284
    chSysUnlockFromISR();
435
    chSysUnlockFromISR();
285
    return;
436
    return;
Line 338... Line 489...
338
  &USBD1,
489
  &USBD1,
339
  USBD1_DATA_REQUEST_EP,
490
  USBD1_DATA_REQUEST_EP,
340
  USBD1_DATA_AVAILABLE_EP,
491
  USBD1_DATA_AVAILABLE_EP,
341
  USBD1_INTERRUPT_REQUEST_EP
492
  USBD1_INTERRUPT_REQUEST_EP
342
};
493
};
-
 
494
 
-
 
495
#if HAL_USE_USB_DUAL_CDC == TRUE
-
 
496
const SerialUSBConfig serusbcfg2 = {
-
 
497
  &USBD1,
-
 
498
  USBD1_DATA2_REQUEST_EP,
-
 
499
  USBD1_DATA2_AVAILABLE_EP,
-
 
500
  USBD1_INTERRUPT2_REQUEST_EP
-
 
501
};
-
 
502
#endif