Files
firmware/src/portduino/PortduinoGlue.cpp

100 lines
3.0 KiB
C++
Raw Normal View History

2020-09-06 09:24:08 -07:00
#include "CryptoEngine.h"
#include "PortduinoGPIO.h"
2021-01-02 14:14:59 +08:00
#include "mesh/RF95Interface.h"
2020-10-31 15:50:39 +08:00
#include "sleep.h"
2021-04-02 09:14:12 +08:00
#include "target_specific.h"
2020-09-06 09:24:08 -07:00
2021-01-02 14:14:59 +08:00
#include <Utility.h>
#include <assert.h>
2021-04-22 14:28:56 +08:00
#include <linux/gpio/LinuxGPIOPin.h>
2021-01-02 14:14:59 +08:00
2021-04-02 09:14:12 +08:00
// FIXME - move setBluetoothEnable into a HALPlatform class
2020-09-06 09:24:08 -07:00
void setBluetoothEnable(bool on)
{
2021-03-17 20:29:27 +08:00
// not needed
2020-09-06 09:24:08 -07:00
}
2021-04-02 09:14:12 +08:00
void cpuDeepSleep(uint64_t msecs)
{
2020-10-31 15:50:39 +08:00
notImplemented("cpuDeepSleep");
}
void updateBatteryLevel(uint8_t level) NOT_IMPLEMENTED("updateBatteryLevel");
2021-04-28 14:47:29 +08:00
/** a simulated pin for busted IRQ hardware
* Porduino helper class to do this i2c based polling:
*/
class PolledIrqPin : public GPIOPin
{
public:
PolledIrqPin() : GPIOPin(LORA_DIO1, "loraIRQ") {}
/// Read the low level hardware for this pin
virtual PinStatus readPinHardware()
{
if (isrPinStatus < 0)
return LOW; // No interrupt handler attached, don't bother polling i2c right now
else {
extern RadioInterface *rIf; // FIXME, temporary hack until we know if we need to keep this
assert(rIf);
RadioLibInterface *rIf95 = static_cast<RadioLibInterface *>(rIf);
bool p = rIf95->isIRQPending();
log(SysGPIO, LogDebug, "PolledIrqPin::readPinHardware(%s, %d, %d)", getName(), getPinNum(), p);
return p ? HIGH : LOW;
}
}
};
2021-05-23 11:46:57 +08:00
static GPIOPin *loraIrq;
static bool usePineLora;
2021-04-02 09:14:12 +08:00
/** apps run under portduino can optionally define a portduinoSetup() to
* use portduino specific init code (such as gpioBind) to setup portduino on their host machine,
* before running 'arduino' code.
*/
2021-04-02 09:14:12 +08:00
void portduinoSetup()
{
printf("Setting up Meshtastic on Porduino...\n");
2021-03-15 19:59:09 +08:00
2021-05-23 11:46:57 +08:00
if(usePineLora) {
printf("Connecting to PineLora board...\n");
// FIXME: remove this hack once interrupts are confirmed to work on new pine64 board
// loraIrq = new PolledIrqPin();
loraIrq = new LinuxGPIOPin(LORA_DIO1, "ch341", "int", "loraIrq"); // or "err"?
loraIrq->setSilent();
gpioBind(loraIrq);
// BUSY hw was busted on current board - just use the simulated pin (which will read low)
auto busy = new LinuxGPIOPin(SX1262_BUSY, "ch341", "slct", "loraBusy");
busy->setSilent();
gpioBind(busy);
gpioBind(new LinuxGPIOPin(SX1262_RESET, "ch341", "ini", "loraReset"));
auto loraCs = new LinuxGPIOPin(SX1262_CS, "ch341", "cs0", "loraCs");
loraCs->setSilent();
gpioBind(loraCs);
}
else {
auto fakeBusy = new SimGPIOPin(SX1262_BUSY, "fakeBusy");
fakeBusy->writePin(LOW);
fakeBusy->setSilent(true);
gpioBind(fakeBusy);
auto cs = new SimGPIOPin(SX1262_CS, "fakeLoraCS");
cs->setSilent(true);
gpioBind(cs);
gpioBind(new SimGPIOPin(SX1262_RESET, "fakeLoraReset"));
gpioBind(new SimGPIOPin(LORA_DIO1, "fakeLoraIrq"));
}
2021-04-22 14:28:56 +08:00
2021-04-02 09:14:12 +08:00
// gpioBind((new SimGPIOPin(LORA_RESET, "LORA_RESET")));
// gpioBind((new SimGPIOPin(RF95_NSS, "RF95_NSS"))->setSilent());
}