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) {
|
if(events & USB_CDC_ACM_LINE_STATE) {
|
||||||
uint8_t line_state = usb_cdc_acm_get_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);
|
PRINTF("CDC-ACM event 0x%04x, Line State = %u\n", events, line_state);
|
||||||
if(line_state == 0) {
|
if(line_state & USB_CDC_ACM_DTE) {
|
||||||
/* CDC-ACM line went down. Stop streaming */
|
|
||||||
enabled = 0;
|
|
||||||
} else if(line_state == (USB_CDC_ACM_DTE | USB_CDC_ACM_RTS)) {
|
|
||||||
enabled = 1;
|
enabled = 1;
|
||||||
} else {
|
} 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;
|
enabled = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,6 +170,16 @@ do_work(void)
|
|||||||
enabled = 0;
|
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) {
|
if(!enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -254,6 +264,7 @@ PROCESS_THREAD(usb_serial_process, ev, data)
|
|||||||
usb_setup();
|
usb_setup();
|
||||||
usb_cdc_acm_setup();
|
usb_cdc_acm_setup();
|
||||||
usb_set_global_event_process(&usb_serial_process);
|
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(EPIN, &usb_serial_process);
|
||||||
usb_set_ep_event_process(EPOUT, &usb_serial_process);
|
usb_set_ep_event_process(EPOUT, &usb_serial_process);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user