diff options
| -rw-r--r-- | watch-library/hardware/watch/watch_private.c | 21 | ||||
| -rw-r--r-- | watch-library/shared/watch/watch.h | 8 | ||||
| -rw-r--r-- | watch-library/shared/watch/watch_private.h | 5 | 
3 files changed, 30 insertions, 4 deletions
| diff --git a/watch-library/hardware/watch/watch_private.c b/watch-library/hardware/watch/watch_private.c index e4a03926..a0525d3c 100644 --- a/watch-library/hardware/watch/watch_private.c +++ b/watch-library/hardware/watch/watch_private.c @@ -255,8 +255,15 @@ int _write(int file, char *ptr, int len) {      return 0;  } -// this method could be overridden to read stuff from the USB console? but no need rn. -int _read(void) { +char buf[256] = {0}; + +int _read(int file, char *ptr, int len) { +    (void)file; +    int actual_length = strlen(buf); +    if (actual_length) { +        memcpy(ptr, buf, min(len, actual_length)); +        return actual_length; +    }      return 0;  } @@ -264,8 +271,18 @@ void USB_Handler(void) {      tud_int_handler(0);  } +static void cdc_task(void) { +    if (tud_cdc_n_available(0)) { +        tud_cdc_n_read(0, buf, sizeof(buf)); +    } else { +        memset(buf, 0, 64); +        // buf[0] = 0; +    } +} +  void TC0_Handler(void) {      tud_task(); +    cdc_task();      TC0->COUNT8.INTFLAG.reg |= TC_INTFLAG_OVF;  } diff --git a/watch-library/shared/watch/watch.h b/watch-library/shared/watch/watch.h index 1dd8e7f7..b307feca 100644 --- a/watch-library/shared/watch/watch.h +++ b/watch-library/shared/watch/watch.h @@ -76,4 +76,12 @@    */  bool watch_is_buzzer_or_led_enabled(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 +  * @param len the number of bytes you wish to read, max 256. +  * @return The number of bytes read, or zero if no bytes were read. +  */ +int read(int file, char *ptr, int len); +  #endif /* WATCH_H_ */
\ No newline at end of file diff --git a/watch-library/shared/watch/watch_private.h b/watch-library/shared/watch/watch_private.h index 7bb91d1f..9d55bc21 100644 --- a/watch-library/shared/watch/watch_private.h +++ b/watch-library/shared/watch/watch_private.h @@ -44,7 +44,8 @@ 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); -// this method could be overridden to read stuff from the USB console? but no need rn. -int _read(void); +// 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 | 
