USB Improvements
* Introduce shell module for basic serial shell with argument parsing * Introduce shell_cmd_list module for basic compile-time command registration * Harden USB handling to hang less and drop fewer inputs - Service tud_task() with periodic TC0 timer interrupt - Service cdc_task() with periodic TC1 timer interrupt - Handle shell servicing in main app loop - Add a circular buffering layer for reads/writes * Change newline prints to also send carriage return * Refactor filesystem commands for shell subsystem * Introduce new shell commands: - 'help' command - 'flash' command to reset into bootloader - 'stress' command to stress CDC writes Testing: * Shell validated on Sensor Watch Blue w/ Linux host * Shell validated in emscripten emulator * Tuned by spamming inputs during `stress` cmd until stack didn't crash
This commit is contained in:
@@ -88,6 +88,10 @@ bool watch_is_usb_enabled(void);
|
||||
*/
|
||||
void watch_reset_to_bootloader(void);
|
||||
|
||||
/** @brief Call periodically from app main loop to service CDC RX/TX.
|
||||
*/
|
||||
void cdc_task(void);
|
||||
|
||||
/** @brief Reads up to len bytes from the USB serial.
|
||||
* @param file ignored, you can pass in 0
|
||||
* @param ptr pointer to a buffer of at least len bytes
|
||||
@@ -96,4 +100,4 @@ void watch_reset_to_bootloader(void);
|
||||
*/
|
||||
int read(int file, char *ptr, int len);
|
||||
|
||||
#endif /* WATCH_H_ */
|
||||
#endif /* WATCH_H_ */
|
||||
|
||||
@@ -38,14 +38,19 @@ void _watch_enable_tcc(void);
|
||||
/// Called by buzzer and LED teardown functions. You should not call this from your app.
|
||||
void _watch_disable_tcc(void);
|
||||
|
||||
/// Enable USB task timer. Called by USB enable routine in main(). You should not call this from your app.
|
||||
void _watch_enable_tc0(void);
|
||||
|
||||
/// Disable USB task timer. You should not call this from your app.
|
||||
void _watch_disable_tc0(void);
|
||||
|
||||
/// Enable CDC task timer. Called by USB enable routine in main(). You should not call this from your app.
|
||||
void _watch_enable_tc1(void);
|
||||
|
||||
/// Disable CDC task timer. You should not call this from your app.
|
||||
void _watch_disable_tc1(void);
|
||||
|
||||
/// Called by main.c if plugged in to USB. You should not call this from your app.
|
||||
void _watch_enable_usb(void);
|
||||
|
||||
// this function ends up getting called by printf to log stuff to the USB console.
|
||||
int _write(int file, char *ptr, int len);
|
||||
|
||||
// i thought this would be called by gets but it doesn't? anyway it does get called by read()
|
||||
// so that's our mechanism for reading data from the USB serial console.
|
||||
int _read(int file, char *ptr, int len);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user