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());