diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-12-05 21:22:34 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-12-24 11:42:19 -0500 |
commit | b84ecebf8f005175549297f1a818cf65822c3106 (patch) | |
tree | ce23fd9d131a07656775ea543dfe5b9af395b652 /src/generic/usb_cdc.c | |
parent | c6065e29a6f652e6673d790f1200cd8bf0817673 (diff) | |
download | kutter-b84ecebf8f005175549297f1a818cf65822c3106.tar.gz kutter-b84ecebf8f005175549297f1a818cf65822c3106.tar.xz kutter-b84ecebf8f005175549297f1a818cf65822c3106.zip |
usb_cdc: Add support for detecting a USB level Arduino bootloader request
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/generic/usb_cdc.c')
-rw-r--r-- | src/generic/usb_cdc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/generic/usb_cdc.c b/src/generic/usb_cdc.c index 7f6b2f34..d395a3c0 100644 --- a/src/generic/usb_cdc.c +++ b/src/generic/usb_cdc.c @@ -402,6 +402,15 @@ usb_req_set_configuration(struct usb_ctrlrequest *req) } static struct usb_cdc_line_coding line_coding; +static uint8_t line_control_state; + +static void +check_reboot(void) +{ + if (line_coding.dwDTERate == 1200 && !(line_control_state & 0x01)) + // A baud of 1200 is an Arduino style request to enter the bootloader + usb_request_bootloader(); +} static void usb_req_set_line_coding(struct usb_ctrlrequest *req) @@ -412,6 +421,7 @@ usb_req_set_line_coding(struct usb_ctrlrequest *req) return; } usb_do_xfer(&line_coding, sizeof(line_coding), UX_READ); + check_reboot(); } static void @@ -432,7 +442,9 @@ usb_req_set_line(struct usb_ctrlrequest *req) usb_do_stall(); return; } + line_control_state = req->wValue; usb_do_xfer(NULL, 0, UX_SEND); + check_reboot(); } static void |