kopia lustrzana https://github.com/meshtastic/firmware
bt to mesh code is written
rodzic
490331f3cd
commit
de03dc88f4
|
@ -1,6 +1,5 @@
|
|||
#include "BluetoothUtil.h"
|
||||
#include "BluetoothSoftwareUpdate.h"
|
||||
#include "MeshBluetoothService.h"
|
||||
#include <esp_gatt_defs.h>
|
||||
#include <BLE2902.h>
|
||||
#include <Arduino.h>
|
||||
|
@ -122,14 +121,10 @@ BLEServer *initBLE(std::string deviceName) {
|
|||
BLEService *pUpdate = createUpdateService(pServer); // We need to advertise this so our android ble scan operation can see it
|
||||
pServer->getAdvertising()->addServiceUUID(pUpdate->getUUID());
|
||||
|
||||
BLEService *pMesh = createMeshBluetoothService(pServer); // We need to advertise this so our android ble scan operation can see it
|
||||
pServer->getAdvertising()->addServiceUUID(pMesh->getUUID());
|
||||
|
||||
// start all our services (do this after creating all of them)
|
||||
pDevInfo->start();
|
||||
pBattery->start();
|
||||
pUpdate->start();
|
||||
pMesh->start();
|
||||
|
||||
// Start advertising
|
||||
pServer->getAdvertising()->start();
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
BLEService *createMeshBluetoothService(BLEServer* server);
|
|
@ -205,3 +205,7 @@ BLEService *createMeshBluetoothService(BLEServer *server)
|
|||
|
||||
return service;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
BLEService *createMeshBluetoothService(BLEServer* server);
|
||||
|
|
@ -84,7 +84,6 @@ void mesh_init() {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
int16_t packetnum = 0; // packet counter, we increment per xmission
|
||||
|
||||
void mesh_loop()
|
||||
|
|
99
src/main.ino
99
src/main.ino
|
@ -26,6 +26,7 @@
|
|||
#include <TinyGPS++.h>
|
||||
#include <Wire.h>
|
||||
#include "BluetoothUtil.h"
|
||||
#include "MeshBluetoothService.h"
|
||||
#include "MeshRadio.h"
|
||||
|
||||
#ifdef T_BEAM_V10
|
||||
|
@ -60,7 +61,8 @@ void doDeepSleep(uint64_t msecToWake)
|
|||
// FIXME, shutdown radio headinterups before powering off device
|
||||
|
||||
#ifdef T_BEAM_V10
|
||||
if(axp192_found) {
|
||||
if (axp192_found)
|
||||
{
|
||||
// turn on after initial testing with real hardware
|
||||
axp.setPowerOutPut(AXP192_LDO2, AXP202_OFF); // LORA radio
|
||||
axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF); // GPS main power
|
||||
|
@ -85,12 +87,13 @@ void doDeepSleep(uint64_t msecToWake)
|
|||
esp_deep_sleep_start(); // TBD mA sleep current (battery)
|
||||
}
|
||||
|
||||
|
||||
void sleep() {
|
||||
void sleep()
|
||||
{
|
||||
#if SLEEP_BETWEEN_MESSAGES
|
||||
|
||||
// If the user has a screen, tell them we are about to sleep
|
||||
if(ssd1306_found) {
|
||||
if (ssd1306_found)
|
||||
{
|
||||
// Show the going to sleep message on the screen
|
||||
char buffer[20];
|
||||
snprintf(buffer, sizeof(buffer), "Sleeping in %3.1fs\n", (MESSAGE_TO_SLEEP_DELAY / 1000.0));
|
||||
|
@ -111,15 +114,16 @@ void sleep() {
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
void scanI2Cdevice(void)
|
||||
{
|
||||
byte err, addr;
|
||||
int nDevices = 0;
|
||||
for (addr = 1; addr < 127; addr++) {
|
||||
for (addr = 1; addr < 127; addr++)
|
||||
{
|
||||
Wire.beginTransmission(addr);
|
||||
err = Wire.endTransmission();
|
||||
if (err == 0) {
|
||||
if (err == 0)
|
||||
{
|
||||
Serial.print("I2C device found at address 0x");
|
||||
if (addr < 16)
|
||||
Serial.print("0");
|
||||
|
@ -127,17 +131,21 @@ void scanI2Cdevice(void)
|
|||
Serial.println(" !");
|
||||
nDevices++;
|
||||
|
||||
if (addr == SSD1306_ADDRESS) {
|
||||
if (addr == SSD1306_ADDRESS)
|
||||
{
|
||||
ssd1306_found = true;
|
||||
Serial.println("ssd1306 display found");
|
||||
}
|
||||
#ifdef T_BEAM_V10
|
||||
if (addr == AXP192_SLAVE_ADDRESS) {
|
||||
if (addr == AXP192_SLAVE_ADDRESS)
|
||||
{
|
||||
axp192_found = true;
|
||||
Serial.println("axp192 PMU found");
|
||||
}
|
||||
#endif
|
||||
} else if (err == 4) {
|
||||
}
|
||||
else if (err == 4)
|
||||
{
|
||||
Serial.print("Unknow error at address 0x");
|
||||
if (addr < 16)
|
||||
Serial.print("0");
|
||||
|
@ -161,12 +169,17 @@ void scanI2Cdevice(void)
|
|||
LDO2 200mA -> LORA
|
||||
LDO3 200mA -> GPS
|
||||
*/
|
||||
void axp192Init() {
|
||||
void axp192Init()
|
||||
{
|
||||
#ifdef T_BEAM_V10
|
||||
if (axp192_found) {
|
||||
if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) {
|
||||
if (axp192_found)
|
||||
{
|
||||
if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS))
|
||||
{
|
||||
Serial.println("AXP192 Begin PASS");
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("AXP192 Begin FAIL");
|
||||
}
|
||||
// axp.setChgLEDMode(LED_BLINK_4HZ);
|
||||
|
@ -195,24 +208,28 @@ void axp192Init() {
|
|||
pinMode(PMU_IRQ, INPUT_PULLUP);
|
||||
attachInterrupt(PMU_IRQ, [] {
|
||||
pmu_irq = true;
|
||||
}, FALLING);
|
||||
},
|
||||
FALLING);
|
||||
|
||||
axp.adc1Enable(AXP202_BATT_CUR_ADC1, 1);
|
||||
axp.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, 1);
|
||||
axp.clearIRQ();
|
||||
|
||||
if (axp.isChargeing()) {
|
||||
if (axp.isChargeing())
|
||||
{
|
||||
baChStatus = "Charging";
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("AXP192 not found");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Perform power on init that we do on each wake from deep sleep
|
||||
void initDeepSleep() {
|
||||
void initDeepSleep()
|
||||
{
|
||||
bootCount++;
|
||||
wakeCause = esp_sleep_get_wakeup_cause();
|
||||
/*
|
||||
|
@ -226,7 +243,8 @@ void initDeepSleep() {
|
|||
Serial.printf("booted, wake cause %d (boot count %d)\n", wakeCause, bootCount);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
void setup()
|
||||
{
|
||||
// Debug
|
||||
#ifdef DEBUG_PORT
|
||||
DEBUG_PORT.begin(SERIAL_BAUD);
|
||||
|
@ -281,18 +299,22 @@ void setup() {
|
|||
delay(LOGO_DELAY);
|
||||
//}
|
||||
|
||||
initBLE("KHBT Test"); // FIXME, use a real name based on the macaddr
|
||||
|
||||
mesh_init();
|
||||
BLEServer *serve = initBLE("KHBT Test"); // FIXME, use a real name based on the macaddr
|
||||
BLEService *bts = createMeshBluetoothService(serve);
|
||||
bts->start();
|
||||
serve->getAdvertising()->addServiceUUID(bts->getUUID());
|
||||
}
|
||||
|
||||
void loop() {
|
||||
void loop()
|
||||
{
|
||||
gps_loop();
|
||||
screen_loop();
|
||||
mesh_loop();
|
||||
loopBLE();
|
||||
|
||||
if(packetSent) {
|
||||
if (packetSent)
|
||||
{
|
||||
packetSent = false;
|
||||
sleep();
|
||||
}
|
||||
|
@ -301,16 +323,21 @@ void loop() {
|
|||
// if user presses button for more than 3 secs, discard our network prefs and reboot (FIXME, use a debounce lib instead of this boilerplate)
|
||||
static bool wasPressed = false;
|
||||
static uint32_t minPressMs; // what tick should we call this press long enough
|
||||
if(!digitalRead(BUTTON_PIN)) {
|
||||
if(!wasPressed) { // just started a new press
|
||||
if (!digitalRead(BUTTON_PIN))
|
||||
{
|
||||
if (!wasPressed)
|
||||
{ // just started a new press
|
||||
Serial.println("pressing");
|
||||
wasPressed = true;
|
||||
minPressMs = millis() + 3000;
|
||||
}
|
||||
} else if(wasPressed) {
|
||||
}
|
||||
else if (wasPressed)
|
||||
{
|
||||
// we just did a release
|
||||
wasPressed = false;
|
||||
if(millis() > minPressMs) {
|
||||
if (millis() > minPressMs)
|
||||
{
|
||||
// held long enough
|
||||
screen_print("Erasing prefs");
|
||||
delay(5000); // Give some time to read the screen
|
||||
|
@ -322,18 +349,24 @@ void loop() {
|
|||
// Send every SEND_INTERVAL millis
|
||||
static uint32_t last = 0;
|
||||
static bool first = true;
|
||||
if (0 == last || millis() - last > SEND_INTERVAL) {
|
||||
if (false) {
|
||||
if (0 == last || millis() - last > SEND_INTERVAL)
|
||||
{
|
||||
if (false)
|
||||
{
|
||||
last = millis();
|
||||
first = false;
|
||||
Serial.println("TRANSMITTED");
|
||||
} else {
|
||||
if (first) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
screen_print("Waiting GPS lock\n");
|
||||
first = false;
|
||||
}
|
||||
#ifdef GPS_WAIT_FOR_LOCK
|
||||
if (millis() > GPS_WAIT_FOR_LOCK) {
|
||||
if (millis() > GPS_WAIT_FOR_LOCK)
|
||||
{
|
||||
sleep();
|
||||
}
|
||||
#endif
|
||||
|
|
Ładowanie…
Reference in New Issue