mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-08 14:12:05 +00:00
wip
This commit is contained in:
parent
76f4b92790
commit
490331f3cd
7
TODO.md
7
TODO.md
@ -15,6 +15,9 @@
|
|||||||
* scrub default radio config settings for bandwidth/range/speed
|
* scrub default radio config settings for bandwidth/range/speed
|
||||||
* use a freertos thread to remain blocked reading from recvfromAckTimeout, so that we don't need to keep polling it from our main thread
|
* use a freertos thread to remain blocked reading from recvfromAckTimeout, so that we don't need to keep polling it from our main thread
|
||||||
* override peekAtMessage so we can see any messages that pass through our node (even if not broadcast)? would that be useful?
|
* override peekAtMessage so we can see any messages that pass through our node (even if not broadcast)? would that be useful?
|
||||||
|
* sendToMesh can currently block for a long time, instead have it just queue a packet for a radio freertos thread
|
||||||
|
|
||||||
|
* fix the logo
|
||||||
|
|
||||||
# Pre-beta priority
|
# Pre-beta priority
|
||||||
|
|
||||||
@ -24,6 +27,10 @@
|
|||||||
* triple check fcc compliance
|
* triple check fcc compliance
|
||||||
* allow setting full radio params from android
|
* allow setting full radio params from android
|
||||||
|
|
||||||
|
# Low priority
|
||||||
|
|
||||||
|
* report esp32 device code bugs back to the mothership via android
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
|
|
||||||
* change the partition table to take advantage of the 4MB flash on the wroom: http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables
|
* change the partition table to take advantage of the 4MB flash on the wroom: http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables
|
||||||
|
@ -5,6 +5,10 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <pb_encode.h>
|
||||||
|
#include <pb_decode.h>
|
||||||
|
#include "mesh.pb.h"
|
||||||
|
#include "MeshRadio.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
receivedPacketQueue - this is a queue of messages we've received from the mesh, which we are keeping to deliver to the phone.
|
receivedPacketQueue - this is a queue of messages we've received from the mesh, which we are keeping to deliver to the phone.
|
||||||
@ -49,31 +53,73 @@ public:
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/// A temporary buffer used for sending packets, sized to hold the biggest buffer we might need
|
||||||
|
static uint8_t outbuf[MeshPacket_size];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Top level app for this service. keeps the mesh, the radio config and the queue of received packets.
|
* Top level app for this service. keeps the mesh, the radio config and the queue of received packets.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class MeshService {
|
class MeshService
|
||||||
|
{
|
||||||
public:
|
public:
|
||||||
|
/// Given a ToRadio buffer parse it and properly handle it (setup radio, owner or send packet into the mesh)
|
||||||
|
void handleToRadio(std::string s)
|
||||||
|
{
|
||||||
|
static ToRadio r; // new ToRadio(); FIXME dynamically allocate
|
||||||
|
|
||||||
|
pb_istream_t stream = pb_istream_from_buffer((const uint8_t *)s.c_str(), s.length());
|
||||||
|
if (!pb_decode(&stream, ToRadio_fields, &r))
|
||||||
|
{
|
||||||
|
Serial.printf("Error: can't decode ToRadio %s\n", PB_GET_ERROR(&stream));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (r.which_variant)
|
||||||
|
{
|
||||||
|
case ToRadio_packet_tag:
|
||||||
|
sendToMesh(r.variant.packet);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Serial.println("Error: unexpected ToRadio variant");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// Send a packet into the mesh
|
||||||
|
void sendToMesh(const MeshPacket &p)
|
||||||
|
{
|
||||||
|
assert(p.has_payload);
|
||||||
|
|
||||||
|
pb_ostream_t stream = pb_ostream_from_buffer(outbuf, sizeof(outbuf));
|
||||||
|
if (!pb_encode(&stream, MeshPacket_fields, &p))
|
||||||
|
{
|
||||||
|
Serial.printf("Error: can't encode MeshPacket %s\n", PB_GET_ERROR(&stream));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
radio.sendTo(p.to, outbuf, stream.bytes_written);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MeshService service;
|
||||||
|
|
||||||
static BLECharacteristic meshFromRadioCharacteristic("8ba2bcc2-ee02-4a55-a531-c525c5e454d5", BLECharacteristic::PROPERTY_READ);
|
static BLECharacteristic meshFromRadioCharacteristic("8ba2bcc2-ee02-4a55-a531-c525c5e454d5", BLECharacteristic::PROPERTY_READ);
|
||||||
static BLECharacteristic meshToRadioCharacteristic("f75c76d2-129e-4dad-a1dd-7866124401e7", BLECharacteristic::PROPERTY_WRITE);
|
static BLECharacteristic meshToRadioCharacteristic("f75c76d2-129e-4dad-a1dd-7866124401e7", BLECharacteristic::PROPERTY_WRITE);
|
||||||
static BLECharacteristic meshFromNumCharacteristic("ed9da18c-a800-4f66-a670-aa7547e34453", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
|
static BLECharacteristic meshFromNumCharacteristic("ed9da18c-a800-4f66-a670-aa7547e34453", BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
|
||||||
|
|
||||||
|
|
||||||
/// Given a ToRadio buffer parse it and properly handle it (setup radio, owner or send packet into the mesh)
|
|
||||||
static void handleToRadio(std::string s) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
||||||
{
|
{
|
||||||
void onRead(BLECharacteristic *c) {
|
void onRead(BLECharacteristic *c)
|
||||||
|
{
|
||||||
Serial.println("Got on read");
|
Serial.println("Got on read");
|
||||||
|
|
||||||
if(c == &meshFromRadioCharacteristic) {
|
if (c == &meshFromRadioCharacteristic)
|
||||||
|
{
|
||||||
// Someone is going to read our value as soon as this callback returns. So fill it with the next message in the queue
|
// Someone is going to read our value as soon as this callback returns. So fill it with the next message in the queue
|
||||||
// or make empty if the queue is empty
|
// or make empty if the queue is empty
|
||||||
// c->setValue(byteptr, len);
|
// c->setValue(byteptr, len);
|
||||||
@ -85,10 +131,12 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks
|
|||||||
// dumpCharacteristic(pCharacteristic);
|
// dumpCharacteristic(pCharacteristic);
|
||||||
Serial.println("Got on write");
|
Serial.println("Got on write");
|
||||||
|
|
||||||
if(c == &meshToRadioCharacteristic) {
|
if (c == &meshToRadioCharacteristic)
|
||||||
handleToRadio(c->getValue());
|
{
|
||||||
|
service.handleToRadio(c->getValue());
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
assert(0); // Not yet implemented
|
assert(0); // Not yet implemented
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -140,7 +188,8 @@ Not all messages are kept in the fromradio queue (filtered based on SubPacket):
|
|||||||
A variable keepAllPackets, if set to true will suppress this behavior and instead keep everything for forwarding to the phone (for debugging)
|
A variable keepAllPackets, if set to true will suppress this behavior and instead keep everything for forwarding to the phone (for debugging)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
BLEService *createMeshBluetoothService(BLEServer* server) {
|
BLEService *createMeshBluetoothService(BLEServer *server)
|
||||||
|
{
|
||||||
// Create the BLE Service
|
// Create the BLE Service
|
||||||
BLEService *service = server->createService("6ba1b218-15a8-461f-9fa8-5dcae273eafd");
|
BLEService *service = server->createService("6ba1b218-15a8-461f-9fa8-5dcae273eafd");
|
||||||
|
|
||||||
@ -156,4 +205,3 @@ BLEService *createMeshBluetoothService(BLEServer* server) {
|
|||||||
|
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ bool MeshRadio::init() {
|
|||||||
|
|
||||||
|
|
||||||
ErrorCode MeshRadio::sendTo(NodeNum dest, const uint8_t *buf, size_t len) {
|
ErrorCode MeshRadio::sendTo(NodeNum dest, const uint8_t *buf, size_t len) {
|
||||||
|
Serial.println("Sending...");
|
||||||
return manager.sendtoWait((uint8_t *) buf, len, dest);
|
return manager.sendtoWait((uint8_t *) buf, len, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,11 +92,9 @@ void mesh_loop()
|
|||||||
radio.loop();
|
radio.loop();
|
||||||
|
|
||||||
delay(1000); // Wait 1 second between transmits, could also 'sleep' here!
|
delay(1000); // Wait 1 second between transmits, could also 'sleep' here!
|
||||||
Serial.println("Transmitting..."); // Send a message to rf95_server
|
|
||||||
|
|
||||||
char radiopacket[20] = "Hello World # ";
|
char radiopacket[20] = "Hello World # ";
|
||||||
sprintf(radiopacket, "hello %d", packetnum++);
|
sprintf(radiopacket, "hello %d", packetnum++);
|
||||||
|
|
||||||
Serial.println("Sending...");
|
|
||||||
radio.sendTo(NODENUM_BROADCAST, (uint8_t *)radiopacket, sizeof(radiopacket));
|
radio.sendTo(NODENUM_BROADCAST, (uint8_t *)radiopacket, sizeof(radiopacket));
|
||||||
}
|
}
|
||||||
|
@ -257,7 +257,7 @@ void setup() {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef LED_PIN
|
#ifdef LED_PIN
|
||||||
pinMode(LED_PIN, OUTPUT);
|
pinMode(LED_PIN, OUTPUT);
|
||||||
digitalWrite(LED_PIN, 0); // turn off for now
|
digitalWrite(LED_PIN, 1); // turn on for now
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Hello
|
// Hello
|
||||||
@ -274,12 +274,12 @@ void setup() {
|
|||||||
gps_setup();
|
gps_setup();
|
||||||
|
|
||||||
// Show logo on first boot after removing battery
|
// Show logo on first boot after removing battery
|
||||||
if (bootCount == 0) {
|
//if (bootCount == 0) {
|
||||||
screen_print(APP_NAME " " APP_VERSION, 0, 0);
|
screen_print(APP_NAME " " APP_VERSION, 0, 0);
|
||||||
screen_show_logo();
|
screen_show_logo();
|
||||||
screen_update();
|
screen_update();
|
||||||
delay(LOGO_DELAY);
|
delay(LOGO_DELAY);
|
||||||
}
|
//}
|
||||||
|
|
||||||
initBLE("KHBT Test"); // FIXME, use a real name based on the macaddr
|
initBLE("KHBT Test"); // FIXME, use a real name based on the macaddr
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user