@@ -123,10 +123,6 @@ typedef struct {
123
123
static cdch_interface_t cdch_data [CFG_TUH_CDC ];
124
124
CFG_TUH_MEM_SECTION static cdch_epbuf_t cdch_epbuf [CFG_TUH_CDC ];
125
125
126
- #if CFG_TUH_CDC_FTDI || CFG_TUH_CDC_PL2303
127
- static tusb_desc_device_t desc_dev [CFG_TUH_ENUMERATION_BUFSIZE ];
128
- #endif
129
-
130
126
//--------------------------------------------------------------------+
131
127
// Serial Driver
132
128
//--------------------------------------------------------------------+
@@ -189,8 +185,6 @@ static bool ch34x_set_modem_ctrl(cdch_interface_t * p_cdc, tuh_xfer_cb_t complet
189
185
static uint16_t const pl2303_vid_pid_list [][2 ] = {CFG_TUH_CDC_PL2303_VID_PID_LIST };
190
186
static const struct pl2303_type_data pl2303_type_data [TYPE_COUNT ] = {PL2303_TYPE_DATA };
191
187
192
- CFG_TUH_MEM_SECTION CFG_TUH_MEM_ALIGN
193
-
194
188
static bool pl2303_open (uint8_t daddr , tusb_desc_interface_t const * itf_desc , uint16_t max_len );
195
189
static bool pl2303_process_set_config (tuh_xfer_t * xfer );
196
190
@@ -975,8 +969,6 @@ bool cdch_set_config(uint8_t daddr, uint8_t itf_num) {
975
969
// ACM
976
970
//--------------------------------------------------------------------+
977
971
978
- //------------- Driver API -------------//
979
-
980
972
// internal control complete to update state such as line state, encoding
981
973
static void acm_internal_control_complete (tuh_xfer_t * xfer ) {
982
974
uint8_t const itf_num = (uint8_t ) tu_le16toh (xfer -> setup -> wIndex );
@@ -1089,7 +1081,6 @@ static bool acm_set_baudrate(cdch_interface_t *p_cdc, tuh_xfer_cb_t complete_cb,
1089
1081
}
1090
1082
1091
1083
//------------- Enumeration -------------//
1092
-
1093
1084
enum {
1094
1085
CONFIG_ACM_SET_CONTROL_LINE_STATE = 0 ,
1095
1086
CONFIG_ACM_SET_LINE_CODING ,
@@ -1339,8 +1330,7 @@ static bool ftdi_set_modem_ctrl(cdch_interface_t *p_cdc, tuh_xfer_cb_t complete_
1339
1330
//------------- Enumeration -------------//
1340
1331
1341
1332
enum {
1342
- CONFIG_FTDI_GET_DESC = 0 ,
1343
- CONFIG_FTDI_DETERMINE_TYPE ,
1333
+ CONFIG_FTDI_DETERMINE_TYPE = 0 ,
1344
1334
CONFIG_FTDI_WRITE_LATENCY ,
1345
1335
CONFIG_FTDI_SIO_RESET ,
1346
1336
CONFIG_FTDI_SET_DATA ,
@@ -1383,15 +1373,6 @@ static bool ftdi_proccess_set_config(tuh_xfer_t *xfer) {
1383
1373
1384
1374
switch (state ) {
1385
1375
// from here sequence overtaken from Linux Kernel function ftdi_port_probe()
1386
- case CONFIG_FTDI_GET_DESC :
1387
- // get device descriptor
1388
- if (itf_num == 0 ) { // only necessary for 1st interface. other interface overtake type from interface 0
1389
- TU_ASSERT (tuh_descriptor_get_device (xfer -> daddr , & desc_dev , sizeof (tusb_desc_device_t ),
1390
- cdch_process_set_config , CONFIG_FTDI_DETERMINE_TYPE ));
1391
- break ;
1392
- }
1393
- TU_ATTR_FALLTHROUGH ;
1394
-
1395
1376
case CONFIG_FTDI_DETERMINE_TYPE :
1396
1377
// determine type
1397
1378
if (itf_num == 0 ) {
@@ -1472,7 +1453,9 @@ static bool ftdi_proccess_set_config(tuh_xfer_t *xfer) {
1472
1453
//------------- Helper -------------//
1473
1454
1474
1455
static bool ftdi_determine_type (cdch_interface_t * p_cdc ) {
1475
- uint16_t const version = desc_dev -> bcdDevice ;
1456
+ tusb_desc_device_t desc_dev ;
1457
+ TU_VERIFY (tuh_descriptor_get_device_local (p_cdc -> daddr , & desc_dev ));
1458
+ uint16_t const version = desc_dev .bcdDevice ;
1476
1459
uint8_t const itf_num = p_cdc -> bInterfaceNumber ;
1477
1460
1478
1461
p_cdc -> ftdi .chip_type = UNKNOWN ;
@@ -1482,8 +1465,7 @@ static bool ftdi_determine_type(cdch_interface_t *p_cdc) {
1482
1465
1483
1466
switch (version ) {
1484
1467
case 0x200 :
1485
- // FT232A not supported to keep it simple (no extra _read_latency_timer())
1486
- // not testable
1468
+ // FT232A not supported to keep it simple (no extra _read_latency_timer()) not testable
1487
1469
// p_cdc->ftdi.chip_type = FT232A;
1488
1470
// p_cdc->ftdi.baud_base = 48000000 / 2;
1489
1471
// p_cdc->ftdi.channel = 0;
@@ -1497,50 +1479,20 @@ static bool ftdi_determine_type(cdch_interface_t *p_cdc) {
1497
1479
// p_cdc->ftdi.chip_type = FT232B;
1498
1480
// }
1499
1481
break ;
1500
- case 0x400 :
1501
- p_cdc -> ftdi .chip_type = FT232B ;
1502
- p_cdc -> ftdi .channel = 0 ;
1503
- break ;
1504
- case 0x500 :
1505
- p_cdc -> ftdi .chip_type = FT2232C ;
1506
- break ;
1507
- case 0x600 :
1508
- p_cdc -> ftdi .chip_type = FT232R ;
1509
- p_cdc -> ftdi .channel = 0 ;
1510
- break ;
1511
- case 0x700 :
1512
- p_cdc -> ftdi .chip_type = FT2232H ;
1513
- break ;
1514
- case 0x800 :
1515
- p_cdc -> ftdi .chip_type = FT4232H ;
1516
- break ;
1517
- case 0x900 :
1518
- p_cdc -> ftdi .chip_type = FT232H ;
1519
- break ;
1520
- case 0x1000 :
1521
- p_cdc -> ftdi .chip_type = FTX ;
1522
- break ;
1523
- case 0x2800 :
1524
- p_cdc -> ftdi .chip_type = FT2233HP ;
1525
- break ;
1526
- case 0x2900 :
1527
- p_cdc -> ftdi .chip_type = FT4233HP ;
1528
- break ;
1529
- case 0x3000 :
1530
- p_cdc -> ftdi .chip_type = FT2232HP ;
1531
- break ;
1532
- case 0x3100 :
1533
- p_cdc -> ftdi .chip_type = FT4232HP ;
1534
- break ;
1535
- case 0x3200 :
1536
- p_cdc -> ftdi .chip_type = FT233HP ;
1537
- break ;
1538
- case 0x3300 :
1539
- p_cdc -> ftdi .chip_type = FT232HP ;
1540
- break ;
1541
- case 0x3600 :
1542
- p_cdc -> ftdi .chip_type = FT4232HA ;
1543
- break ;
1482
+ case 0x400 : p_cdc -> ftdi .chip_type = FT232B ; p_cdc -> ftdi .channel = 0 ; break ;
1483
+ case 0x500 : p_cdc -> ftdi .chip_type = FT2232C ; break ;
1484
+ case 0x600 : p_cdc -> ftdi .chip_type = FT232R ; p_cdc -> ftdi .channel = 0 ; break ;
1485
+ case 0x700 : p_cdc -> ftdi .chip_type = FT2232H ; break ;
1486
+ case 0x800 : p_cdc -> ftdi .chip_type = FT4232H ; break ;
1487
+ case 0x900 : p_cdc -> ftdi .chip_type = FT232H ; break ;
1488
+ case 0x1000 : p_cdc -> ftdi .chip_type = FTX ; break ;
1489
+ case 0x2800 : p_cdc -> ftdi .chip_type = FT2233HP ; break ;
1490
+ case 0x2900 : p_cdc -> ftdi .chip_type = FT4233HP ; break ;
1491
+ case 0x3000 : p_cdc -> ftdi .chip_type = FT2232HP ; break ;
1492
+ case 0x3100 : p_cdc -> ftdi .chip_type = FT4232HP ; break ;
1493
+ case 0x3200 : p_cdc -> ftdi .chip_type = FT233HP ; break ;
1494
+ case 0x3300 : p_cdc -> ftdi .chip_type = FT232HP ; break ;
1495
+ case 0x3600 : p_cdc -> ftdi .chip_type = FT4232HA ; break ;
1544
1496
default :
1545
1497
if (version < 0x200 ) {
1546
1498
p_cdc -> ftdi .chip_type = SIO ;
@@ -1550,7 +1502,7 @@ static bool ftdi_determine_type(cdch_interface_t *p_cdc) {
1550
1502
}
1551
1503
1552
1504
TU_LOG_P_CDC ("%s detected (bcdDevice = 0x%04x)" ,
1553
- ftdi_chip_name [p_cdc -> ftdi .chip_type ], desc_dev -> bcdDevice );
1505
+ ftdi_chip_name [p_cdc -> ftdi .chip_type ], version );
1554
1506
1555
1507
return (p_cdc -> ftdi .chip_type != UNKNOWN );
1556
1508
}
@@ -2025,7 +1977,8 @@ static bool ch34x_write_reg_baudrate(cdch_interface_t *p_cdc, tuh_xfer_cb_t comp
2025
1977
}
2026
1978
2027
1979
static bool ch34x_modem_ctrl_request (cdch_interface_t * p_cdc , tuh_xfer_cb_t complete_cb , uintptr_t user_data ) {
2028
- uint8_t control = ~((p_cdc -> requested_line_state .rts ? CH34X_BIT_RTS : 0 ) |// CH34x signals are inverted
1980
+ // CH34x signals are inverted
1981
+ uint8_t control = ~((p_cdc -> requested_line_state .rts ? CH34X_BIT_RTS : 0 ) |
2029
1982
(p_cdc -> requested_line_state .dtr ? CH34X_BIT_DTR : 0 ));
2030
1983
return ch34x_control_out (p_cdc , CH34X_REQ_MODEM_CTRL , control , 0 , complete_cb , user_data );
2031
1984
}
@@ -2506,8 +2459,7 @@ static bool pl2303_set_modem_ctrl(cdch_interface_t *p_cdc, tuh_xfer_cb_t complet
2506
2459
//------------- Enumeration -------------//
2507
2460
2508
2461
enum {
2509
- CONFIG_PL2303_GET_DESC = 0 ,
2510
- CONFIG_PL2303_DETECT_TYPE ,
2462
+ CONFIG_PL2303_DETECT_TYPE = 0 ,
2511
2463
CONFIG_PL2303_READ1 ,
2512
2464
CONFIG_PL2303_WRITE1 ,
2513
2465
CONFIG_PL2303_READ2 ,
@@ -2568,14 +2520,8 @@ static bool pl2303_process_set_config(tuh_xfer_t *xfer) {
2568
2520
TU_ASSERT (p_cdc && (xfer -> result == XFER_RESULT_SUCCESS || xfer -> user_data == CONFIG_PL2303_READ1 ));
2569
2521
switch (state ) {
2570
2522
// from here sequence overtaken from Linux Kernel function pl2303_startup()
2571
- case CONFIG_PL2303_GET_DESC :
2572
- p_cdc -> user_control_cb = cdch_process_set_config ;// set once for whole process config
2573
- // get device descriptor
2574
- TU_ASSERT (tuh_descriptor_get_device (xfer -> daddr , & desc_dev , sizeof (tusb_desc_device_t ),
2575
- cdch_process_set_config , CONFIG_PL2303_DETECT_TYPE ));
2576
- break ;
2577
-
2578
2523
case CONFIG_PL2303_DETECT_TYPE :
2524
+ p_cdc -> user_control_cb = cdch_process_set_config ;// set once for whole process config
2579
2525
// get type and quirks (step 1)
2580
2526
type = pl2303_detect_type (p_cdc , 1 , cdch_process_set_config , CONFIG_PL2303_READ1 );
2581
2527
TU_ASSERT (type != PL2303_DETECT_TYPE_FAILED );
@@ -2784,39 +2730,39 @@ static bool pl2303_process_set_config(tuh_xfer_t *xfer) {
2784
2730
2785
2731
static int8_t pl2303_detect_type (cdch_interface_t * p_cdc , uint8_t step ,
2786
2732
tuh_xfer_cb_t complete_cb , uintptr_t user_data ) {
2787
- /*
2788
- * Legacy PL2303H, variants 0 and 1 (difference unknown).
2789
- */
2790
- if (desc_dev -> bDeviceClass == 0x02 ) {
2733
+ tusb_desc_device_t desc_dev ;
2734
+ TU_VERIFY (tuh_descriptor_get_device_local (p_cdc -> daddr , & desc_dev ), PL2303_DETECT_TYPE_FAILED );
2735
+
2736
+ // Legacy PL2303H, variants 0 and 1 (difference unknown).
2737
+ if (desc_dev .bDeviceClass == 0x02 ) {
2791
2738
return TYPE_H ; /* variant 0 */
2792
2739
}
2793
2740
2794
- if (desc_dev -> bMaxPacketSize0 != 0x40 ) {
2795
- if (desc_dev -> bDeviceClass == 0x00 || desc_dev -> bDeviceClass == 0xff ) {
2741
+ if (desc_dev . bMaxPacketSize0 != 0x40 ) {
2742
+ if (desc_dev . bDeviceClass == 0x00 || desc_dev . bDeviceClass == 0xff ) {
2796
2743
return TYPE_H ; /* variant 1 */
2797
2744
}
2798
2745
return TYPE_H ; /* variant 0 */
2799
2746
}
2800
2747
2801
- switch (desc_dev -> bcdUSB ) {
2748
+ switch (desc_dev . bcdUSB ) {
2802
2749
case 0x101 :
2803
2750
/* USB 1.0.1? Let's assume they meant 1.1... */
2804
2751
TU_ATTR_FALLTHROUGH ;
2805
2752
case 0x110 :
2806
- switch (desc_dev -> bcdDevice ) {
2807
- case 0x300 :
2808
- return TYPE_HX ;
2809
- case 0x400 :
2810
- return TYPE_HXD ;
2811
- default :
2812
- return TYPE_HX ;
2753
+ switch (desc_dev .bcdDevice ) {
2754
+ case 0x300 : return TYPE_HX ;
2755
+ case 0x400 : return TYPE_HXD ;
2756
+ default : return TYPE_HX ;
2813
2757
}
2814
2758
break ;
2759
+
2815
2760
case 0x200 :
2816
- switch (desc_dev -> bcdDevice ) {
2761
+ switch (desc_dev . bcdDevice ) {
2817
2762
case 0x100 : /* GC */
2818
2763
case 0x105 :
2819
2764
return TYPE_HXN ;
2765
+
2820
2766
case 0x300 : /* GT / TA */
2821
2767
if (step == 1 ) {
2822
2768
// step 1 trigger pl2303_supports_hx_status() request
@@ -2833,6 +2779,7 @@ static int8_t pl2303_detect_type(cdch_interface_t *p_cdc, uint8_t step,
2833
2779
case 0x400 : /* GL */
2834
2780
case 0x405 :
2835
2781
return TYPE_HXN ;
2782
+
2836
2783
case 0x500 : /* GE / TB */
2837
2784
if (step == 1 ) {
2838
2785
// step 1 trigger pl2303_supports_hx_status() request
@@ -2851,15 +2798,15 @@ static int8_t pl2303_detect_type(cdch_interface_t *p_cdc, uint8_t step,
2851
2798
case 0x700 : /* GR */
2852
2799
case 0x705 :
2853
2800
return TYPE_HXN ;
2801
+
2854
2802
default :
2855
2803
break ;
2856
2804
}
2857
2805
break ;
2858
2806
default : break ;
2859
2807
}
2860
2808
2861
- TU_LOG_P_CDC ("unknown device type bcdUSB = 0x%04x" , desc_dev -> bcdUSB );
2862
-
2809
+ TU_LOG_P_CDC ("unknown device type bcdUSB = 0x%04x" , desc_dev .bcdUSB );
2863
2810
return PL2303_DETECT_TYPE_FAILED ;
2864
2811
}
2865
2812
0 commit comments