diff --git a/platformio.ini b/platformio.ini index 889ea5ba..e19f3048 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] -default_envs = tbeam +;default_envs = tbeam ;default_envs = tbeam0.7 ;default_envs = heltec ;default_envs = tlora-v1 @@ -18,7 +18,7 @@ default_envs = tbeam ;default_envs = lora-relay-v1 # nrf board ;default_envs = eink ;default_envs = nrf52840dk-geeksville -;default_envs = native # lora-relay-v1 # nrf52840dk-geeksville # linux # or if you'd like to change the default to something like lora-relay-v1 put that here +default_envs = native # lora-relay-v1 # nrf52840dk-geeksville # linux # or if you'd like to change the default to something like lora-relay-v1 put that here ;default_envs = rak4631 ;default_envs = rak4630 diff --git a/src/configuration.h b/src/configuration.h index 1e58b700..bd37b9d7 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -423,11 +423,10 @@ along with this program. If not, see . #define USE_SIM_RADIO +// Pine64 uses a common pinout for their SX1262 vs RF95 modules - both can be enabled and we will probe at runtime for RF95 and if +// not found then probe for SX1262 #define USE_RF95 -#define LORA_DIO0 26 // a No connect on the SX1262 module -#define LORA_RESET RADIOLIB_NC -#define LORA_DIO1 33 // Not really used -#define LORA_DIO2 32 // Not really used +#define USE_SX1262 // Fake SPI device selections #define RF95_SCK 5 @@ -435,6 +434,20 @@ along with this program. If not, see . #define RF95_MOSI 27 #define RF95_NSS RADIOLIB_NC // the ch341f spi controller does CS for us +#define LORA_DIO0 26 // a No connect on the SX1262 module +#define LORA_RESET RADIOLIB_NC +#define LORA_DIO1 33 // SX1262 IRQ - FIXME, attach to gpio4/IRQ with linux spidev +#define LORA_DIO2 32 // SX1262 BUSY - FIXME, misassigned in schematic? +#define LORA_DIO3 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled + +#ifdef USE_SX1262 +#define SX1262_CS 20 // FIXME - we need to assign a pinetab CS GPIO binding (so host can manually control it wrt BUSY) +#define SX1262_DIO1 LORA_DIO1 +#define SX1262_BUSY LORA_DIO2 +#define SX1262_RESET LORA_RESET +#define SX1262_E22 // Seems to be an E22 clone +#endif + #endif // DEBUG LED diff --git a/src/mesh/RF95Interface.h b/src/mesh/RF95Interface.h index ebebe3c7..59930adb 100644 --- a/src/mesh/RF95Interface.h +++ b/src/mesh/RF95Interface.h @@ -14,7 +14,6 @@ class RF95Interface : public RadioLibInterface public: RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, SPIClass &spi); - /// Some boards (Pinetab Lora module) have broken IRQ wires, so we need to poll via i2c registers bool isIRQPending() { return lora->getPendingIRQ(); } /// Initialise the Driver transport hardware and software. diff --git a/src/mesh/RadioInterface.h b/src/mesh/RadioInterface.h index d263e012..c0d7ec2d 100644 --- a/src/mesh/RadioInterface.h +++ b/src/mesh/RadioInterface.h @@ -151,6 +151,9 @@ class RadioInterface */ float getFreq(); + /// Some boards (1st gen Pinetab Lora module) have broken IRQ wires, so we need to poll via i2c registers + virtual bool isIRQPending() { return false; } + protected: int8_t power = 17; // Set by applyModemConfig() diff --git a/src/mesh/SX1262Interface.h b/src/mesh/SX1262Interface.h index 30167bc2..05a93a33 100644 --- a/src/mesh/SX1262Interface.h +++ b/src/mesh/SX1262Interface.h @@ -25,6 +25,8 @@ class SX1262Interface : public RadioLibInterface /// Prepare hardware for sleep. Call this _only_ for deep sleep, not needed for light sleep. virtual bool sleep(); + bool isIRQPending() { return lora.getIrqStatus() != 0; } + protected: /** * Glue functions called from ISR land diff --git a/src/portduino/PortduinoGlue.cpp b/src/portduino/PortduinoGlue.cpp index 87616889..1faec749 100644 --- a/src/portduino/PortduinoGlue.cpp +++ b/src/portduino/PortduinoGlue.cpp @@ -44,10 +44,10 @@ void updateBatteryLevel(uint8_t level) NOT_IMPLEMENTED("updateBatteryLevel"); * * Porduino helper class to do this i2c based polling: */ -class R595PolledIrqPin : public GPIOPin +class PolledIrqPin : public GPIOPin { public: - R595PolledIrqPin() : GPIOPin(LORA_DIO0, "LORA_DIO0") {} + PolledIrqPin() : GPIOPin(LORA_DIO0, "LORA_DIO0") {} /// Read the low level hardware for this pin virtual PinStatus readPinHardware() @@ -58,9 +58,9 @@ class R595PolledIrqPin : public GPIOPin extern RadioInterface *rIf; // FIXME, temporary hack until we know if we need to keep this assert(rIf); - RF95Interface *rIf95 = static_cast(rIf); - bool p = rIf95->isIRQPending(); - // log(SysGPIO, LogDebug, "R595PolledIrqPin::readPinHardware(%s, %d, %d)", getName(), getPinNum(), p); + bool p = rIf->isIRQPending(); + if(p) + log(SysGPIO, LogDebug, "R595PolledIrqPin::readPinHardware(%s, %d, %d)", getName(), getPinNum(), p); return p ? HIGH : LOW; } } @@ -74,8 +74,8 @@ void portduinoSetup() { printf("Setting up Meshtastic on Porduino...\n"); - // FIXME: disable while not testing with real hardware - // gpioBind(new R595PolledIrqPin()); + // FIXME: remove this hack once interrupts are confirmed to work on new pine64 board + gpioBind(new PolledIrqPin()); // gpioBind((new SimGPIOPin(LORA_RESET, "LORA_RESET"))); // gpioBind((new SimGPIOPin(RF95_NSS, "RF95_NSS"))->setSilent());