Skip to content

Commit 2e0f267

Browse files
authored
Merge pull request #297 from adafruit/enhance-serial-host
Enhance serial host
2 parents c58ed81 + 5924834 commit 2e0f267

File tree

5 files changed

+467
-351
lines changed

5 files changed

+467
-351
lines changed

src/arduino/cdc/Adafruit_USBH_CDC.cpp

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,13 @@
3232

3333
Adafruit_USBH_CDC::Adafruit_USBH_CDC(void) { _idx = TUSB_INDEX_INVALID_8; }
3434

35-
void Adafruit_USBH_CDC::begin(unsigned long baud) {
36-
35+
void Adafruit_USBH_CDC::begin(unsigned long baudrate) {
3736
// default to index 0 when begin
3837
if (_idx == TUSB_INDEX_INVALID_8) {
3938
_idx = 0;
4039
}
4140

42-
_baud = baud;
41+
_baud = baudrate;
4342
if (_baud == 0) {
4443
_baud = 115200; // default, backward compatible with previous API begin(0)
4544
}
@@ -52,14 +51,65 @@ void Adafruit_USBH_CDC::begin(unsigned long baudrate, uint16_t config) {
5251

5352
void Adafruit_USBH_CDC::end(void) { _idx = TUSB_INDEX_INVALID_8; }
5453

55-
bool Adafruit_USBH_CDC::connected(void) {
56-
return (_idx != TUSB_INDEX_INVALID_8) && tuh_cdc_connected(_idx);
54+
bool Adafruit_USBH_CDC::mount(uint8_t idx) {
55+
_idx = idx;
56+
57+
uint32_t local_baud = baud();
58+
if (local_baud != _baud) {
59+
return setBaudrate(_baud);
60+
}
61+
62+
return true;
63+
}
64+
65+
void Adafruit_USBH_CDC::umount(uint8_t idx) {
66+
if (_idx == idx) {
67+
_idx = TUSB_INDEX_INVALID_8;
68+
}
69+
}
70+
71+
bool Adafruit_USBH_CDC::connected(void) { return tuh_cdc_connected(_idx); }
72+
73+
bool Adafruit_USBH_CDC::mounted(void) { return tuh_cdc_mounted(_idx); }
74+
uint32_t Adafruit_USBH_CDC::baud() {
75+
cdc_line_coding_t line_coding;
76+
if (!tuh_cdc_get_local_line_coding(_idx, &line_coding)) {
77+
return 0;
78+
}
79+
return line_coding.bit_rate;
80+
}
81+
82+
//--------------------------------------------------------------------+
83+
// Control API
84+
//--------------------------------------------------------------------+
85+
86+
bool Adafruit_USBH_CDC::setDtrRts(bool dtr, bool rts, tuh_xfer_cb_t complete_cb,
87+
uintptr_t user_data) {
88+
if (!tuh_cdc_mounted(_idx)) {
89+
return false;
90+
}
91+
92+
uint16_t const line_state = (dtr ? CDC_CONTROL_LINE_STATE_DTR : 0) |
93+
(rts ? CDC_CONTROL_LINE_STATE_RTS : 0);
94+
95+
return tuh_cdc_set_control_line_state(_idx, line_state, complete_cb,
96+
user_data);
5797
}
5898

59-
bool Adafruit_USBH_CDC::mounted(void) {
60-
return (_idx != TUSB_INDEX_INVALID_8) && tuh_cdc_mounted(_idx);
99+
bool Adafruit_USBH_CDC::setBaudrate(uint32_t baudrate,
100+
tuh_xfer_cb_t complete_cb,
101+
uintptr_t user_data) {
102+
if (!tuh_cdc_mounted(_idx)) {
103+
return false;
104+
}
105+
106+
return tuh_cdc_set_baudrate(_idx, baudrate, complete_cb, user_data);
61107
}
62108

109+
//--------------------------------------------------------------------+
110+
// Stream API
111+
//--------------------------------------------------------------------+
112+
63113
int Adafruit_USBH_CDC::available(void) {
64114
return (int)tuh_cdc_read_available(_idx);
65115
}

src/arduino/cdc/Adafruit_USBH_CDC.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ class Adafruit_USBH_CDC : public HardwareSerial {
3838
void begin(unsigned long baudrate);
3939
void begin(unsigned long baudrate, uint16_t config);
4040

41+
bool mount(uint8_t idx);
42+
void umount(uint8_t idx);
43+
4144
// unbind cdc interface
4245
void end(void);
4346

@@ -48,6 +51,15 @@ class Adafruit_USBH_CDC : public HardwareSerial {
4851
// if cdc's DTR is asserted
4952
bool connected(void);
5053

54+
// Line encoding
55+
uint32_t baud();
56+
57+
//------------- Control API -------------//
58+
bool setDtrRts(bool dtr, bool rts, tuh_xfer_cb_t complete_cb = NULL,
59+
uintptr_t user_data = 0);
60+
bool setBaudrate(uint32_t baudrate, tuh_xfer_cb_t complete_cb = NULL,
61+
uintptr_t user_data = 0);
62+
5163
//------------- Stream API -------------//
5264
virtual int available(void);
5365
virtual int peek(void);

0 commit comments

Comments
 (0)