Skip to content

Commit

Permalink
Merge pull request #2417 from hathach/serialhost-change-ftdi-cp210x-p…
Browse files Browse the repository at this point in the history
…id-list

change serila host FTDI/CP210X pid list to vid/pid list
  • Loading branch information
hathach committed Jan 15, 2024
2 parents 4b3b401 + aa58cdc commit 938cae8
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 23 deletions.
2 changes: 1 addition & 1 deletion .idea/cmake.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 10 additions & 14 deletions src/class/cdc/cdc_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ static bool acm_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tuh_xfe
#if CFG_TUH_CDC_FTDI
#include "serial/ftdi_sio.h"

static uint16_t const ftdi_pids[] = { CFG_TUH_CDC_FTDI_PID_LIST };
static uint16_t const ftdi_vid_pid_list[][2] = {CFG_TUH_CDC_FTDI_VID_PID_LIST };
enum {
FTDI_PID_COUNT = sizeof(ftdi_pids) / sizeof(ftdi_pids[0])
FTDI_PID_COUNT = sizeof(ftdi_vid_pid_list) / sizeof(ftdi_vid_pid_list[0])
};

// Store last request baudrate since divisor to baudrate is not easy
Expand All @@ -110,9 +110,9 @@ static bool ftdi_sio_set_baudrate(cdch_interface_t* p_cdc, uint32_t baudrate, tu
#if CFG_TUH_CDC_CP210X
#include "serial/cp210x.h"

static uint16_t const cp210x_pids[] = { CFG_TUH_CDC_CP210X_PID_LIST };
static uint16_t const cp210x_vid_pid_list[][2] = {CFG_TUH_CDC_CP210X_VID_PID_LIST };
enum {
CP210X_PID_COUNT = sizeof(cp210x_pids) / sizeof(cp210x_pids[0])
CP210X_PID_COUNT = sizeof(cp210x_vid_pid_list) / sizeof(cp210x_vid_pid_list[0])
};

static bool cp210x_open(uint8_t daddr, tusb_desc_interface_t const *itf_desc, uint16_t max_len);
Expand Down Expand Up @@ -647,21 +647,17 @@ bool cdch_open(uint8_t rhport, uint8_t daddr, tusb_desc_interface_t const *itf_d
TU_VERIFY(tuh_vid_pid_get(daddr, &vid, &pid));

#if CFG_TUH_CDC_FTDI
if (TU_FTDI_VID == vid) {
for (size_t i = 0; i < FTDI_PID_COUNT; i++) {
if (ftdi_pids[i] == pid) {
return ftdi_open(daddr, itf_desc, max_len);
}
for (size_t i = 0; i < FTDI_PID_COUNT; i++) {
if (ftdi_vid_pid_list[i][0] == vid && ftdi_vid_pid_list[i][1] == pid) {
return ftdi_open(daddr, itf_desc, max_len);
}
}
#endif

#if CFG_TUH_CDC_CP210X
if (TU_CP210X_VID == vid) {
for (size_t i = 0; i < CP210X_PID_COUNT; i++) {
if (cp210x_pids[i] == pid) {
return cp210x_open(daddr, itf_desc, max_len);
}
for (size_t i = 0; i < CP210X_PID_COUNT; i++) {
if (cp210x_vid_pid_list[i][0] == vid && cp210x_vid_pid_list[i][1] == pid) {
return cp210x_open(daddr, itf_desc, max_len);
}
}
#endif
Expand Down
18 changes: 10 additions & 8 deletions src/tusb_option.h
Original file line number Diff line number Diff line change
Expand Up @@ -453,21 +453,23 @@
#define CFG_TUH_CDC_FTDI 0
#endif

#ifndef CFG_TUH_CDC_FTDI_PID_LIST
// List of product IDs that can use the FTDI CDC driver
#define CFG_TUH_CDC_FTDI_PID_LIST \
0x6001, 0x6006, 0x6010, 0x6011, 0x6014, 0x6015, 0x8372, 0xFBFA, 0xCD18
#ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST
// List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID
#define CFG_TUH_CDC_FTDI_VID_PID_LIST \
{0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \
{0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \
{0x0403, 0xCD18}
#endif

#ifndef CFG_TUH_CDC_CP210X
// CP210X is not part of CDC class, only to re-use CDC driver API
#define CFG_TUH_CDC_CP210X 0
#endif

#ifndef CFG_TUH_CDC_CP210X_PID_LIST
// List of product IDs that can use the CP210X CDC driver
#define CFG_TUH_CDC_CP210X_PID_LIST \
0xEA60, 0xEA70
#ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST
// List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID
#define CFG_TUH_CDC_CP210X_VID_PID_LIST \
{0x10C4, 0xEA60}, {0x10C4, 0xEA70}
#endif

#ifndef CFG_TUH_HID
Expand Down

0 comments on commit 938cae8

Please sign in to comment.