Merge pull request #199 from g-oikonomou/cc253x-cdc-acm-line-state-fix
Improve handling of CDC ACM line state
This commit is contained in:
commit
c99b62f628
@ -201,21 +201,9 @@ do_work(void)
|
||||
if(events & USB_CDC_ACM_LINE_STATE) {
|
||||
uint8_t line_state = usb_cdc_acm_get_line_state();
|
||||
PRINTF("CDC-ACM event 0x%04x, Line State = %u\n", events, line_state);
|
||||
if(line_state == 0) {
|
||||
/* CDC-ACM line went down. Stop streaming */
|
||||
enabled = 0;
|
||||
} else if(line_state == (USB_CDC_ACM_DTE | USB_CDC_ACM_RTS)) {
|
||||
if(line_state & USB_CDC_ACM_DTE) {
|
||||
enabled = 1;
|
||||
} else {
|
||||
/*
|
||||
* During tests on Ubuntu and OS X, line_state never stays == 2
|
||||
* (USB_CDC_ACM_RTS) for too long. We always see this value when the
|
||||
* line is in the process of going up or coming down. If it is going
|
||||
* up, value 3 will enable us shortly. Otherwise, we may as well
|
||||
* disable already.
|
||||
*
|
||||
* All other values: disable
|
||||
*/
|
||||
enabled = 0;
|
||||
}
|
||||
}
|
||||
|
@ -170,6 +170,16 @@ do_work(void)
|
||||
enabled = 0;
|
||||
}
|
||||
|
||||
events = usb_cdc_acm_get_events();
|
||||
if(events & USB_CDC_ACM_LINE_STATE) {
|
||||
uint8_t line_state = usb_cdc_acm_get_line_state();
|
||||
if(line_state & USB_CDC_ACM_DTE) {
|
||||
enabled = 1;
|
||||
} else {
|
||||
enabled = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(!enabled) {
|
||||
return;
|
||||
}
|
||||
@ -254,6 +264,7 @@ PROCESS_THREAD(usb_serial_process, ev, data)
|
||||
usb_setup();
|
||||
usb_cdc_acm_setup();
|
||||
usb_set_global_event_process(&usb_serial_process);
|
||||
usb_cdc_acm_set_event_process(&usb_serial_process);
|
||||
usb_set_ep_event_process(EPIN, &usb_serial_process);
|
||||
usb_set_ep_event_process(EPOUT, &usb_serial_process);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user