| 234 | |
| 235 | #ifdef HAS_USB |
| 236 | static void usbEventCallback(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { |
| 237 | if (event_base == ARDUINO_USB_EVENTS) { |
| 238 | arduino_usb_event_data_t* data = (arduino_usb_event_data_t*)event_data; |
| 239 | switch (event_id) { |
| 240 | case ARDUINO_USB_STARTED_EVENT: |
| 241 | Serial.println("USB PLUGGED"); |
| 242 | resetFlasherState(); |
| 243 | break; |
| 244 | case ARDUINO_USB_STOPPED_EVENT: |
| 245 | Serial.println("USB UNPLUGGED"); |
| 246 | resetFlasherState(); |
| 247 | break; |
| 248 | case ARDUINO_USB_SUSPEND_EVENT: |
| 249 | Serial.printf("USB SUSPENDED: remote_wakeup_en: %u\r\n", data->suspend.remote_wakeup_en); |
| 250 | break; |
| 251 | case ARDUINO_USB_RESUME_EVENT: |
| 252 | Serial.println("USB RESUMED"); |
| 253 | break; |
| 254 | default: |
| 255 | ets_printf("other USB event %d\n", event_id); |
| 256 | break; |
| 257 | } |
| 258 | } else if (event_base == ARDUINO_USB_CDC_EVENTS) { |
| 259 | arduino_usb_cdc_event_data_t* data = (arduino_usb_cdc_event_data_t*)event_data; |
| 260 | switch (event_id) { |
| 261 | case ARDUINO_USB_CDC_CONNECTED_EVENT: |
| 262 | ets_printf("CDC CONNECTED\n"); |
| 263 | resetFlasherState(); |
| 264 | usbConnectedStartTime = millis(); |
| 265 | break; |
| 266 | case ARDUINO_USB_CDC_DISCONNECTED_EVENT: |
| 267 | ets_printf("CDC DISCONNECTED\n"); |
| 268 | resetFlasherState(); |
| 269 | break; |
| 270 | case ARDUINO_USB_CDC_LINE_STATE_EVENT: |
| 271 | ets_printf("CDC LINE STATE: dtr: %u, rts: %u\n", data->line_state.dtr, data->line_state.rts); |
| 272 | if (data->line_state.dtr == 0) resetFlasherState(); |
| 273 | break; |
| 274 | case ARDUINO_USB_CDC_LINE_CODING_EVENT: |
| 275 | ets_printf("CDC LINE CODING: bit_rate: %u, data_bits: %u, stop_bits: %u, parity: %u\n", data->line_coding.bit_rate, data->line_coding.data_bits, data->line_coding.stop_bits, data->line_coding.parity); |
| 276 | resetFlasherState(); |
| 277 | break; |
| 278 | case ARDUINO_USB_CDC_RX_EVENT: |
| 279 | // Serial.printf("CDC RX [%u]:", data->rx.len); |
| 280 | { |
| 281 | uint8_t buf[data->rx.len]; |
| 282 | size_t len = cmdSerial.read(buf, data->rx.len); |
| 283 | if (serialPassthroughState) { |
| 284 | Serial2.write(buf, len); |
| 285 | } else { |
| 286 | flasherDataHandler(buf, len, TRANSPORT_USB); |
| 287 | } |
| 288 | } |
| 289 | break; |
| 290 | case ARDUINO_USB_CDC_RX_OVERFLOW_EVENT: |
| 291 | Serial.printf("CDC RX Overflow of %d bytes", data->rx_overflow.dropped_bytes); |
| 292 | break; |
| 293 |
nothing calls this directly
no test coverage detected