diff --git a/ChibiOS b/ChibiOS index ade76de..0cfe7f5 160000 --- a/ChibiOS +++ b/ChibiOS @@ -1 +1 @@ -Subproject commit ade76dea89cd093650552328e881252a06486094 +Subproject commit 0cfe7f528599d634c7e77b27984b24b9ad0c4d4c diff --git a/halconf.h b/halconf.h index 5ea5b6e..e8d80b9 100644 --- a/halconf.h +++ b/halconf.h @@ -302,11 +302,14 @@ * @brief Serial buffers size. * @details Configuration parameter, you can change the depth of the queue * buffers depending on the requirements of your application. - * @note The default is 64 bytes for both the transmission and receive + * @note The default is 16 bytes for both the transmission and receive * buffers. */ -#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) -#define SERIAL_BUFFERS_SIZE 64 +#if !defined(SERIAL_RX_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_RX_BUFFERS_SIZE 16 +#endif +#if !defined(SERIAL_TX_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_TX_BUFFERS_SIZE 16 #endif /*===========================================================================*/ @@ -317,23 +320,25 @@ * @brief Serial over USB buffers size. * @details Configuration parameter, the buffer size must be a multiple of * the USB data endpoint maximum packet size. - * @note The default is 64 bytes for both the transmission and receive + * @note The default is 256 bytes for both the transmission and receive * buffers. */ -#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) -#ifdef TINYSA4 -#define SERIAL_USB_BUFFERS_SIZE 128 -#else -#define SERIAL_USB_BUFFERS_SIZE 128 +#if !defined(SERIAL_USB_RX_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_RX_BUFFERS_SIZE 256 #endif +#if !defined(SERIAL_USB_TX_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_TX_BUFFERS_SIZE 256 #endif /** * @brief Serial over USB number of buffers. * @note The default is 2 buffers. */ -#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__) -#define SERIAL_USB_BUFFERS_NUMBER 2 +#if !defined(SERIAL_USB_RX_BUFFERS_NUMBER) || defined(__DOXYGEN__) +#define SERIAL_USB_RX_BUFFERS_NUMBER 2 +#endif +#if !defined(SERIAL_USB_TX_BUFFERS_NUMBER) || defined(__DOXYGEN__) +#define SERIAL_USB_TX_BUFFERS_NUMBER 2 #endif /*===========================================================================*/ diff --git a/main.c b/main.c index 0f3948c..1ca930e 100644 --- a/main.c +++ b/main.c @@ -2708,6 +2708,7 @@ void shell_update_speed(void){ } void shell_reset_console(void){ + osalSysLock(); // I-class calls below, must run locked // Reset I/O queue over USB (for USB need also connect/disconnect) if (usb_IsActive()){ if (config._mode & _MODE_SERIAL) @@ -2720,7 +2721,8 @@ void shell_reset_console(void){ // iqResetI(&SD1.iqueue); qResetI(&SD1.oqueue); qResetI(&SD1.iqueue); - + osalOsRescheduleS(); + osalSysUnlock(); } @@ -2901,7 +2903,12 @@ static void VNAShell_executeLine(char *line) int timeout_count = 0; msg_t result; do { - result = osalThreadEnqueueTimeoutS(&shell_thread, MS2ST(5000)); // 5 second timeout + chSysLock(); // S-class call, must run locked + if (shell_function) + result = osalThreadEnqueueTimeoutS(&shell_thread, MS2ST(5000)); // 5 second timeout + else + result = MSG_OK; + chSysUnlock(); if (result == MSG_TIMEOUT) { timeout_count++; if (timeout_count > 3) { diff --git a/ui.c b/ui.c index 643472e..6ca1266 100644 --- a/ui.c +++ b/ui.c @@ -269,13 +269,13 @@ static int btn_wait_release(void) } if (dt > BUTTON_DOWN_LONG_TICKS && - ticks > last_button_repeat_ticks) { + ticks - last_button_repeat_ticks > BUTTON_REPEAT_TICKS) { // elapsed time, wrap safe int status = 0; if (cur_button & (1<