example 'meshtastic': send phone GPS position to radio; revisions

This commit is contained in:
pls.153 2023-07-15 10:48:34 +02:00
parent 80acb3c92d
commit 9699a0ce6f
28 changed files with 1566 additions and 79 deletions

View file

@ -1,9 +1,15 @@
#include "qt.h"
#include "ble_meshtastic.h"
#include <ecl_fun.h>
#include <QSqlQuery>
#include <QSqlError>
#include <QtDebug>
#ifdef Q_OS_ANDROID
#include <QtAndroid>
#include <QAndroidJniEnvironment>
#endif
QT_BEGIN_NAMESPACE
QObject* ini() {
@ -15,7 +21,12 @@ QObject* ini() {
}
QT::QT() : QObject() {
// BLE
ble = new BLE_ME;
ble->connect(ble, &BLE::deviceDiscovered,
[](const QString& fullName) {
ecl_fun("radios:device-discovered", fullName.right(4));
});
}
// BLE_ME
@ -47,6 +58,48 @@ QVariant QT::write2(const QVariant& bytes) {
return QVariant();
}
// GPS
#ifdef Q_OS_ANDROID
static void clearEventualExceptions() {
QAndroidJniEnvironment env;
if (env->ExceptionCheck()) {
env->ExceptionClear();
}
}
static qlonglong getLongField(const char* name) {
QAndroidJniObject activity = QtAndroid::androidActivity();
return static_cast<qlonglong>(activity.getField<jlong>(name));
}
static double getDoubleField(const char* name) {
QAndroidJniObject activity = QtAndroid::androidActivity();
return static_cast<double>(activity.getField<jdouble>(name));
}
#endif
QVariant QT::iniPositioning() {
#ifdef Q_OS_ANDROID
QtAndroid::runOnAndroidThread([] {
QAndroidJniObject activity = QtAndroid::androidActivity();
activity.callMethod<void>("iniLocation", "()V");
clearEventualExceptions();
});
#endif
return QVariant();
}
QVariant QT::lastPosition() {
QVariantList pos;
#ifdef Q_OS_ANDROID
pos << getDoubleField("_position_lat_")
<< getDoubleField("_position_lon_")
<< QString::number(getLongField("_position_time_")); // 'QString': see QML 'lastPosition()'
#endif
return pos;
}
// SQLite
QVariant QT::iniDb(const QVariant& name) {