commit d7852700a5439a9521591dad7b3be6875c435668
parent 53e377cabdc3856c9b5fbf851b4b0e64bc8b5dde
Author: Daniel Barlow <dan@telent.net>
Date: Mon, 9 Jun 2025 10:21:58 +0100
rename smooth-course -> orientation
Diffstat:
| M | README | | | 106 | ++++++++++--------------------------------------------------------------------- |
| M | pkgs/maps/main.fnl | | | 14 | +++++++------- |
2 files changed, 20 insertions(+), 100 deletions(-)
diff --git a/README b/README
@@ -37,112 +37,32 @@ note that IPS LCD requires as much battery for dark pixels
as light ones, so we get no power saving by colouring only part
of the screen
-
------
-random notes follow ...
-
-
-
-https://git.syndicate-lang.org/tonyg/squeak-phone/raw/commit/474960ddc665ed445a1f5afb0164fe39057720f9/devices/pine64-pinephone/modem-docs/80545ST10798A_LM940_QMI_Command_Reference_Guide_r3.pdf
-
-
-
-1) [done] connect Satellite to qmi-nmea
-
-https://codeberg.org/tpikonen/satellite/src/branch/main/satellite/nmeasource.py#L106
-
-2) [nope] do we need modemmanager? might be required if we want lte data,
-but that's up to the "site admin" - we don't need it for biscuit itself
-
-3) we should make saturn give visual feedback while it's loading an
-app. How does it know when the app has finished loading? Maybe it
-could get told when its window is obscured
-
-4) rename Maps to soemthing that describes its role better. Cockpit?
-HUD? (but it's actually H Down D) Head Unit? Navigate? Dashboard? Cluster?
-Codriver? Satnav? Binnacle? Launch? Ride? Embark?
-
-5) [all done]
-Maps also needs to open the nmea port and parse data from it.
-5a) Maps needs to open a fake nmea source for testing
-5b) we need a generator of fake nmea data
+we need to not rotate the text labels
+which means we need to redraw whenever the angle changes
+which is much more often than when we cross a tile boundary
+so caching the bitmap isn't going to work
-6) Cockpit
-- show [done] speed and [done] direction
-- show speed limit
-- [done] scroll and [not done] rotate map
-- overlay planned route on map
-- show next turn
-- voice prompts
-- when off-course, calculate route to nearest point on course
-- fetch planned route from nominated url
-(don't want to type the url in, is there a better way to have it check in
-with a mothership?)
-- save trail (maybe this could be a separate task entirely)
-
-elapsed time: what should it actually show? moving time, I guess
-- moving time since when?
-
-should we rename bearing as course in nmea?
-
-perhaps we need a server-side component for route planning
-
-
-7) think about how to use nfc tags or something for profiles so that
-it can recognise when it's attached to bicycle or motorbike
-
-
-8) use OSM directly?
-
-we can't rotate the map using OsmGpsMap widget because the labels will
-be sideways or upside down, so we need something with vectors that we
-can rotate
-
-[done] a) we can get data from overpass api as json
-
-[done badly] b) we would like to cache the results, which means some kind of
-chunking or tiling so that the json for position a is the same as the
-json for position b.
+put map features in a table in app-state keyed on tile key
+use the fetch on-complete callback to update app-state directly.
+side issue: we could move widget updates from update-app-state
+ to the timer
+
-c) at coarser zoom levels, we need to query for fewer objects: either
-do it by hand -
-- houses
-- minor roads
-- major roads
-or do something smart but complicated like "only return ways that
-cover more than 1/16th the length of the tile"
-d) render ways according to their type (road/cycleway/path/etc)
-e) label the ways
+maybe we could put the polylines in app-state. if we store
-f) async tile fetching
+------
-we don't want everything to stop when it's time to fetch a new
-row of tiles, what are our options? lua-http is built on cqueues
-which is async enough to make my head hurt, but we also need
-to make it coexist with the gtk event loop
+random notes follow ...
-assumptions:
-1) gtk stuff has to happen in the main thread (whatever that is...)
-so we can't control it from cqueues because that has its own
-threading stuff
-2) there will be lots of fds from lua-http, do we really want the
-housekeeping of making GLib.io_add_watch for each of them? it looks
-like adding a glib source from lgi is not currently practical
-https://github.com/lgi-devs/lgi/issues/111
-3) if we put http calls inside cq:wrap, that make them background
-provided that we call (cq:step 0)
-periodically. we could do that in a glib idle function, perhaps.
-- The tile fetcher would need to know where to write the data when
- eventually it comes back
-- need some say to not fetch the same tile 18 times if there's more than
- one request for it while a previous request is in progress
+https://git.syndicate-lang.org/tonyg/squeak-phone/raw/commit/474960ddc665ed445a1f5afb0164fe39057720f9/devices/pine64-pinephone/modem-docs/80545ST10798A_LM940_QMI_Command_Reference_Guide_r3.pdf
----
diff --git a/pkgs/maps/main.fnl b/pkgs/maps/main.fnl
@@ -65,8 +65,8 @@ label.readout {
:lat 49
:lon 0
:zoom 17
- :course 0
- :smooth-course 0
+ :course 0 ; direction of travel
+ :orientation 0 ; map rotation angle from north
}
)
@@ -261,7 +261,7 @@ label.readout {
(draw-onto-map-surface bounds app-state.zoom)))))
(g:translate (+ (/ viewport-width 2)) (+ (/ viewport-height 2)))
- (g:rotate (* (/ (- 360 app-state.smooth-course) 180) math.pi))
+ (g:rotate (* (/ (- 360 app-state.orientation) 180) math.pi))
(g:translate (- (/ viewport-width 2)) (- (/ viewport-height 2)))
(g:set_source_surface map-surface (- offset-x) (- offset-y))
@@ -313,9 +313,9 @@ label.readout {
(not (= old-bounds.min.x bounds.min.x))
(not (= old-bounds.min.y bounds.min.y)))
(set map-surface nil)))
- (set app-state.smooth-course
- (+ app-state.smooth-course
- (* 0.05 (- app-state.course app-state.smooth-course))))
+ (set app-state.orientation
+ (+ app-state.orientation
+ (* 0.05 (- app-state.course app-state.orientation))))
(each [name widget (pairs state-widgets)]
(case name
:speed (widget:set_label
@@ -350,7 +350,7 @@ label.readout {
(fn [self g]
(g:set_source_rgb 0.4 0.0 0.1)
(g:translate (// height 2) (// height 2))
- (g:rotate (* (/ (- app-state.course app-state.smooth-course)
+ (g:rotate (* (/ (- app-state.course app-state.orientation)
180) math.pi))
(g:translate (// height -2) (// height -2))
(g:set_line_width 4)