diff options
| -rw-r--r-- | movement/movement.c | 30 | ||||
| -rw-r--r-- | watch-library/hardware/watch/watch.c | 4 | ||||
| -rw-r--r-- | watch-library/shared/watch/watch.h | 4 | ||||
| -rw-r--r-- | watch-library/simulator/shell.html | 9 | ||||
| -rw-r--r-- | watch-library/simulator/watch/watch.c | 4 | 
5 files changed, 51 insertions, 0 deletions
| diff --git a/movement/movement.c b/movement/movement.c index 4a5bc04e..72c087e9 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -25,7 +25,11 @@  #include <stdio.h>  #include <string.h>  #include <limits.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h>  #include "watch.h" +#include "filesystem.h"  #include "movement.h"  #ifndef MOVEMENT_FIRMWARE @@ -423,6 +427,32 @@ bool app_loop(void) {          }      } +    // if we are plugged into USB, handle the file browser tasks +    if (watch_is_usb_enabled()) { +        char line[256] = {0}; +#if __EMSCRIPTEN__ +        // This is a terrible hack; ideally this should be handled deeper in the watch library. +        // Alas, emscripten treats read() as something that should pop up an input box, so I +        // wasn't able to implement this over there. I sense that this relates to read() being +        // the wrong way to read data from USB (like we should be using fgets or something), but +        // until I untangle that, this will have to do. +        char *received_data = (char*)EM_ASM_INT({ +            var len = lengthBytesUTF8(tx) + 1; +            var s = _malloc(len); +            stringToUTF8(tx, s, len); +            return s; +        }); +        memcpy(line, received_data, min(255, strlen(received_data))); +        free(received_data); +        EM_ASM({ +            tx = ""; +        }); +#else +        read(0, line, 256); +#endif +        if (strlen(line)) printf(line); +    } +      event.subsecond = 0;      return can_sleep && (movement_state.light_ticks == -1) && !movement_state.is_buzzing; diff --git a/watch-library/hardware/watch/watch.c b/watch-library/hardware/watch/watch.c index 32bbccbb..b3dc4e8d 100644 --- a/watch-library/hardware/watch/watch.c +++ b/watch-library/hardware/watch/watch.c @@ -41,3 +41,7 @@ void SYSTEM_Handler(void) {  bool watch_is_buzzer_or_led_enabled(void){      return hri_mclk_get_APBCMASK_TCC0_bit(MCLK);  } + +bool watch_is_usb_enabled(void) { +    return USB->DEVICE.CTRLA.bit.ENABLE; +} diff --git a/watch-library/shared/watch/watch.h b/watch-library/shared/watch/watch.h index b307feca..b94d36fb 100644 --- a/watch-library/shared/watch/watch.h +++ b/watch-library/shared/watch/watch.h @@ -76,6 +76,10 @@    */  bool watch_is_buzzer_or_led_enabled(void); +/** @brief Returns true if USB is enabled. +  */ +bool watch_is_usb_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 diff --git a/watch-library/simulator/shell.html b/watch-library/simulator/shell.html index 2f560aba..80e1e2ea 100644 --- a/watch-library/simulator/shell.html +++ b/watch-library/simulator/shell.html @@ -323,6 +323,9 @@  <button onclick="getLocation()">Set location register (will prompt for access)</button>  <br> +<input id="input" style="width: 500px"></input> +<button id="submit" onclick="sendText()">Send</button> +<br>  <textarea id="output" rows="8" style="width: 100%"></textarea>  <script type='text/javascript'> @@ -365,10 +368,16 @@    };    lat = 0;    lon = 0; +  tx = "";    function updateLocation(location) {      lat = Math.round(location.coords.latitude * 100);      lon = Math.round(location.coords.longitude * 100);    } +  function sendText() { +    var inputElement = document.getElementById('input'); +    tx = inputElement.value + "\n"; +    inputElement.value = ""; +  }    function showError(error) {      switch(error.code) {        case error.PERMISSION_DENIED: diff --git a/watch-library/simulator/watch/watch.c b/watch-library/simulator/watch/watch.c index 1c965aad..749651af 100644 --- a/watch-library/simulator/watch/watch.c +++ b/watch-library/simulator/watch/watch.c @@ -3,3 +3,7 @@  bool watch_is_buzzer_or_led_enabled(void) {      return false;  } + +bool watch_is_usb_enabled(void) { +    return true; +} | 
