mirror of
https://gitlab.com/eql/lqml.git
synced 2025-12-15 14:51:14 -08:00
example 'meshtastic': fix node map
This commit is contained in:
parent
e6eb418cab
commit
8a9fb55850
9 changed files with 53 additions and 29 deletions
|
|
@ -62,7 +62,7 @@ Item {
|
|||
if (pos) {
|
||||
var marker = markers.itemAt(n)
|
||||
marker.radioName = name
|
||||
marker.customName = customName
|
||||
marker.customName = (customName === "~") ? "" : customName
|
||||
marker.coordinate = coordinate(pos)
|
||||
marker.visible = true
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ Item {
|
|||
function updatePositions(myNum, myName, group) {
|
||||
var n = 0
|
||||
showMarker(n++, myNum, myName)
|
||||
for (var i = 0; i < group.count; i++) {
|
||||
for (var i = 1; i < group.count; i++) {
|
||||
var data = group.get(i)
|
||||
showMarker(n++, data.nodeNum, data.radioName, data.customName)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,8 +56,9 @@ Item {
|
|||
|
||||
Com.MenuItem {
|
||||
objectName: "share_location"
|
||||
text: qsTr("Share my location...")
|
||||
onTriggered: Lisp.call("loc:share-my-location")
|
||||
text: qsTr("Share my location")
|
||||
checkable: true
|
||||
onTriggered: Lisp.call("loc:share-my-location", checked)
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
|
@ -179,6 +180,7 @@ Item {
|
|||
|
||||
property double lat: 0
|
||||
property double lon: 0
|
||||
property double alt: 0
|
||||
property string time: "0" // no 'long' in JS
|
||||
|
||||
onPositionChanged: {
|
||||
|
|
@ -186,6 +188,7 @@ Item {
|
|||
var coor = position.coordinate;
|
||||
lat = coor.latitude
|
||||
lon = coor.longitude
|
||||
alt = position.altitudeValid ? coor.altitude : 0
|
||||
if (position.timestamp) {
|
||||
var stime = String(position.timestamp.getTime())
|
||||
time = stime.substring(0, stime.length - 3)
|
||||
|
|
@ -196,7 +199,7 @@ Item {
|
|||
}
|
||||
|
||||
function lastPosition() {
|
||||
return [lat, lon, time]
|
||||
return [lat, lon, alt, time]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ QVariant QT::lastPosition() {
|
|||
QVariantList pos;
|
||||
pos << getDoubleField("position_lat")
|
||||
<< getDoubleField("position_lon")
|
||||
<< getDoubleField("position_alt")
|
||||
<< getLongField("position_time");
|
||||
return pos;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,17 @@
|
|||
(in-package :loc)
|
||||
|
||||
(defvar *share-location* nil)
|
||||
(defvar *positions* nil)
|
||||
(defvar *manual-position* nil)
|
||||
(defvar *gps-position* nil)
|
||||
(defvar *last-updated* 0)
|
||||
|
||||
(defparameter *default-position* (list :lat 41.89193 :lon 12.51133 :time 0) ; Rome
|
||||
(defparameter *default-position* (list :lat 41.89193 :lon 12.51133 :alt 0 :time 0) ; Rome
|
||||
"Position of map center for manual position selection (no GPS).")
|
||||
|
||||
(defun ini ()
|
||||
(setf *share-location* (app:setting :share-location))
|
||||
(q> |checked| ui:*share-location* *share-location*)
|
||||
#+android (qt:ini-positioning qt:*cpp*)
|
||||
#+(or ios sfos) (q> |active| ui:*position-source* t)
|
||||
(x:when-it (app:setting :selected-position)
|
||||
|
|
@ -22,30 +26,37 @@
|
|||
(setf (third pos) (parse-integer time))) ; see QML
|
||||
pos))
|
||||
|
||||
(defun share-my-location () ; see QML
|
||||
(defun share-my-location (share) ; see QML
|
||||
"Share GPS position (ad hoc only)."
|
||||
(app:confirm-dialog (tr "Share my location now?") 'do-share-my-location)
|
||||
(setf *share-location* share)
|
||||
(app:change-setting :share-location share)
|
||||
(send-to-radio)
|
||||
(values))
|
||||
|
||||
(defun do-share-my-location (share)
|
||||
(when share
|
||||
(send-to-radio)))
|
||||
|
||||
#+(or android ios sfos)
|
||||
(defun update-my-position (&optional (sec 60)) ; try for 1 min
|
||||
"Store current position internally, without sharing it, so we have a base for
|
||||
eventual manual position setting."
|
||||
(destructuring-bind (lat lon time)
|
||||
(destructuring-bind (lat lon alt 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)))
|
||||
(let ((pos (list :lat lat :lon lon :alt alt :time time)))
|
||||
(setf *gps-position* pos)
|
||||
(qlog "position-updated: ~A" pos)))))
|
||||
(qlog "position-updated: ~A" pos)
|
||||
(send-to-radio)))))
|
||||
|
||||
(defun check-position-update ()
|
||||
#+(or android ios sfos)
|
||||
(let ((now (get-universal-time))
|
||||
(15min 900))
|
||||
(when (> (- now *last-updated*) 15min)
|
||||
(setf *last-updated* now)
|
||||
(update-my-position))))
|
||||
|
||||
(defun send-to-radio ()
|
||||
(when (app:setting :share-location)
|
||||
(when *share-location*
|
||||
(if lora:*config-complete*
|
||||
(lora:send-position (or *manual-position* *gps-position*))
|
||||
(qsingle-shot (* 15 1000) 'send-to-radio))))
|
||||
|
|
@ -71,6 +82,7 @@
|
|||
(app:change-setting :selected-position *manual-position*)
|
||||
(qlog "position-updated: ~A" pos))
|
||||
(q> |visible| ui:*remove-marker* t)
|
||||
(qlater 'send-to-radio)
|
||||
(values))
|
||||
|
||||
(defun remove-marker () ; see QML
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@
|
|||
#-mobile t
|
||||
"Print all sent/received protobuf packets as json to terminal.")
|
||||
|
||||
(defvar *log-packets* t
|
||||
(defvar *log-packets* #+mobile nil
|
||||
#-mobile t
|
||||
"Write all raw protobuf data sent/received to a file.")
|
||||
|
||||
(defun ini ()
|
||||
|
|
@ -176,7 +177,8 @@
|
|||
(qt:write* qt:*cpp* bytes)))
|
||||
((:usb :wifi)
|
||||
(qrun*
|
||||
(qt:write* qt:*cpp* (concatenate 'vector header bytes)))))))
|
||||
(qt:write* qt:*cpp* (concatenate 'vector header bytes))))))
|
||||
(loc:check-position-update))
|
||||
|
||||
(let (queue)
|
||||
(defun send-enqueued (&rest functions) ; see Qt
|
||||
|
|
@ -379,7 +381,8 @@
|
|||
(me:name (me:settings *my-channel*))))
|
||||
(qlater 'config-device))
|
||||
(radios:choose-region))))))
|
||||
(setf *received* nil)))
|
||||
(setf *received* nil)
|
||||
(loc:check-position-update)))
|
||||
|
||||
(defun radio-ready-p ()
|
||||
(or (and *config-complete*
|
||||
|
|
@ -485,7 +488,7 @@
|
|||
(me:make-position
|
||||
:latitude-i (to-int (getf pos :lat))
|
||||
:longitude-i (to-int (getf pos :lon))
|
||||
:time (getf pos :time))
|
||||
:altitude (max 0 (min #.(expt 10 5) (floor (or (getf pos :alt) 0)))))
|
||||
(me:make-position))) ; unset
|
||||
:want-response t)))))
|
||||
|
||||
|
|
|
|||
|
|
@ -31,8 +31,9 @@
|
|||
:hidden"
|
||||
(x:when-it (getf message (if (getf message :me) :receiver :sender))
|
||||
(unless (or loading (getf message :me))
|
||||
(x:when-it* (app:setting (getf message :sender) :custom-name)
|
||||
(setf (getf message :sender-name) x:it*)))
|
||||
(let ((name (app:setting (getf message :sender) :custom-name)))
|
||||
(when (and name (string/= "~" name))
|
||||
(setf (getf message :sender-name) name))))
|
||||
(unless loading
|
||||
(let ((id (getf message :mid)))
|
||||
(remf message :mid)
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@
|
|||
#:*positions*
|
||||
#:activate-map
|
||||
#:add-manual-marker
|
||||
#:check-position-update
|
||||
#:distance
|
||||
#:extract-map-bin
|
||||
#:ini
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ Item {
|
|||
if (pos) {
|
||||
var marker = markers.itemAt(n)
|
||||
marker.radioName = name
|
||||
marker.customName = customName
|
||||
marker.customName = (customName === "~") ? "" : customName
|
||||
marker.coordinate = coordinate(pos)
|
||||
marker.visible = true
|
||||
}
|
||||
|
|
@ -68,7 +68,7 @@ Item {
|
|||
function updatePositions(myNum, myName, group) {
|
||||
var n = 0
|
||||
showMarker(n++, myNum, myName)
|
||||
for (var i = 0; i < group.count; i++) {
|
||||
for (var i = 1; i < group.count; i++) {
|
||||
var data = group.get(i)
|
||||
showMarker(n++, data.nodeNum, data.radioName, data.customName)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,8 +55,9 @@ Item {
|
|||
|
||||
Com.MenuItem {
|
||||
objectName: "share_location"
|
||||
text: qsTr("Share my location...")
|
||||
onTriggered: Lisp.call("loc:share-my-location")
|
||||
text: qsTr("Share my location")
|
||||
checkable: true
|
||||
onTriggered: Lisp.call("loc:share-my-location", checked)
|
||||
}
|
||||
|
||||
MenuSeparator {}
|
||||
|
|
@ -178,6 +179,7 @@ Item {
|
|||
|
||||
property double lat: 0
|
||||
property double lon: 0
|
||||
property double alt: 0
|
||||
property string time: "0" // no 'long' in JS
|
||||
|
||||
onPositionChanged: {
|
||||
|
|
@ -185,6 +187,7 @@ Item {
|
|||
var coor = position.coordinate;
|
||||
lat = coor.latitude
|
||||
lon = coor.longitude
|
||||
alt = position.altitudeValid ? coor.altitude : 0
|
||||
if (position.timestamp) {
|
||||
var stime = String(position.timestamp.getTime())
|
||||
time = stime.substring(0, stime.length - 3)
|
||||
|
|
@ -195,7 +198,7 @@ Item {
|
|||
}
|
||||
|
||||
function lastPosition() {
|
||||
return [lat, lon, time]
|
||||
return [lat, lon, alt, time]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue