Merge pull request #3437 from jepler/serial-connected-fix
supervisor: Improve serial connection detection
This commit is contained in:
commit
749cbe19ab
|
@ -46,13 +46,7 @@
|
|||
//|
|
||||
|
||||
//| serial_connected: bool
|
||||
//| """Returns the USB serial communication status (read-only).
|
||||
//|
|
||||
//| .. note::
|
||||
//|
|
||||
//| SAMD: Will return ``True`` if the USB serial connection
|
||||
//| has been established at any point. Will not reset if
|
||||
//| USB is disconnected but power remains (e.g. battery connected)"""
|
||||
//| """Returns the USB serial communication status (read-only)."""
|
||||
//|
|
||||
|
||||
STATIC mp_obj_t supervisor_get_serial_connected(mp_obj_t self){
|
||||
|
|
|
@ -47,4 +47,5 @@ char serial_read(void);
|
|||
bool serial_bytes_available(void);
|
||||
bool serial_connected(void);
|
||||
|
||||
extern volatile bool _serial_connected;
|
||||
#endif // MICROPY_INCLUDED_SUPERVISOR_SERIAL_H
|
||||
|
|
|
@ -47,6 +47,8 @@ busio_uart_obj_t debug_uart;
|
|||
byte buf_array[64];
|
||||
#endif
|
||||
|
||||
volatile bool _serial_connected;
|
||||
|
||||
void serial_early_init(void) {
|
||||
#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
|
||||
debug_uart.base.type = &busio_uart_type;
|
||||
|
@ -69,7 +71,7 @@ bool serial_connected(void) {
|
|||
#if defined(DEBUG_UART_TX) && defined(DEBUG_UART_RX)
|
||||
return true;
|
||||
#else
|
||||
return tud_cdc_connected();
|
||||
return _serial_connected;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "shared-module/usb_midi/__init__.h"
|
||||
#include "supervisor/background_callback.h"
|
||||
#include "supervisor/port.h"
|
||||
#include "supervisor/serial.h"
|
||||
#include "supervisor/usb.h"
|
||||
#include "lib/utils/interrupt_char.h"
|
||||
#include "lib/mp-readline/readline.h"
|
||||
|
@ -115,6 +116,7 @@ void tud_umount_cb(void) {
|
|||
// remote_wakeup_en : if host allows us to perform remote wakeup
|
||||
// USB Specs: Within 7ms, device must draw an average current less than 2.5 mA from bus
|
||||
void tud_suspend_cb(bool remote_wakeup_en) {
|
||||
_serial_connected = false;
|
||||
}
|
||||
|
||||
// Invoked when usb bus is resumed
|
||||
|
@ -126,6 +128,8 @@ void tud_resume_cb(void) {
|
|||
void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) {
|
||||
(void) itf; // interface ID, not used
|
||||
|
||||
_serial_connected = dtr;
|
||||
|
||||
// DTR = false is counted as disconnected
|
||||
if ( !dtr )
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue