@@ -126,11 +126,6 @@ static cdch_interface_t* make_new_itf(uint8_t daddr, tusb_desc_interface_t const
126
126
return NULL ;
127
127
}
128
128
129
- static inline bool support_line_request (cdch_interface_t const * p_cdc ) {
130
- return (p_cdc -> serial_protocol == SERIAL_PROTOCOL_ACM && p_cdc -> acm_capability .support_line_request ) ||
131
- (p_cdc -> serial_protocol == SERIAL_PROTOCOL_FTDI );
132
- }
133
-
134
129
static bool open_ep_stream_pair (cdch_interface_t * p_cdc , tusb_desc_endpoint_t const * desc_ep );
135
130
static void set_config_complete (cdch_interface_t * p_cdc , uint8_t idx , uint8_t itf_num );
136
131
static void cdch_internal_control_complete (tuh_xfer_t * xfer );
@@ -391,10 +386,11 @@ static bool acm_set_control_line_state(cdch_interface_t* p_cdc, uint16_t line_st
391
386
bool tuh_cdc_set_control_line_state (uint8_t idx , uint16_t line_state , tuh_xfer_cb_t complete_cb , uintptr_t user_data )
392
387
{
393
388
cdch_interface_t * p_cdc = get_itf (idx );
394
- TU_VERIFY (p_cdc && support_line_request ( p_cdc ) );
389
+ TU_VERIFY (p_cdc );
395
390
396
391
switch (p_cdc -> serial_protocol ) {
397
392
case SERIAL_PROTOCOL_ACM :
393
+ TU_VERIFY (p_cdc -> acm_capability .support_line_request );
398
394
return acm_set_control_line_state (p_cdc , line_state , complete_cb , user_data );
399
395
400
396
#if CFG_TUH_CDC_FTDI
@@ -413,6 +409,8 @@ bool tuh_cdc_set_control_line_state(uint8_t idx, uint16_t line_state, tuh_xfer_c
413
409
}
414
410
415
411
bool acm_set_line_coding (cdch_interface_t * p_cdc , cdc_line_coding_t const * line_coding , tuh_xfer_cb_t complete_cb , uintptr_t user_data ) {
412
+ TU_LOG_CDCH ("CDC ACM Set Line Conding\r\n" );
413
+
416
414
tusb_control_request_t const request = {
417
415
.bmRequestType_bit = {
418
416
.recipient = TUSB_REQ_RCPT_INTERFACE ,
@@ -446,11 +444,11 @@ bool acm_set_line_coding(cdch_interface_t* p_cdc, cdc_line_coding_t const* line_
446
444
bool tuh_cdc_set_line_coding (uint8_t idx , cdc_line_coding_t const * line_coding , tuh_xfer_cb_t complete_cb , uintptr_t user_data )
447
445
{
448
446
cdch_interface_t * p_cdc = get_itf (idx );
449
- TU_VERIFY (p_cdc && support_line_request (p_cdc ));
450
- TU_LOG_CDCH ("CDC Set Line Conding\r\n" );
447
+ TU_VERIFY (p_cdc );
451
448
452
449
switch (p_cdc -> serial_protocol ) {
453
450
case SERIAL_PROTOCOL_ACM :
451
+ TU_VERIFY (p_cdc -> acm_capability .support_line_request );
454
452
return acm_set_line_coding (p_cdc , line_coding , complete_cb , user_data );
455
453
456
454
#if CFG_TUH_CDC_FTDI
@@ -468,6 +466,33 @@ bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding,
468
466
}
469
467
}
470
468
469
+ bool tuh_cdc_set_baudrate (uint8_t idx , uint32_t baudrate , tuh_xfer_cb_t complete_cb , uintptr_t user_data ) {
470
+ cdch_interface_t * p_cdc = get_itf (idx );
471
+ TU_VERIFY (p_cdc );
472
+
473
+ switch (p_cdc -> serial_protocol ) {
474
+ case SERIAL_PROTOCOL_ACM : {
475
+ TU_VERIFY (p_cdc -> acm_capability .support_line_request );
476
+ cdc_line_coding_t line_coding = p_cdc -> line_coding ;
477
+ line_coding .bit_rate = baudrate ;
478
+ return acm_set_line_coding (p_cdc , & line_coding , complete_cb , user_data );
479
+ }
480
+
481
+ #if CFG_TUH_CDC_FTDI
482
+ case SERIAL_PROTOCOL_FTDI :
483
+ // FTDI need to set baud rate and data bits, parity, stop bits separately
484
+ return ftdi_sio_set_baudrate (p_cdc , baudrate , complete_cb , user_data );
485
+ #endif
486
+
487
+ #if CFG_TUH_CDC_CP210X
488
+ case SERIAL_PROTOCOL_CP210X :
489
+ return cp210x_set_baudrate (p_cdc , baudrate , complete_cb , user_data );
490
+ #endif
491
+
492
+ default : return false;
493
+ }
494
+ }
495
+
471
496
//--------------------------------------------------------------------+
472
497
// CLASS-USBH API
473
498
//--------------------------------------------------------------------+
@@ -722,7 +747,7 @@ static void process_acm_config(tuh_xfer_t* xfer)
722
747
if (p_cdc -> acm_capability .support_line_request )
723
748
{
724
749
cdc_line_coding_t line_coding = CFG_TUH_CDC_LINE_CODING_ON_ENUM ;
725
- TU_ASSERT (tuh_cdc_set_line_coding ( idx , & line_coding , process_acm_config , CONFIG_ACM_COMPLETE ), );
750
+ TU_ASSERT (acm_set_line_coding ( p_cdc , & line_coding , process_acm_config , CONFIG_ACM_COMPLETE ), );
726
751
break ;
727
752
}
728
753
#endif
0 commit comments