sforkowany z mirror/meshtastic-firmware
new ble charatristics work
rodzic
8f7f4d894f
commit
97598c9178
1
TODO.md
1
TODO.md
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
* implement new ble characteristics
|
* implement new ble characteristics
|
||||||
* have MeshService keep a node DB by sniffing user messages
|
* have MeshService keep a node DB by sniffing user messages
|
||||||
|
* figure out why protobuf reads of Owner fail
|
||||||
* have meshservice send location data on mesh (if device has a GPS)
|
* have meshservice send location data on mesh (if device has a GPS)
|
||||||
* implement getCurrentTime() - set based off gps but then updated locally
|
* implement getCurrentTime() - set based off gps but then updated locally
|
||||||
* confirm second device receives that gps message and updates device db
|
* confirm second device receives that gps message and updates device db
|
||||||
|
|
|
@ -5,19 +5,56 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
|
||||||
#include "mesh.pb.h"
|
#include "mesh.pb.h"
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "mesh-pb-constants.h"
|
#include "mesh-pb-constants.h"
|
||||||
|
#include "NodeDB.h"
|
||||||
|
|
||||||
|
// This scratch buffer is used for various bluetooth reads/writes - but it is safe because only one bt operation can be in proccess at once
|
||||||
|
static uint8_t trBytes[_max(_max(_max(_max(ToRadio_size, RadioConfig_size), User_size), MyNodeInfo_size), FromRadio_size)];
|
||||||
|
|
||||||
|
class ProtobufCharacteristic : public BLECharacteristic, public BLECharacteristicCallbacks
|
||||||
|
{
|
||||||
|
const pb_msgdesc_t *fields;
|
||||||
|
void *my_struct;
|
||||||
|
|
||||||
|
public:
|
||||||
|
ProtobufCharacteristic(const char *uuid, uint32_t btprops, const pb_msgdesc_t *_fields, void *_my_struct)
|
||||||
|
: BLECharacteristic(uuid, btprops),
|
||||||
|
fields(_fields),
|
||||||
|
my_struct(_my_struct)
|
||||||
|
{
|
||||||
|
setCallbacks(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onRead(BLECharacteristic *c)
|
||||||
|
{
|
||||||
|
Serial.println("Got proto read");
|
||||||
|
size_t numbytes = pb_encode_to_bytes(trBytes, sizeof(trBytes), fields, my_struct);
|
||||||
|
c->setValue(trBytes, numbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onWrite(BLECharacteristic *c)
|
||||||
|
{
|
||||||
|
// dumpCharacteristic(pCharacteristic);
|
||||||
|
Serial.println("Got on proto write");
|
||||||
|
std::string src = c->getValue();
|
||||||
|
if (pb_decode_from_bytes((const uint8_t *)src.c_str(), src.length(), fields, my_struct)) {
|
||||||
|
// Success, the bytes are now in our struct - do nothing else
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static BLECharacteristic
|
static BLECharacteristic
|
||||||
meshFromRadioCharacteristic("8ba2bcc2-ee02-4a55-a531-c525c5e454d5", BLECharacteristic::PROPERTY_READ),
|
meshFromRadioCharacteristic("8ba2bcc2-ee02-4a55-a531-c525c5e454d5", BLECharacteristic::PROPERTY_READ),
|
||||||
meshToRadioCharacteristic("f75c76d2-129e-4dad-a1dd-7866124401e7", BLECharacteristic::PROPERTY_WRITE),
|
meshToRadioCharacteristic("f75c76d2-129e-4dad-a1dd-7866124401e7", BLECharacteristic::PROPERTY_WRITE),
|
||||||
meshFromNumCharacteristic("ed9da18c-a800-4f66-a670-aa7547e34453", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY),
|
meshFromNumCharacteristic("ed9da18c-a800-4f66-a670-aa7547e34453", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY),
|
||||||
meshMyNodeCharacteristic("ea9f3f82-8dc4-4733-9452-1f6da28892a2", BLECharacteristic::PROPERTY_READ),
|
meshNodeInfoCharacteristic("d31e02e0-c8ab-4d3f-9cc9-0b8466bdabe8", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ);
|
||||||
meshNodeInfoCharacteristic("d31e02e0-c8ab-4d3f-9cc9-0b8466bdabe8", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ),
|
|
||||||
meshRadioCharacteristic("b56786c8-839a-44a1-b98e-a1724c4a0262", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ),
|
static ProtobufCharacteristic
|
||||||
meshOwnerCharacteristic("6ff1d8b6-e2de-41e3-8c0b-8fa384f64eb6", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ);
|
meshMyNodeCharacteristic("ea9f3f82-8dc4-4733-9452-1f6da28892a2", BLECharacteristic::PROPERTY_READ, MyNodeInfo_fields, &myNodeInfo),
|
||||||
|
meshRadioCharacteristic("b56786c8-839a-44a1-b98e-a1724c4a0262", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ, RadioConfig_fields, &radioConfig),
|
||||||
|
meshOwnerCharacteristic("6ff1d8b6-e2de-41e3-8c0b-8fa384f64eb6", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ, User_fields, &owner);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tell any bluetooth clients that the number of rx packets has changed
|
* Tell any bluetooth clients that the number of rx packets has changed
|
||||||
|
@ -28,7 +65,6 @@ void bluetoothNotifyFromNum(uint32_t newValue)
|
||||||
meshFromNumCharacteristic.notify();
|
meshFromNumCharacteristic.notify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
||||||
{
|
{
|
||||||
void onRead(BLECharacteristic *c)
|
void onRead(BLECharacteristic *c)
|
||||||
|
@ -59,8 +95,6 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
||||||
|
|
||||||
service.releaseToPool(mp); // we just copied the bytes, so don't need this buffer anymore
|
service.releaseToPool(mp); // we just copied the bytes, so don't need this buffer anymore
|
||||||
|
|
||||||
static uint8_t trBytes[ToRadio_size];
|
|
||||||
|
|
||||||
size_t numbytes = pb_encode_to_bytes(trBytes, sizeof(trBytes), FromRadio_fields, &fradio);
|
size_t numbytes = pb_encode_to_bytes(trBytes, sizeof(trBytes), FromRadio_fields, &fradio);
|
||||||
c->setValue(trBytes, numbytes);
|
c->setValue(trBytes, numbytes);
|
||||||
}
|
}
|
||||||
|
@ -158,6 +192,10 @@ BLEService *createMeshBluetoothService(BLEServer *server)
|
||||||
meshToRadioCharacteristic.setCallbacks(&btMeshCb);
|
meshToRadioCharacteristic.setCallbacks(&btMeshCb);
|
||||||
meshFromNumCharacteristic.setCallbacks(&btMeshCb);
|
meshFromNumCharacteristic.setCallbacks(&btMeshCb);
|
||||||
|
|
||||||
|
addWithDesc(service, &meshMyNodeCharacteristic, "myNode");
|
||||||
|
addWithDesc(service, &meshRadioCharacteristic, "radio");
|
||||||
|
addWithDesc(service, &meshOwnerCharacteristic, "owner");
|
||||||
|
|
||||||
meshFromNumCharacteristic.addDescriptor(new BLE2902()); // Needed so clients can request notification
|
meshFromNumCharacteristic.addDescriptor(new BLE2902()); // Needed so clients can request notification
|
||||||
|
|
||||||
service->start();
|
service->start();
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
// Change to 434.0 or other frequency, must match RX's freq! FIXME, choose a better default value
|
// Change to 434.0 or other frequency, must match RX's freq! FIXME, choose a better default value
|
||||||
#define RF95_FREQ_US 915.0f
|
#define RF95_FREQ_US 915.0f
|
||||||
|
|
||||||
RadioConfig radioConfig;
|
RadioConfig radioConfig = RadioConfig_init_zero;
|
||||||
|
|
||||||
MeshRadio::MeshRadio(MemoryPool<MeshPacket> &_pool, PointerQueue<MeshPacket> &_rxDest)
|
MeshRadio::MeshRadio(MemoryPool<MeshPacket> &_pool, PointerQueue<MeshPacket> &_rxDest)
|
||||||
: rf95(NSS_GPIO, DIO0_GPIO),
|
: rf95(NSS_GPIO, DIO0_GPIO),
|
||||||
|
|
|
@ -7,8 +7,9 @@
|
||||||
#include "mesh-pb-constants.h"
|
#include "mesh-pb-constants.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
|
|
||||||
MyNodeInfo myNodeInfo;
|
MyNodeInfo myNodeInfo = MyNodeInfo_init_zero;
|
||||||
NodeDB nodeDB;
|
NodeDB nodeDB;
|
||||||
|
User owner = User_init_zero;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get our starting (provisional) nodenum from flash. But check first if anyone else is using it, by trying to send a message to it (arping)
|
* get our starting (provisional) nodenum from flash. But check first if anyone else is using it, by trying to send a message to it (arping)
|
||||||
|
|
|
@ -51,3 +51,4 @@ private:
|
||||||
|
|
||||||
extern NodeDB nodeDB;
|
extern NodeDB nodeDB;
|
||||||
extern MyNodeInfo myNodeInfo;
|
extern MyNodeInfo myNodeInfo;
|
||||||
|
extern User owner;
|
||||||
|
|
Ładowanie…
Reference in New Issue