]> git.earman.xyz Git - sensor-watch.git/commitdiff
simulator: add geolocation support
authorJoey Castillo <joeycastillo@utexas.edu>
Wed, 9 Feb 2022 18:40:29 +0000 (13:40 -0500)
committerJoey Castillo <joeycastillo@utexas.edu>
Wed, 9 Feb 2022 18:40:29 +0000 (13:40 -0500)
movement/watch_faces/complication/sunrise_sunset_face.c
watch-library/simulator/shell.html

index 1e6f342555bb440059c254788051c8795a0add76..fef9b4dfecb6487e7fce0ec731e2c62dc37dbb8c 100644 (file)
 #include "watch_utility.h"
 #include "sunriset.h"
 
+#if __EMSCRIPTEN__
+#include <emscripten.h>
+#endif
+
 static void _sunrise_sunset_set_expiration(sunrise_sunset_state_t *state, watch_date_time next_rise_set) {
     uint32_t timestamp = watch_utility_date_time_to_unix_time(next_rise_set, 0);
     state->rise_set_expires = watch_utility_date_time_from_unix_time(timestamp + 60, 0);
@@ -279,6 +283,23 @@ void sunrise_sunset_face_setup(movement_settings_t *settings, uint8_t watch_face
 void sunrise_sunset_face_activate(movement_settings_t *settings, void *context) {
     (void) settings;
     if (watch_tick_animation_is_running()) watch_stop_tick_animation();
+
+#if __EMSCRIPTEN__
+    int16_t browser_lat = EM_ASM_INT({
+        return lat;
+    });
+    int16_t browser_lon = EM_ASM_INT({
+        return lon;
+    });
+    if ((watch_get_backup_data(1) == 0) && (browser_lat || browser_lon)) {
+        movement_location_t browser_loc;
+        browser_loc.bit.latitude = browser_lat;
+        browser_loc.bit.longitude = browser_lon;
+        watch_store_backup_data(browser_loc.reg, 1);
+    }
+#endif
+
+
     sunrise_sunset_state_t *state = (sunrise_sunset_state_t *)context;
     movement_location_t movement_location = (movement_location_t) watch_get_backup_data(1);
     state->working_latitude = _sunrise_sunset_face_struct_from_latlon(movement_location.bit.latitude);
index 1a4de984705a0fb6b1349091313d70962ca3fd32..2f560abad30fdfeb5aaac2463630409e4e65be36 100644 (file)
   <p style="text-align: center;"><a href="https://github.com/alexisphilip/Casio-F-91W">Original F-91W SVG</a> is &copy; 2020 Alexis Philip, and is used here under the terms of the MIT license.</p>
 </div>
 
+<button onclick="getLocation()">Set location register (will prompt for access)</button>
+<br>
 <textarea id="output" rows="8" style="width: 100%"></textarea>
 
 <script type='text/javascript'>
       if (text) Module.printErr('[post-exception status] ' + text);
     };
   };
+  lat = 0;
+  lon = 0;
+  function updateLocation(location) {
+    lat = Math.round(location.coords.latitude * 100);
+    lon = Math.round(location.coords.longitude * 100);
+  }
+  function showError(error) {
+    switch(error.code) {
+      case error.PERMISSION_DENIED:
+        alert("Permission denied");
+        break;
+      case error.POSITION_UNAVAILABLE:
+        alert("Location unavailable");
+        break;
+      case error.TIMEOUT:
+        alert("Request timed out");
+        break;
+      case error.UNKNOWN_ERROR:
+        alert("Unknown error");
+        break;
+    }
+  }
+  function getLocation() {
+    if (navigator.geolocation) {
+      navigator.geolocation.getCurrentPosition(updateLocation, showError);
+    }
+  }
 </script>
 {{{ SCRIPT }}}
 </body>