FTDI fixed itf_num and some improvement

This commit is contained in:
IngHK
2024-02-28 13:07:40 +01:00
parent 7f7576fa62
commit f97e31226a

View File

@@ -1140,22 +1140,19 @@ static void ftdi_internal_control_complete(tuh_xfer_t * xfer) {
TU_LOG_RESULT(" control complete", success); TU_LOG_RESULT(" control complete", success);
if (success) { if (success) {
switch (xfer->setup->bRequest) { if (xfer->setup->bRequest == FTDI_SIO_SET_MODEM_CTRL_REQUEST &&
case FTDI_SIO_SET_MODEM_CTRL_REQUEST: xfer->setup->bmRequestType == FTDI_SIO_SET_MODEM_CTRL_REQUEST_TYPE ) {
p_cdc->line_state = p_cdc->requested_line_state; p_cdc->line_state = p_cdc->requested_line_state;
break; }
if (xfer->setup->bRequest == FTDI_SIO_SET_DATA_REQUEST &&
case FTDI_SIO_SET_DATA_REQUEST: xfer->setup->bmRequestType == FTDI_SIO_SET_DATA_REQUEST_TYPE ) {
p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits; p_cdc->line_coding.stop_bits = p_cdc->requested_line_coding.stop_bits;
p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity; p_cdc->line_coding.parity = p_cdc->requested_line_coding.parity;
p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits; p_cdc->line_coding.data_bits = p_cdc->requested_line_coding.data_bits;
break; }
if (xfer->setup->bRequest == FTDI_SIO_SET_BAUDRATE_REQUEST &&
case FTDI_SIO_SET_BAUDRATE_REQUEST: xfer->setup->bmRequestType == FTDI_SIO_SET_BAUDRATE_REQUEST_TYPE ) {
p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate; p_cdc->line_coding.bit_rate = p_cdc->requested_line_coding.bit_rate;
break;
default: break;
} }
} }
@@ -1180,7 +1177,10 @@ static bool ftdi_set_baudrate(cdch_interface_t * p_cdc, tuh_xfer_cb_t complete_c
} }
static void ftdi_set_line_coding_stage1_complete(tuh_xfer_t * xfer) { static void ftdi_set_line_coding_stage1_complete(tuh_xfer_t * xfer) {
uint8_t const itf_num = (uint8_t) tu_le16toh(xfer->setup->wIndex); uint8_t const idx = ftdi_get_idx(xfer);
cdch_interface_t * p_cdc = get_itf(idx);
TU_ASSERT(p_cdc,);
uint8_t const itf_num = p_cdc->bInterfaceNumber;
set_line_coding_stage1_complete(xfer, itf_num, set_line_coding_stage1_complete(xfer, itf_num,
ftdi_set_data_request, // control request function to set data format ftdi_set_data_request, // control request function to set data format
ftdi_internal_control_complete); // control complete function to be called after request ftdi_internal_control_complete); // control complete function to be called after request
@@ -1413,7 +1413,8 @@ static bool ftdi_determine_type(cdch_interface_t * p_cdc, uint8_t const idx)
break; break;
} }
TU_LOG_P_CDC(" %s detected", ftdi_chip_name[p_cdc->ftdi.chip_type]); TU_LOG_P_CDC(" %s detected (bcdDevice = 0x%04x)",
ftdi_chip_name[p_cdc->ftdi.chip_type], desc_dev[idx]->bcdDevice);
return (p_cdc->ftdi.chip_type != UNKNOWN); return (p_cdc->ftdi.chip_type != UNKNOWN);
} }