@@ -64,13 +64,47 @@ void tud_cdc_rx_cb(uint8_t itf)
64
64
}
65
65
}
66
66
67
+
68
+ static size_t tinyusb_cdc_write (uint8_t itf, const uint8_t *buffer, size_t size){
69
+ if (itf >= MAX_USB_CDC_DEVICES){
70
+ return 0 ;
71
+ }
72
+ if (!tud_cdc_n_connected (itf)){
73
+ return 0 ;
74
+ }
75
+ size_t tosend = size, sofar = 0 ;
76
+ while (tosend){
77
+ uint32_t space = tud_cdc_n_write_available (itf);
78
+ if (!space){
79
+ delay (1 );
80
+ continue ;
81
+ }
82
+ if (tosend < space){
83
+ space = tosend;
84
+ }
85
+ uint32_t sent = tud_cdc_n_write (itf, buffer + sofar, space);
86
+ if (!sent){
87
+ return sofar;
88
+ }
89
+ sofar += sent;
90
+ tosend -= sent;
91
+ tud_cdc_n_write_flush (itf);
92
+ }
93
+ return sofar;
94
+ }
95
+
96
+ static void ARDUINO_ISR_ATTR cdc0_write_char (char c)
97
+ {
98
+ tinyusb_cdc_write (0 , (const uint8_t *)&c, 1 );
99
+ }
100
+
67
101
// void tud_cdc_rx_wanted_cb(uint8_t itf, char wanted_char);
68
102
69
103
static void usb_unplugged_cb (void * arg, esp_event_base_t event_base, int32_t event_id, void * event_data){
70
104
((USBCDC*)arg)->_onUnplugged ();
71
105
}
72
106
73
- USBCDC::USBCDC (uint8_t itfn) : itf(itfn), bit_rate(0 ), stop_bits(0 ), parity(0 ), data_bits(0 ), dtr(false ), rts(false ), connected(usb_persist_this_boot() ), reboot_enable(true ), rx_queue(NULL ) {
107
+ USBCDC::USBCDC (uint8_t itfn) : itf(itfn), bit_rate(0 ), stop_bits(0 ), parity(0 ), data_bits(0 ), dtr(false ), rts(false ), connected(false ), reboot_enable(true ), rx_queue(NULL ) {
74
108
tinyusb_enable_interface (USB_INTERFACE_CDC, TUD_CDC_DESC_LEN, load_cdc_descriptor);
75
109
if (itf < MAX_USB_CDC_DEVICES){
76
110
devices[itf] = this ;
@@ -94,15 +128,6 @@ void USBCDC::begin(size_t rx_queue_len)
94
128
if (!rx_queue){
95
129
return ;
96
130
}
97
- if (connected){
98
- arduino_usb_cdc_event_data_t p = {0 };
99
- arduino_usb_event_post (ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_CONNECTED_EVENT, &p, sizeof (arduino_usb_cdc_event_data_t ), portMAX_DELAY);
100
-
101
- arduino_usb_cdc_event_data_t l = {0 };
102
- l.line_state .dtr = true ;
103
- l.line_state .rts = true ;
104
- arduino_usb_event_post (ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_LINE_STATE_EVENT, &l, sizeof (arduino_usb_cdc_event_data_t ), portMAX_DELAY);
105
- }
106
131
}
107
132
108
133
void USBCDC::end ()
@@ -167,8 +192,6 @@ void USBCDC::_onLineState(bool _dtr, bool _rts){
167
192
l.line_state .dtr = dtr;
168
193
l.line_state .rts = rts;
169
194
arduino_usb_event_post (ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_LINE_STATE_EVENT, &l, sizeof (arduino_usb_cdc_event_data_t ), portMAX_DELAY);
170
- } else {
171
- log_d (" CDC RESET: itf: %u, dtr: %u, rts: %u, state: %u" , itf, dtr, rts, lineState);
172
195
}
173
196
174
197
}
@@ -193,7 +216,6 @@ void USBCDC::_onRX(){
193
216
uint32_t count = tud_cdc_n_read (itf, buf, CONFIG_USB_CDC_RX_BUFSIZE);
194
217
for (uint32_t i=0 ; i<count; i++){
195
218
if (rx_queue == NULL || !xQueueSend (rx_queue, buf+i, 0 )){
196
- log_e (" read failed" );
197
219
return ;
198
220
}
199
221
}
@@ -271,29 +293,7 @@ int USBCDC::availableForWrite(void)
271
293
}
272
294
273
295
size_t USBCDC::write (const uint8_t *buffer, size_t size){
274
- if (itf >= MAX_USB_CDC_DEVICES){
275
- return 0 ;
276
- }
277
- size_t tosend = size, sofar = 0 ;
278
- while (tosend){
279
- uint32_t space = tud_cdc_n_write_available (itf);
280
- if (!space){
281
- delay (1 );
282
- continue ;
283
- }
284
- if (tosend < space){
285
- space = tosend;
286
- }
287
- uint32_t sent = tud_cdc_n_write (itf, buffer + sofar, space);
288
- if (!sent){
289
- log_e (" tud_cdc_n_write failed!" );
290
- return sofar;
291
- }
292
- sofar += sent;
293
- tosend -= sent;
294
- tud_cdc_n_write_flush (itf);
295
- }
296
- return sofar;
296
+ return tinyusb_cdc_write (itf, buffer, size);
297
297
}
298
298
299
299
size_t USBCDC::write (uint8_t c)
@@ -309,6 +309,15 @@ uint32_t USBCDC::baudRate()
309
309
return bit_rate;
310
310
}
311
311
312
+ void USBCDC::setDebugOutput (bool en)
313
+ {
314
+ if (en) {
315
+ ets_install_putc1 ((void (*)(char )) &cdc0_write_char);
316
+ } else {
317
+ ets_install_putc1 (NULL );
318
+ }
319
+ }
320
+
312
321
USBCDC::operator bool () const
313
322
{
314
323
if (itf >= MAX_USB_CDC_DEVICES){
0 commit comments