diff --git a/platformio.ini b/platformio.ini index 5be5ac57..aa8e3eb8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -314,3 +314,10 @@ src_filter = ${env.src_filter} - - - - build_flags = ${arduino_base.build_flags} -O0 framework = arduino board = linux_x86_64 + +; The GenieBlocks LORA prototype board +[env:genieblocks_lora] +extends = esp32_base +board = genieblocks_lora +build_flags = + ${esp32_base.build_flags} -D GENIEBLOCKS diff --git a/src/configuration.h b/src/configuration.h index 460e1a24..cb88ed81 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -338,6 +338,35 @@ along with this program. If not, see . #define LORA_DIO1 35 // Not really used #define LORA_DIO2 34 // Not really used +#elif defined(GENIEBLOCKS) +// This string must exactly match the case used in release file names or the android updater won't work +#define HW_VENDOR "genieblocks" +#undef GPS_RX_PIN +#undef GPS_TX_PIN +#define GPS_RX_PIN 5 +#define GPS_TX_PIN 18 +#define GPS_RESET_N 10 +#define GPS_EXTINT 23 // On MAX-M8 module pin name is EXTINT. On L70 module pin name is STANDBY. + +#define BATTERY_PIN 39 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage +#define BATTERY_EN_PIN 14 // Voltage voltage divider enable pin connected to mosfet + +#define I2C_SDA 4 // I2C pins for this board +#define I2C_SCL 2 + +#define LED_PIN 12 // If defined we will blink this LED +//#define BUTTON_PIN 36 // If defined, this will be used for user button presses (ToDo problem on that line on debug screen --> Long press start!) +//#define BUTTON_NEED_PULLUP //GPIOs 34 to 39 are GPIs – input only pins. These pins don’t have internal pull-ups or pull-down resistors. + +#define USE_RF95 +#define LORA_DIO0 38 // a No connect on the SX1262 module +#define LORA_RESET 9 + +#define RF95_SCK 22 +#define RF95_MISO 19 +#define RF95_MOSI 13 +#define RF95_NSS 21 + #endif #ifdef ARDUINO_NRF52840_PCA10056 diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 6604b0d7..92e38337 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -27,6 +27,7 @@ along with this program. If not, see . #include "NodeDB.h" #include "Screen.h" #include "configuration.h" +#include "fonts.h" #include "graphics/images.h" #include "main.h" #include "mesh-pb-constants.h" @@ -34,7 +35,6 @@ along with this program. If not, see . #include "plugins/TextMessagePlugin.h" #include "target_specific.h" #include "utils.h" -#include "fonts.h" using namespace meshtastic; /** @todo remove */ @@ -42,7 +42,7 @@ namespace graphics { // This means the *visible* area (sh1106 can address 132, but shows 128 for example) -#define IDLE_FRAMERATE 1 // in fps +#define IDLE_FRAMERATE 1 // in fps #define COMPASS_DIAM 44 // DEBUG @@ -177,7 +177,6 @@ static void drawCriticalFaultFrame(OLEDDisplay *display, OLEDDisplayUiState *sta display->drawString(0 + x, FONT_HEIGHT_MEDIUM + y, "For help, please post on\nmeshtastic.discourse.group"); } - /// Draw the last text message we received static void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) { @@ -316,7 +315,7 @@ static void drawGPS(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus display->drawFastImage(x + 24, y, 8, 8, imgSatellite); // Draw the number of satellites - sprintf(satsString, "%lu", gps->getNumSatellites()); + sprintf(satsString, "%u", gps->getNumSatellites()); display->drawString(x + 34, y - 2, satsString); } } @@ -569,11 +568,11 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_ uint32_t agoSecs = sinceLastSeen(node); static char lastStr[20]; if (agoSecs < 120) // last 2 mins? - snprintf(lastStr, sizeof(lastStr), "%lu seconds ago", agoSecs); + snprintf(lastStr, sizeof(lastStr), "%u seconds ago", agoSecs); else if (agoSecs < 120 * 60) // last 2 hrs - snprintf(lastStr, sizeof(lastStr), "%lu minutes ago", agoSecs / 60); + snprintf(lastStr, sizeof(lastStr), "%u minutes ago", agoSecs / 60); else - snprintf(lastStr, sizeof(lastStr), "%lu hours ago", agoSecs / 60 / 60); + snprintf(lastStr, sizeof(lastStr), "%u hours ago", agoSecs / 60 / 60); static char distStr[20]; strcpy(distStr, "? km"); // might not have location data @@ -924,20 +923,21 @@ void Screen::handleStartBluetoothPinScreen(uint32_t pin) setFastFramerate(); } -void Screen::blink() { +void Screen::blink() +{ setFastFramerate(); uint8_t count = 10; dispdev.setBrightness(254); - while(count>0) { + while (count > 0) { dispdev.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); dispdev.display(); delay(50); dispdev.clear(); dispdev.display(); delay(50); - count = count -1; + count = count - 1; } - dispdev.setBrightness(brightness); + dispdev.setBrightness(brightness); } void Screen::handlePrint(const char *text) @@ -1060,11 +1060,13 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i if (WiFi.status() == WL_CONNECTED || isSoftAPForced() || radioConfig.preferences.wifi_ap_mode) { if (radioConfig.preferences.wifi_ap_mode || isSoftAPForced()) { display->drawString(x, y + FONT_HEIGHT_SMALL * 1, "IP: " + String(WiFi.softAPIP().toString().c_str())); + + // Number of connections to the AP. Default mmax for the esp32 is 4 + display->drawString(x + SCREEN_WIDTH - display->getStringWidth("(" + String(WiFi.softAPgetStationNum()) + "/4)"), + y + FONT_HEIGHT_SMALL * 1, "(" + String(WiFi.softAPgetStationNum()) + "/4)"); } else { display->drawString(x, y + FONT_HEIGHT_SMALL * 1, "IP: " + String(WiFi.localIP().toString().c_str())); } - display->drawString(x + SCREEN_WIDTH - display->getStringWidth("(" + String(WiFi.softAPgetStationNum()) + "/4)"), - y + FONT_HEIGHT_SMALL * 1, "(" + String(WiFi.softAPgetStationNum()) + "/4)"); } else if (WiFi.status() == WL_NO_SSID_AVAIL) { display->drawString(x, y + FONT_HEIGHT_SMALL * 1, "SSID Not Found"); diff --git a/src/main.cpp b/src/main.cpp index 22648b13..029f753e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -389,6 +389,19 @@ void setup() readFromRTC(); // read the main CPU RTC at first (in case we can't get GPS time) +#ifdef GENIEBLOCKS + //gps setup + pinMode (GPS_RESET_N, OUTPUT); + pinMode(GPS_EXTINT, OUTPUT); + digitalWrite(GPS_RESET_N, HIGH); + digitalWrite(GPS_EXTINT, LOW); + //battery setup + // If we want to read battery level, we need to set BATTERY_EN_PIN pin to low. + // ToDo: For low power consumption after read battery level, set that pin to high. + pinMode (BATTERY_EN_PIN, OUTPUT); + digitalWrite(BATTERY_EN_PIN, LOW); +#endif + // If we don't have bidirectional comms, we can't even try talking to UBLOX UBloxGPS *ublox = NULL; #ifdef GPS_TX_PIN