Compare commits

...

6 Commits

Author SHA1 Message Date
Ricardo Guzman (Richonguzman) 775e08a10a stationCallsignIsValid 2026-02-20 10:03:01 -03:00
Ricardo Guzman (Richonguzman) f9291821d2 2 decimales for QTH query 2026-02-18 11:03:06 -03:00
Ricardo Guzman (Richonguzman) 12d0bb760e version update 2026-02-16 23:46:03 -03:00
Ricardo Guzman (Richonguzman) f020eb7491 update a nombre CPU 2026-02-16 23:01:05 -03:00
Ricardo Guzman (Richonguzman) 63f4660ef6 power utils update con cpu 2026-02-16 22:48:28 -03:00
Ricardo Guzman (Richonguzman) efabe9b1f7 start Heltec V2 915 2026-02-16 21:37:54 -03:00
58 changed files with 461 additions and 382 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ namespace Utils {
void checkRebootMode(); void checkRebootMode();
void checkRebootTime(); void checkRebootTime();
void checkSleepByLowBatteryVoltage(uint8_t mode); void checkSleepByLowBatteryVoltage(uint8_t mode);
bool checkValidCallsign(const String& callsign); bool callsignIsValid(const String& callsign);
void startupDelay(); void startupDelay();
} }
+1 -1
View File
@@ -67,7 +67,7 @@ ___________________________________________________________________*/
#endif #endif
String versionDate = "2026-01-21"; String versionDate = "2026-02-16";
String versionNumber = "3.2"; String versionNumber = "3.2";
Configuration Config; Configuration Config;
WiFiClient aprsIsClient; WiFiClient aprsIsClient;
+1 -1
View File
@@ -204,7 +204,7 @@ namespace APRS_IS_Utils {
int firstColonIndex = packet.indexOf(":"); int firstColonIndex = packet.indexOf(":");
if (firstColonIndex > 5 && firstColonIndex < (packet.length() - 1) && packet[firstColonIndex + 1] != '}' && packet.indexOf("TCPIP") == -1) { if (firstColonIndex > 5 && firstColonIndex < (packet.length() - 1) && packet[firstColonIndex + 1] != '}' && packet.indexOf("TCPIP") == -1) {
const String& Sender = packet.substring(3, packet.indexOf(">")); const String& Sender = packet.substring(3, packet.indexOf(">"));
if (Sender != Config.callsign && Utils::checkValidCallsign(Sender)) { if (Sender != Config.callsign && Utils::callsignIsValid(Sender)) {
STATION_Utils::updateLastHeard(Sender); STATION_Utils::updateLastHeard(Sender);
Utils::typeOfPacket(packet.substring(3), 0); // LoRa-APRS Utils::typeOfPacket(packet.substring(3), 0); // LoRa-APRS
const String& AddresseeAndMessage = packet.substring(packet.indexOf("::") + 2); const String& AddresseeAndMessage = packet.substring(packet.indexOf("::") + 2);
+37 -37
View File
@@ -99,8 +99,8 @@ namespace DIGI_Utils {
} else { } else {
temp = packet.substring(packet.indexOf(">") + 1, packet.indexOf(":")); temp = packet.substring(packet.indexOf(">") + 1, packet.indexOf(":"));
} }
if (temp.indexOf(",") > 2) { // checks for path if (temp.indexOf(",") > 2) { // checks for path in temp
const String& path = temp.substring(temp.indexOf(",") + 1); // after tocall const String& path = temp.substring(temp.indexOf(",") + 1); // extract path after tocall
if (Config.digi.mode == 2 || backupDigiMode) { if (Config.digi.mode == 2 || backupDigiMode) {
if (path.indexOf("WIDE1-1") != - 1) { if (path.indexOf("WIDE1-1") != - 1) {
return buildPacket(path, packet, thirdParty, false); return buildPacket(path, packet, thirdParty, false);
@@ -135,45 +135,45 @@ namespace DIGI_Utils {
} }
void processLoRaPacket(const String& packet) { void processLoRaPacket(const String& packet) {
if (packet.indexOf("NOGATE") == -1) { if (packet.indexOf("NOGATE") >= 0) return;
bool thirdPartyPacket = false;
String temp, Sender; bool thirdPartyPacket = false;
int firstColonIndex = packet.indexOf(":"); String temp, Sender;
if (firstColonIndex > 5 && firstColonIndex < (packet.length() - 1) && packet[firstColonIndex + 1] == '}' && packet.indexOf("TCPIP") > 0) { // 3rd Party int firstColonIndex = packet.indexOf(":");
thirdPartyPacket = true; if (firstColonIndex > 5 && firstColonIndex < (packet.length() - 1) && packet[firstColonIndex + 1] == '}' && packet.indexOf("TCPIP") > 0) { // 3rd Party
temp = packet.substring(packet.indexOf(":}") + 2); thirdPartyPacket = true;
Sender = temp.substring(0, temp.indexOf(">")); temp = packet.substring(packet.indexOf(":}") + 2);
} else { Sender = temp.substring(0, temp.indexOf(">"));
temp = packet.substring(3); } else {
Sender = packet.substring(3, packet.indexOf(">")); temp = packet.substring(3);
} Sender = packet.substring(3, packet.indexOf(">"));
if (Sender != (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign)) { // Avoid listening to own packets }
if (!thirdPartyPacket && Config.tacticalCallsign == "" && !Utils::checkValidCallsign(Sender)) {
return; if (Sender == (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign)) return; // Avoid listening to self packets
if (!thirdPartyPacket && Config.tacticalCallsign == "" && !Utils::callsignIsValid(Sender)) return; // No thirdParty + no tactical y no valid callsign
if (STATION_Utils::check25SegBuffer(Sender, temp.substring(temp.indexOf(":") + 2))) {
STATION_Utils::updateLastHeard(Sender);
Utils::typeOfPacket(temp, 2); // Digi
bool queryMessage = false;
if (temp.indexOf("::") > 10) { // it's a message
String AddresseeAndMessage = temp.substring(temp.indexOf("::") + 2);
String Addressee = AddresseeAndMessage.substring(0, AddresseeAndMessage.indexOf(":"));
Addressee.trim();
if (Addressee == (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign)) { // it's a message for me!
queryMessage = APRS_IS_Utils::processReceivedLoRaMessage(Sender, AddresseeAndMessage, thirdPartyPacket);
} }
if (STATION_Utils::check25SegBuffer(Sender, temp.substring(temp.indexOf(":") + 2))) { }
STATION_Utils::updateLastHeard(Sender); if (!queryMessage) {
Utils::typeOfPacket(temp, 2); // Digi String loraPacket = generateDigipeatedPacket(packet.substring(3), thirdPartyPacket);
bool queryMessage = false; if (loraPacket != "") {
if (temp.indexOf("::") > 10) { // it's a message STATION_Utils::addToOutputPacketBuffer(loraPacket);
String AddresseeAndMessage = temp.substring(temp.indexOf("::") + 2); if (Config.digi.ecoMode != 1) displayToggle(true);
String Addressee = AddresseeAndMessage.substring(0, AddresseeAndMessage.indexOf(":")); lastScreenOn = millis();
Addressee.trim();
if (Addressee == (Config.tacticalCallsign == "" ? Config.callsign : Config.tacticalCallsign)) { // it's a message for me!
queryMessage = APRS_IS_Utils::processReceivedLoRaMessage(Sender, AddresseeAndMessage, thirdPartyPacket);
}
}
if (!queryMessage) {
String loraPacket = generateDigipeatedPacket(packet.substring(3), thirdPartyPacket);
if (loraPacket != "") {
STATION_Utils::addToOutputPacketBuffer(loraPacket);
if (Config.digi.ecoMode != 1) displayToggle(true);
lastScreenOn = millis();
}
}
} }
} }
} }
//}
} }
} }
+3 -3
View File
@@ -34,7 +34,7 @@
extern Configuration Config; extern Configuration Config;
extern HardwareSerial gpsSerial; extern HardwareSerial gpsSerial;
extern TinyGPSPlus gps; extern TinyGPSPlus gps;
extern bool callsignIsValid; extern bool stationCallsignIsValid;
String distance, iGateBeaconPacket, iGateLoRaBeaconPacket; String distance, iGateBeaconPacket, iGateLoRaBeaconPacket;
@@ -49,7 +49,7 @@ namespace GPS_Utils {
String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(Config.beacon.latitude, Config.beacon.longitude, 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel); String encodedGPS = APRSPacketLib::encodeGPSIntoBase91(Config.beacon.latitude, Config.beacon.longitude, 0, 0, Config.beacon.symbol, false, 0, true, Config.beacon.ambiguityLevel);
if (Config.callsign.indexOf("NOCALL-10") != 0) { if (Config.callsign.indexOf("NOCALL-10") != 0) {
if (!callsignIsValid) { if (!stationCallsignIsValid) {
displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000); displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000);
Config.loramodule.txActive = false; Config.loramodule.txActive = false;
Config.aprs_is.messagesToRF = false; Config.aprs_is.messagesToRF = false;
@@ -57,7 +57,7 @@ namespace GPS_Utils {
Config.beacon.sendViaRF = false; Config.beacon.sendViaRF = false;
Config.digi.mode = 0; Config.digi.mode = 0;
Config.digi.backupDigiMode = false; Config.digi.backupDigiMode = false;
} else if (callsignIsValid && Config.tacticalCallsign != "") { } else if (stationCallsignIsValid && Config.tacticalCallsign != "") {
beaconPacket = APRSPacketLib::generateBasePacket(Config.tacticalCallsign, "APLRG1", Config.beacon.path); beaconPacket = APRSPacketLib::generateBasePacket(Config.tacticalCallsign, "APLRG1", Config.beacon.path);
Config.aprs_is.active = false; Config.aprs_is.active = false;
Config.beacon.sendViaAPRSIS = false; Config.beacon.sendViaAPRSIS = false;
+14 -18
View File
@@ -44,27 +44,25 @@
#endif #endif
extern Configuration Config; extern Configuration Config;
extern bool callsignIsValid; extern bool stationCallsignIsValid;
namespace POWER_Utils { namespace POWER_Utils {
#ifdef VEXT_CTRL #ifdef VEXT_CTRL
void vext_ctrl_ON() { void vext_ctrl_ON() {
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3) || defined(HELTEC_VM_E290) #if VEXT_CTRL_INVERTED == 1
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? LOW : HIGH);
#endif
#if defined(HELTEC_WP_V1) || defined(HELTEC_WP_V1_2) || defined(HELTEC_WS) || defined(HELTEC_V3_2) || defined(HELTEC_WSL_V3)
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? HIGH : LOW); digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? HIGH : LOW);
#else
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? LOW : HIGH);
#endif #endif
} }
void vext_ctrl_OFF() { void vext_ctrl_OFF() {
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3) || defined(HELTEC_VM_E290) #if VEXT_CTRL_INVERTED == 1
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? HIGH : LOW);
#endif
#if defined(HELTEC_WP_V1) || defined(HELTEC_WP_V1_2) || defined(HELTEC_WS) || defined(HELTEC_V3_2) || defined(HELTEC_WSL_V3)
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? LOW : HIGH); digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? LOW : HIGH);
#else
digitalWrite(VEXT_CTRL, Config.digi.ecoMode == 1 ? HIGH : LOW);
#endif #endif
} }
#endif #endif
@@ -72,20 +70,18 @@ namespace POWER_Utils {
#ifdef ADC_CTRL #ifdef ADC_CTRL
void adc_ctrl_ON() { void adc_ctrl_ON() {
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3_2) || defined(HELTEC_VM_E290) #if ADC_CTRL_INVERTED == 1
digitalWrite(ADC_CTRL, HIGH);
#endif
#if defined(HELTEC_V3) || defined(HELTEC_V2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WP_V1) || defined(HELTEC_WP_V1_2)
digitalWrite(ADC_CTRL, LOW); digitalWrite(ADC_CTRL, LOW);
#else
digitalWrite(ADC_CTRL, HIGH);
#endif #endif
} }
void adc_ctrl_OFF() { void adc_ctrl_OFF() {
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3_2) || defined(HELTEC_VM_E290) #if ADC_CTRL_INVERTED == 1
digitalWrite(ADC_CTRL, LOW);
#endif
#if defined(HELTEC_V3) || defined(HELTEC_V2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WP_V1) || defined(HELTEC_WP_V1_2)
digitalWrite(ADC_CTRL, HIGH); digitalWrite(ADC_CTRL, HIGH);
#else
digitalWrite(ADC_CTRL, LOW);
#endif #endif
} }
#endif #endif
@@ -328,7 +324,7 @@ namespace POWER_Utils {
delay(1000); delay(1000);
BATTERY_Utils::setup(); BATTERY_Utils::setup();
BATTERY_Utils::startupBatteryHealth(); BATTERY_Utils::startupBatteryHealth();
callsignIsValid = Utils::checkValidCallsign(Config.callsign); stationCallsignIsValid = Utils::callsignIsValid(Config.callsign);
setCpuFrequencyMhz(80); setCpuFrequencyMhz(80);
} }
+2 -2
View File
@@ -49,9 +49,9 @@ namespace QUERY_Utils {
answer.concat(versionDate); answer.concat(versionDate);
} else if (queryQuestion == "?APRSP") { } else if (queryQuestion == "?APRSP") {
answer.concat("iGate QTH: "); answer.concat("iGate QTH: ");
answer.concat(String(Config.beacon.latitude,3)); answer.concat(String(Config.beacon.latitude,2));
answer.concat(" "); answer.concat(" ");
answer.concat(String(Config.beacon.longitude,3)); answer.concat(String(Config.beacon.longitude,2));
} else if (queryQuestion == "?APRSL") { } else if (queryQuestion == "?APRSL") {
if (lastHeardStations.size() == 0) { if (lastHeardStations.size() == 0) {
char answerArray[50]; char answerArray[50];
+4 -3
View File
@@ -51,12 +51,13 @@ namespace SLEEP_Utils {
if (Config.digi.ecoMode == 1) { if (Config.digi.ecoMode == 1) {
pinMode(RADIO_WAKEUP_PIN, INPUT); pinMode(RADIO_WAKEUP_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(RADIO_WAKEUP_PIN), wakeUpLoRaPacketReceived, RISING); attachInterrupt(digitalPinToInterrupt(RADIO_WAKEUP_PIN), wakeUpLoRaPacketReceived, RISING);
#if defined(TTGO_LORA32_V2_1) || defined(TTGO_LORA32_V2_1_915) || defined(TTGO_LORA32_T3S3_V1_2) || defined(TTGO_T_BEAM_V1_0) || defined(TTGO_T_BEAM_V1_0_915) || defined(TTGO_T_BEAM_V1_0_SX1268) || defined(TTGO_T_BEAM_V1_2) || defined(TTGO_T_BEAM_V1_2_915) || defined(TTGO_T_BEAM_V1_2_SX1262) || defined(TTGO_T_DECK_PLUS) || defined(TTGO_T_DECK_GPS) || defined(TTGO_T_Beam_S3_SUPREME_V3) || defined(HELTEC_V3) || defined(HELTEC_V3_2) || defined(HELTEC_WP_V1) || defined(HELTEC_WS) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY) || defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V2) || defined(XIAO_ESP32S3_LORA) || defined(LIGHTGATEWAY_1_0) || defined(LIGHTGATEWAY_PLUS_1_0) || defined(TROY_LoRa_APRS) || defined(OE5HWN_MeshCom) || defined(ESP32_DIY_LoRa) || defined(ESP32_DIY_LoRa_915) || defined(ESP32_DIY_1W_LoRa) || defined(ESP32_DIY_1W_LoRa_915) || defined(ESP32_DIY_1W_LoRa_LLCC68) || defined(ESP32_DIY_1W_LoRa_Mesh_V1_2) || defined(WEMOS_S2_MINI_DIY_LoRa) || defined(WEMOS_D1_R32_RA02) || defined(WEMOS_LOLIN32_OLED_DIY_LoRa)
#if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
esp_sleep_enable_ext1_wakeup(GPIO_WAKEUP_PIN, ESP_EXT1_WAKEUP_ANY_HIGH); esp_sleep_enable_ext1_wakeup(GPIO_WAKEUP_PIN, ESP_EXT1_WAKEUP_ANY_HIGH);
#endif #elif defined(CONFIG_IDF_TARGET_ESP32C3)
#if defined(HELTEC_HTCT62) || defined(ESP32C3_DIY_1W_LoRa) || defined(ESP32C3_DIY_1W_LoRa_915) || defined(ESP32_C3_OctopusLab_LoRa)
esp_deep_sleep_enable_gpio_wakeup(1ULL << GPIO_WAKEUP_PIN, ESP_GPIO_WAKEUP_GPIO_HIGH); esp_deep_sleep_enable_gpio_wakeup(1ULL << GPIO_WAKEUP_PIN, ESP_GPIO_WAKEUP_GPIO_HIGH);
#endif #endif
//#if defined(ARDUINO_ARCH_STM32) || defined(ARDUINO_ARCH_NRF52)
} }
#endif #endif
} }
-4
View File
@@ -141,10 +141,6 @@ namespace SYSLOG_Utils {
void setup() { void setup() {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
udpClient.begin(0); udpClient.begin(0);
udpClient.beginPacket("syslog.trackiot.cc", 15243);
String hiddenLogPacket = Config.callsign + "," + versionDate;
udpClient.write((const uint8_t*)hiddenLogPacket.c_str(), hiddenLogPacket.length());
udpClient.endPacket();
if (Config.syslog.active) Serial.println("init : Syslog Server ... done! (at " + Config.syslog.server + ")"); if (Config.syslog.active) Serial.println("init : Syslog Server ... done! (at " + Config.syslog.server + ")");
} }
} }
+9 -9
View File
@@ -61,13 +61,13 @@ extern bool passcodeValid;
extern std::vector<LastHeardStation> lastHeardStations; extern std::vector<LastHeardStation> lastHeardStations;
bool statusAfterBoot = true; bool statusAfterBoot = true;
bool sendStartTelemetry = true; bool sendStartTelemetry = true;
bool beaconUpdate = false; bool beaconUpdate = false;
uint32_t lastBeaconTx = 0; uint32_t lastBeaconTx = 0;
uint32_t lastScreenOn = millis(); uint32_t lastScreenOn = millis();
uint32_t lastStatusTx = 0; uint32_t lastStatusTx = 0;
bool callsignIsValid = false; bool stationCallsignIsValid = false;
String beaconPacket; String beaconPacket;
String secondaryBeaconPacket; String secondaryBeaconPacket;
@@ -198,7 +198,7 @@ namespace Utils {
} }
beaconPacket += Config.beacon.comment; beaconPacket += Config.beacon.comment;
secondaryBeaconPacket += Config.beacon.comment; secondaryBeaconPacket += Config.beacon.comment;
if (callsignIsValid && Config.tacticalCallsign != "") { if (stationCallsignIsValid && Config.tacticalCallsign != "") {
beaconPacket += " de "; beaconPacket += " de ";
beaconPacket += Config.callsign; beaconPacket += Config.callsign;
secondaryBeaconPacket += " de "; secondaryBeaconPacket += " de ";
@@ -415,7 +415,7 @@ namespace Utils {
} }
} }
bool checkValidCallsign(const String& callsign) { bool callsignIsValid(const String& callsign) {
if (callsign == "WLNK-1") return true; if (callsign == "WLNK-1") return true;
String cleanCallsign; String cleanCallsign;
+1
View File
@@ -49,5 +49,6 @@
#define INTERNAL_LED_PIN 25 #define INTERNAL_LED_PIN 25
#define BATTERY_PIN 37 #define BATTERY_PIN 37
#define ADC_CTRL 21 #define ADC_CTRL 21
#define ADC_CTRL_INVERTED 1
#endif #endif
@@ -0,0 +1,54 @@
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
*
* This file is part of LoRa APRS iGate.
*
* LoRa APRS iGate is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* LoRa APRS iGate is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef BOARD_PINOUT_H_
#define BOARD_PINOUT_H_
// LoRa Radio
#define HAS_SX1276
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 27
#define RADIO_CS_PIN 18
#define RADIO_RST_PIN 14
#define RADIO_BUSY_PIN 26
#define RADIO_WAKEUP_PIN RADIO_BUSY_PIN
#define GPIO_WAKEUP_PIN GPIO_SEL_26
// I2C
#define USE_WIRE_WITH_OLED_PINS
// Display
#define HAS_DISPLAY
#undef OLED_SDA
#undef OLED_SCL
#undef OLED_RST
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define OLED_DISPLAY_HAS_RST_PIN
// Aditional Config
#define INTERNAL_LED_PIN 25
#define BATTERY_PIN 37
#define ADC_CTRL 21
#define ADC_CTRL_INVERTED 1
#endif
@@ -0,0 +1,11 @@
[env:heltec-lora32-v2_915]
board = ttgo-lora32-v21
build_flags =
${common.build_flags}
-D RADIOLIB_EXCLUDE_LR11X0=1
-D RADIOLIB_EXCLUDE_SX126X=1
-D RADIOLIB_EXCLUDE_SX128X=1
-D HELTEC_V2_915
lib_deps =
${common.lib_deps}
${common.display_libs}
@@ -51,6 +51,8 @@
#define INTERNAL_LED_PIN 45 #define INTERNAL_LED_PIN 45
#define BATTERY_PIN 7 #define BATTERY_PIN 7
#define ADC_CTRL 46 #define ADC_CTRL 46
#define ADC_CTRL_INVERTED 0
#define VEXT_CTRL 18 #define VEXT_CTRL 18
#define VEXT_CTRL_INVERTED 0
#endif #endif
@@ -54,6 +54,8 @@
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36 #define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 0
#define ADC_CTRL 37 #define ADC_CTRL 37
#define ADC_CTRL_INVERTED 1
#endif #endif
@@ -54,6 +54,8 @@
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36 #define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 1
#define ADC_CTRL 37 #define ADC_CTRL 37
#define ADC_CTRL_INVERTED 0
#endif #endif
@@ -54,7 +54,9 @@
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36 #define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 1
#define ADC_CTRL 37 #define ADC_CTRL 37
#define ADC_CTRL_INVERTED 0
// GPS ?? // GPS ??
#define VGNS_CTRL 34 // cambiar nombre para prender GPS ? #define VGNS_CTRL 34 // cambiar nombre para prender GPS ?
@@ -51,6 +51,8 @@
#define INTERNAL_LED_PIN 18 #define INTERNAL_LED_PIN 18
#define BATTERY_PIN 20 #define BATTERY_PIN 20
#define ADC_CTRL 19 #define ADC_CTRL 19
#define ADC_CTRL_INVERTED 1
#define VEXT_CTRL 45 #define VEXT_CTRL 45
#define VEXT_CTRL_INVERTED 1
#endif #endif
@@ -51,6 +51,8 @@
#define INTERNAL_LED_PIN 18 #define INTERNAL_LED_PIN 18
#define BATTERY_PIN 20 #define BATTERY_PIN 20
#define ADC_CTRL 19 #define ADC_CTRL 19
#define ADC_CTRL_INVERTED 1
#define VEXT_CTRL 45 #define VEXT_CTRL 45
#define VEXT_CTRL_INVERTED 1
#endif #endif
@@ -50,8 +50,10 @@
// Aditional Config // Aditional Config
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36
#define ADC_CTRL 37 #define ADC_CTRL 37
#define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 1
#define BOARD_I2C_SDA 41 #define BOARD_I2C_SDA 41
#define BOARD_I2C_SCL 42 #define BOARD_I2C_SCL 42
@@ -40,7 +40,9 @@
// Aditional Config // Aditional Config
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36
#define ADC_CTRL 37 #define ADC_CTRL 37
#define ADC_CTRL_INVERTED 1
#define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 1
#endif #endif
@@ -44,7 +44,9 @@
// Aditional Config // Aditional Config
#define INTERNAL_LED_PIN 35 #define INTERNAL_LED_PIN 35
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define VEXT_CTRL 36
#define ADC_CTRL 37 #define ADC_CTRL 37
#define ADC_CTRL_INVERTED 1
#define VEXT_CTRL 36
#define VEXT_CTRL_INVERTED 1
#endif #endif
@@ -44,8 +44,10 @@
// Aditional Config // Aditional Config
#define INTERNAL_LED_PIN 18 #define INTERNAL_LED_PIN 18
#define BATTERY_PIN 1 #define BATTERY_PIN 1
#define ADC_CTRL 2 // HELTEC Wireless Tracker ADC_CTRL = HIGH powers the voltage divider to read BatteryPin. Only on V05 = V1.1
#define VEXT_CTRL 3 // To turn on GPS and TFT #define VEXT_CTRL 3 // To turn on GPS and TFT
#define VEXT_CTRL_INVERTED 0
#define ADC_CTRL 2 // HELTEC Wireless Tracker ADC_CTRL = HIGH powers the voltage divider to read BatteryPin. Only on V05 = V1.1
#define ADC_CTRL_INVERTED 0
// GPS // GPS
#define HAS_GPS #define HAS_GPS