From f29f84e61483d49b2295812a89a30bcdc479b650 Mon Sep 17 00:00:00 2001 From: "pls.153" Date: Sun, 17 Mar 2024 13:45:23 +0100 Subject: [PATCH] revisions --- examples/meshtastic/lisp/location.lisp | 56 +++++++++++++------------- examples/meshtastic/lisp/lora.lisp | 8 ++-- examples/meshtastic/lisp/package.lisp | 2 - 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/examples/meshtastic/lisp/location.lisp b/examples/meshtastic/lisp/location.lisp index 2a7a5d6..421c130 100644 --- a/examples/meshtastic/lisp/location.lisp +++ b/examples/meshtastic/lisp/location.lisp @@ -1,19 +1,18 @@ (in-package :loc) -(defvar *positions* nil) -(defvar *my-position* nil) +(defvar *positions* nil) +(defvar *manual-position* nil) +(defvar *gps-position* nil) (defparameter *default-position* (list :lat 41.89193 :lon 12.51133 :time 0) ; Rome "Position of map center for manual position selection (no GPS).") (defun ini () - (x:when-it (app:setting :share-location) - (q> |checked| ui:*share-location* t)) #+android (qt:ini-positioning qt:*cpp*) #+(or ios sfos) (q> |active| ui:*position-source* t) - (x:if-it (app:setting :selected-position) - (setf *my-position* x:it) - #+(or android ios sfos) (update-my-position))) + (x:when-it (app:setting :selected-position) + (setf *manual-position* x:it)) + #+(or android ios sfos) (update-my-position)) (defun latest-gps-position () (let* ((pos #+android (qrun* (qt:last-position qt:*cpp*)) ; 'qrun*': return value @@ -24,6 +23,7 @@ pos)) (defun share-my-location () ; see QML + "Share GPS position (ad hoc only)." (app:confirm-dialog (tr "Share my location now?") 'do-share-my-location) (values)) @@ -33,29 +33,29 @@ #+(or android ios sfos) (defun update-my-position (&optional (sec 60)) ; try for 1 min - "If no manual position is set, update position from GPS of mobile device." - (when (and (app:setting :share-location) - (not (app:setting :selected-position))) - (destructuring-bind (lat lon time) - (latest-gps-position) - (if (zerop lat) - (unless (zerop sec) - (qsingle-shot 1000 (lambda () (update-my-position (1- sec))))) - (let ((pos (list :lat lat :lon lon :time time))) - (setf *my-position* pos) - (qlog "position-updated: ~A" pos)))))) + "Store current position internally, without sharing it, so we have a base for + eventual manual position setting." + (destructuring-bind (lat lon time) + (latest-gps-position) + (if (zerop lat) + (unless (zerop sec) + (qsingle-shot 1000 (lambda () (update-my-position (1- sec))))) + (let ((pos (list :lat lat :lon lon :time time))) + (setf *gps-position* pos) + (qlog "position-updated: ~A" pos))))) (defun send-to-radio () (when (app:setting :share-location) (if lora:*config-complete* - (lora:send-position *my-position*) + (lora:send-position (or *manual-position* *gps-position*)) (qsingle-shot (* 15 1000) 'send-to-radio)))) (defun position* (node) (when node (x:when-it (or (getf *positions* node) (and (= node (lora:my-num)) - *my-position*)) + (or *manual-position* + *gps-position*))) (list (getf x:it :lat) (getf x:it :lon))))) @@ -67,14 +67,14 @@ (defun position-selected (lat lon) ; see QML (let ((pos (list :lat lat :lon lon :time 0))) - (setf *my-position* pos) - (app:change-setting :selected-position *my-position*) + (setf *manual-position* pos) + (app:change-setting :selected-position *manual-position*) (qlog "position-updated: ~A" pos)) (q> |visible| ui:*remove-marker* t) (values)) (defun remove-marker () ; see QML - (setf *my-position* nil) + (setf *manual-position* nil) (remf *positions* (lora:my-num)) (app:change-setting :selected-position nil) ;; update map @@ -134,7 +134,8 @@ (defun activate-map () (unless (q< |active| ui:*map-loader*) (q> |active| ui:*map-loader* t) - (set-map-center (or *my-position* + (set-map-center (or *manual-position* + *gps-position* (center-position) *default-position*)))) @@ -159,8 +160,8 @@ (values))) (defun add-manual-marker () ; see QML - (setf *my-position* (or (center-position) - *default-position*)) + (setf *manual-position* (or (center-position) + *default-position*)) ;; update map (qlater-sequence (show-map-clicked) ; remove @@ -169,7 +170,8 @@ (values)) (defun position-count () ; see QML - (set-position (lora:my-num) *my-position*) + (set-position (lora:my-num) + (or *manual-position* *gps-position*)) (/ (length *positions*) 2)) ; property list ;;; save/restore tiles diff --git a/examples/meshtastic/lisp/lora.lisp b/examples/meshtastic/lisp/lora.lisp index ae1399c..dde4fa6 100644 --- a/examples/meshtastic/lisp/lora.lisp +++ b/examples/meshtastic/lisp/lora.lisp @@ -188,9 +188,11 @@ (return (me:short-name (me:user info))))))) (defun name-to-node (name) - (dolist (info *node-infos*) - (when (string= name (me:short-name (me:user info))) - (return (me:num info))))) + (if (string= *broadcast-name* name) + +broadcast-id+ + (dolist (info *node-infos*) + (when (string= name (me:short-name (me:user info))) + (return (me:num info)))))) (defun timestamp-to-hour (&optional (secs (get-universal-time))) (multiple-value-bind (_ m h) diff --git a/examples/meshtastic/lisp/package.lisp b/examples/meshtastic/lisp/package.lisp index c46c40a..0825f5a 100644 --- a/examples/meshtastic/lisp/package.lisp +++ b/examples/meshtastic/lisp/package.lisp @@ -131,8 +131,6 @@ (:nicknames :loc) (:use :cl :qml) (:export - #:*default-position* - #:*my-position* #:*positions* #:activate-map #:add-manual-marker