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

@ -31,7 +31,9 @@ void BLE::startDeviceDiscovery() {
void BLE::addDevice(const QBluetoothDeviceInfo& device) {
if (deviceFilter(device)) {
qDebug() << "device added:" << device.name();
QString name(device.name());
qDebug() << "device added:" << name;
Q_EMIT deviceDiscovered(name);
}
}

View file

@ -33,6 +33,7 @@ public:
Q_SIGNALS:
// notify
void deviceDiscovered(const QString&);
void mainServiceReady();
void deviceDisconnecting();

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) {

View file

@ -25,6 +25,10 @@ public:
Q_INVOKABLE QVariant read2();
Q_INVOKABLE QVariant write2(const QVariant&);
// GPS
Q_INVOKABLE QVariant iniPositioning();
Q_INVOKABLE QVariant lastPosition();
// SQLite
Q_INVOKABLE QVariant iniDb(const QVariant&);
Q_INVOKABLE QVariant sqlQuery(const QVariant&, const QVariant&);

View file

@ -1,4 +1,4 @@
QT += bluetooth sql
QT += bluetooth sql positioning
TEMPLATE = lib
CONFIG += c++17 plugin release no_keywords
DEFINES += PLUGIN