diff --git a/TODO.md b/TODO.md index 4272fcbf..f38cdca0 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,7 @@ # High priority -* implement new ble characteristics -* have MeshService keep a node DB by sniffing user messages -* figure out why protobuf reads of Owner fail - possibly related to having the wrong number of chracterstics exported over bluetooth +* implement regen user and radio prefs +* figure out why protobuf reads of Owner fail - debug with jtag * have meshservice send location data on mesh (if device has a GPS) * implement getCurrentTime() - set based off gps but then updated locally * confirm second device receives that gps message and updates device db @@ -64,4 +63,6 @@ until the phone pulls those packets. Ever so often power on bluetooth just so w * make message receive from radio go through to android * test loopback tx/rx path code without using radio * notify phone when rx packets arrive, currently the phone polls at startup only -* figure out if we can use PA_BOOST - yes, it seems to be on both boards \ No newline at end of file +* figure out if we can use PA_BOOST - yes, it seems to be on both boards +* implement new ble characteristics +* have MeshService keep a node DB by sniffing user messages \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 6099bdd7..166c15b1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -24,12 +24,12 @@ build_flags = -Wall -Wextra -Wno-missing-field-initializers -ggdb -O3 -Wl,-Map,. ; -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG upload_speed = 921600 -upload_port = /dev/ttyUSB0 +;upload_port = /dev/ttyUSB1 ; the default is esptool ; upload_protocol = esp-prog -; monitor_port = /dev/ttyUSB0 +;monitor_port = /dev/ttyUSB1 monitor_speed = 115200 # debug_tool = esp-prog @@ -46,4 +46,5 @@ lib_deps = TinyGPSPlus ESP8266_SSD1306 AXP202X_Library - SPI \ No newline at end of file + SPI + Wire ; explicitly needed here because the AXP202 library forgets to add it \ No newline at end of file diff --git a/src/MeshBluetoothService.cpp b/src/MeshBluetoothService.cpp index 73b68760..b704bfd2 100644 --- a/src/MeshBluetoothService.cpp +++ b/src/MeshBluetoothService.cpp @@ -122,7 +122,6 @@ static ProtobufCharacteristic meshMyNodeCharacteristic("ea9f3f82-8dc4-4733-9452-1f6da28892a2", BLECharacteristic::PROPERTY_READ, MyNodeInfo_fields, &myNodeInfo); static OwnerCharacteristic meshOwnerCharacteristic; - static RadioCharacteristic meshRadioCharacteristic; /** @@ -170,7 +169,7 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks } else { - assert(0); // fixme not yet implemented + // we are uninterested in the other reads } } @@ -185,7 +184,7 @@ class BluetoothMeshCallbacks : public BLECharacteristicCallbacks } else { - assert(0); // Not yet implemented + // we are uninterested in the other writes } } }; @@ -250,8 +249,8 @@ A variable keepAllPackets, if set to true will suppress this behavior and instea */ BLEService *createMeshBluetoothService(BLEServer *server) { - // Create the BLE Service - BLEService *service = server->createService("6ba1b218-15a8-461f-9fa8-5dcae273eafd"); + // Create the BLE Service, we need more than the default of 15 handles + BLEService *service = server->createService(BLEUUID("6ba1b218-15a8-461f-9fa8-5dcae273eafd"), 25, 0); addWithDesc(service, &meshFromRadioCharacteristic, "fromRadio"); addWithDesc(service, &meshToRadioCharacteristic, "toRadio"); @@ -271,5 +270,8 @@ BLEService *createMeshBluetoothService(BLEServer *server) service->start(); server->getAdvertising()->addServiceUUID(service->getUUID()); + Serial.println("*** Mesh service:"); + service->dump(); + return service; } diff --git a/src/configuration.h b/src/configuration.h index 59710ec8..24f3414d 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -37,7 +37,7 @@ along with this program. If not, see . // ----------------------------------------------------------------------------- // Select which T-Beam board is being used. Only uncomment one. -// #define T_BEAM_V10 // AKA Rev1 (second board released) +//#define T_BEAM_V10 // AKA Rev1 (second board released) #define HELTEC_LORA32 // If we are using the JTAG port for debugging, some pins must be left free for that (and things like GPS have to be disabled) @@ -115,8 +115,10 @@ along with this program. If not, see . #elif defined(HELTEC_LORA32) #define HW_VENDOR "Heltec" +#ifndef USE_JTAG // gpio15 is TDO for JTAG, so no I2C on this board while doing jtag #define I2C_SDA 4 #define I2C_SCL 15 +#endif #define RESET_OLED 16 diff --git a/src/main.ino b/src/main.ino index 7853359e..b205bcc5 100644 --- a/src/main.ino +++ b/src/main.ino @@ -83,7 +83,7 @@ void doDeepSleep(uint64_t msecToWake) // No need to turn this off if the power draw in sleep mode really is just 0.2uA and turning it off would // leave floating input for the IRQ line - + // If we want to leave the radio receving in would be 11.5mA current draw, but most of the time it is just waiting // in its sequencer (true?) so the average power draw should be much lower even if we were listinging for packets // all the time. @@ -107,16 +107,19 @@ void doDeepSleep(uint64_t msecToWake) Note: we don't isolate pins that are used for the LORA, LED, i2c, spi or the wake button */ - static const uint8_t rtcGpios[] = { /* 0, */ 2, - /* 4, */ 12,13, /* 14, */ /* 15, */ - /* 25, */ 26, /* 27, */ - 32,33,34,35,36,37,/* 38, */ 39 }; + static const uint8_t rtcGpios[] = {/* 0, */ 2, + /* 4, */ +#ifndef USE_JTAG + 12, 13, /* 14, */ /* 15, */ +#endif + /* 25, */ 26, /* 27, */ + 32, 33, 34, 35, 36, 37, /* 38, */ 39}; - for(int i = 0; i < sizeof(rtcGpios); i++) - rtc_gpio_isolate((gpio_num_t) rtcGpios[i]); + for (int i = 0; i < sizeof(rtcGpios); i++) + rtc_gpio_isolate((gpio_num_t)rtcGpios[i]); - // FIXME, disable internal rtc pullups/pulldowns on the non isolated pins. for inputs that we aren't using - // to detect wake and in normal operation the external part drives them hard. + // FIXME, disable internal rtc pullups/pulldowns on the non isolated pins. for inputs that we aren't using + // to detect wake and in normal operation the external part drives them hard. // FIXME - use an external 10k pulldown so we can leave the RTC peripherals powered off // until then we need the following lines @@ -252,7 +255,7 @@ void axp192Init() Serial.printf("Exten: %s\n", axp.isExtenEnable() ? "ENABLE" : "DISABLE"); axp.debugCharging(); - + pinMode(PMU_IRQ, INPUT_PULLUP); attachInterrupt(PMU_IRQ, [] { pmu_irq = true; @@ -291,7 +294,6 @@ void initDeepSleep() Serial.printf("booted, wake cause %d (boot count %d)\n", wakeCause, bootCount); } - const char *getDeviceName() { uint8_t dmac[6]; @@ -299,11 +301,10 @@ const char *getDeviceName() // Meshtastic_ab3c static char name[20]; - sprintf(name, "Meshtastic_%02x%02x", dmac[4], dmac[5]); + sprintf(name, "Meshtastic_%02x%02x", dmac[4], dmac[5]); return name; } - void setup() { // Debug @@ -324,8 +325,10 @@ void setup() digitalWrite(RESET_OLED, 1); #endif +#ifdef I2C_SDA Wire.begin(I2C_SDA, I2C_SCL); scanI2Cdevice(); +#endif axp192Init(); @@ -381,7 +384,8 @@ void loop() #endif #ifdef T_BEAM_V10 - if(axp192_found) { + if (axp192_found) + { // blink the axp led axp.setChgLEDMode(ledon ? AXP20X_LED_LOW_LEVEL : AXP20X_LED_OFF); } diff --git a/src/screen.ino b/src/screen.ino index 09ae8311..f52da0bf 100644 --- a/src/screen.ino +++ b/src/screen.ino @@ -109,6 +109,7 @@ void screen_update() { } void screen_setup() { +#ifdef I2C_SDA // Display instance display = new SSD1306Wire(SSD1306_ADDRESS, I2C_SDA, I2C_SCL); display->init(); @@ -117,6 +118,7 @@ void screen_setup() { // Scroll buffer display->setLogBuffer(5, 30); +#endif } void screen_loop() {