Files

64 lines
1.9 KiB
C++
Raw Permalink Normal View History

#include <Arduino.h>
#include "target.h"
CardputerADVBoard board;
static SPIClass spi;
RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi);
WRAPPER_CLASS radio_driver(radio, board);
ESP32RTCClock fallback_clock;
AutoDiscoverRTCClock rtc_clock(fallback_clock);
MicroNMEALocationProvider gps(Serial1, &rtc_clock);
EnvironmentSensorManager sensors(gps);
#ifdef DISPLAY_CLASS
DISPLAY_CLASS display;
MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
#endif
static void init_lora_cap_ioe() {
const uint8_t PI4IOE_ADDR = 0x43; // PI4IOE5V6408, ADDR pin -> GND
// Egyszerű "probe": ha nincs ACK, nincs ott az IO expander (régi cap)
Wire.beginTransmission(PI4IOE_ADDR);
if (Wire.endTransmission() != 0) {
return; // régi Cap LoRa868, nincs teendő
}
// Új Cap LoRa-1262: P0 -> output, High-Z letiltva, majd HIGH
Wire.beginTransmission(PI4IOE_ADDR);
Wire.write(0x03); // I/O Direction register
Wire.write(0x01); // bit0 = 1 -> P0 kimenet, többi marad bemenet
Wire.endTransmission();
Wire.beginTransmission(PI4IOE_ADDR);
Wire.write(0x07); // Output High-Impedance register
Wire.write(0x00); // bit0 = 0 -> P0 kijön a High-Z állapotból
Wire.endTransmission();
Wire.beginTransmission(PI4IOE_ADDR);
Wire.write(0x05); // Output Port register
Wire.write(0x01); // bit0 = 1 -> P0 HIGH (LoRa "SW" pin engedélyezve)
Wire.endTransmission();
}
bool radio_init() {
fallback_clock.begin();
Wire.begin(PIN_BOARD_SDA, PIN_BOARD_SCL); // 14pin header & internal
Wire1.begin(PIN_BOARD_SDA1, PIN_BOARD_SCL1); // grove
rtc_clock.begin(Wire); // needs Wire already begun on the right pins to auto-detect an RTC chip
init_lora_cap_ioe();
return radio.std_init(&spi);
}
mesh::LocalIdentity radio_new_identity() {
RadioNoiseListener rng(radio);
return mesh::LocalIdentity(&rng); // create new random identity
}