diff --git a/lib/APRSPacketLib/APRSPacketLib.cpp b/lib/APRSPacketLib/APRSPacketLib.cpp index e95875c..9988eec 100644 --- a/lib/APRSPacketLib/APRSPacketLib.cpp +++ b/lib/APRSPacketLib/APRSPacketLib.cpp @@ -236,6 +236,7 @@ namespace APRSPacketLib { } String generateMessagePacket(String callsign, String tocall, String path, String addressee, String message) { + message.trim(); for(int i = addressee.length(); i < 9; i++) { addressee += ' '; } diff --git a/src/LoRa_APRS_Tracker.cpp b/src/LoRa_APRS_Tracker.cpp index 8234d72..e983350 100644 --- a/src/LoRa_APRS_Tracker.cpp +++ b/src/LoRa_APRS_Tracker.cpp @@ -94,6 +94,7 @@ bool sosActive = false; bool disableGPS; bool miceActive = false; +int ackNumberSend; APRSPacket lastReceivedPacket; @@ -138,6 +139,7 @@ void setup() { LoRa_Utils::setup(); BME_Utils::setup(); STATION_Utils::loadCallsignIndex(); + ackNumberSend = random(1,999); WiFi.mode(WIFI_OFF); logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "WiFi controller stopped"); @@ -170,13 +172,19 @@ void loop() { Config.validateConfigFile(currentBeacon->callsign); miceActive = Config.validateMicE(currentBeacon->micE); } + + if (ackNumberSend >= 999) { + ackNumberSend = 1; + } POWER_Utils::batteryManager(); + if (!Config.simplifiedTrackerMode) { #ifdef HAS_BUTTON userButton.tick(); #endif } + Utils::checkDisplayEcoMode(); if (keyboardConnected) { diff --git a/src/keyboard_utils.cpp b/src/keyboard_utils.cpp index 75ab45a..68e7a9d 100644 --- a/src/keyboard_utils.cpp +++ b/src/keyboard_utils.cpp @@ -208,21 +208,21 @@ namespace KEYBOARD_Utils { menuDisplay = 1300; } else { show_display(" APRS Thu.", "Sending:", "Happy #APRSThursday", "from LoRa Tracker 73!", 2000); - MSG_Utils::sendMessage("ANSRVR","CQ HOTG Happy #APRSThursday from LoRa Tracker 73!"); + MSG_Utils::sendMessage(0, "ANSRVR", "CQ HOTG Happy #APRSThursday from LoRa Tracker 73!"); } } else if (menuDisplay == 131) { if (keyDetected) { menuDisplay = 1310; } else { show_display(" APRS Thu.", "Sending:", "Happy #APRSThursday", "from LoRa Tracker 73!", 2000); - MSG_Utils::sendMessage("APRSPH","HOTG Happy #APRSThursday from LoRa Tracker 73!"); + MSG_Utils::sendMessage(0, "APRSPH", "HOTG Happy #APRSThursday from LoRa Tracker 73!"); } } else if (menuDisplay == 132) { show_display(" APRS Thu.", "", " Unsubscribe", " from APRS Thursday", 2000); - MSG_Utils::sendMessage("ANSRVR","U HOTG"); + MSG_Utils::sendMessage(0, "ANSRVR", "U HOTG"); } else if (menuDisplay == 133) { show_display(" APRS Thu.", "", " Keep Subscribed" ," for 12hours more", 2000); - MSG_Utils::sendMessage("ANSRVR","K HOTG"); + MSG_Utils::sendMessage(0, "ANSRVR", "K HOTG"); } else if (menuDisplay == 210) { @@ -251,7 +251,7 @@ namespace KEYBOARD_Utils { else if (menuDisplay == 4) { logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, "Loop", "%s", "wrl"); - MSG_Utils::sendMessage("CA2RXU-15","wrl"); + MSG_Utils::sendMessage(0, "CA2RXU-15", "wrl"); } else if (menuDisplay == 5) { show_display("_WINLINK_", "still on", "development..", 2000); ///////////////////////// @@ -340,15 +340,15 @@ namespace KEYBOARD_Utils { messageText = messageText.substring(0,67); } if (menuDisplay==111) { - MSG_Utils::sendMessage(messageCallsign, messageText); + MSG_Utils::sendMessage(0, messageCallsign, messageText); menuDisplay = 11; } else if (menuDisplay==1300) { messageCallsign = "ANSRVR"; - MSG_Utils::sendMessage(messageCallsign, "CQ HOTG " + messageText); + MSG_Utils::sendMessage(0, messageCallsign, "CQ HOTG " + messageText); menuDisplay = 130; } else if (menuDisplay==1310) { messageCallsign = "APRSPH"; - MSG_Utils::sendMessage(messageCallsign, "HOTG " + messageText); + MSG_Utils::sendMessage(0, messageCallsign, "HOTG " + messageText); menuDisplay = 131; } messageCallsign = ""; diff --git a/src/menu_utils.cpp b/src/menu_utils.cpp index d5d933f..5a65362 100644 --- a/src/menu_utils.cpp +++ b/src/menu_utils.cpp @@ -304,6 +304,21 @@ namespace MENU_Utils { // waiting for Weather Report break; + case 50: // 5.Winlink + // check si no esta logeado o si + show_display("__WINLINK_", "" , "Login Initiation ...", "", "" , " waiting", "" , " sended", "" , " ack ...", "" , " Flashlight show_display("__EXTRAS__", "> Flashlight (" + checkProcessActive(flashlight) + ")", " DigiRepeater (" + checkProcessActive(digirepeaterActive) + ")", " S.O.S. (" + checkProcessActive(sosActive) + ")","",lastLine); break; diff --git a/src/msg_utils.cpp b/src/msg_utils.cpp index a7fb812..3059160 100644 --- a/src/msg_utils.cpp +++ b/src/msg_utils.cpp @@ -24,19 +24,14 @@ extern uint32_t messageLedTime; extern bool digirepeaterActive; -extern APRSPacket lastReceivedPacket; +extern int ackNumberSend; -String firstNearTracker = ""; -String secondNearTracker = ""; -String thirdNearTracker = ""; -String fourthNearTracker = ""; +extern APRSPacket lastReceivedPacket; String lastMessageAPRS = ""; int numAPRSMessages = 0; bool noMessageWarning = false; String lastHeardTracker = "NONE"; -uint32_t lastDeleteListenedTracker = millis(); - namespace MSG_Utils { @@ -146,14 +141,24 @@ namespace MSG_Utils { } } - void sendMessage(String station, String textMessage) { + void sendMessage(int typeOfMessage, String station, String textMessage) { String newPacket = APRSPacketLib::generateMessagePacket(currentBeacon->callsign,"APLRT1",Config.path,station,textMessage); if (textMessage.indexOf("ack")== 0) { - show_display("<>", 500); + if (station != "WLNK-1") { // don't show Winlink ACK + show_display("<>", 500); + } } else if (station.indexOf("CA2RXU-15") == 0 && textMessage.indexOf("wrl")==0) { show_display("","", "--- Sending Query ---", 1000); } else { - show_display("MSG Tx >>", "", newPacket, 1000); + if (station == "WLNK-1") { + show_display("WINLINK Tx", "", newPacket, 1000); + } else { + show_display("MSG Tx >>", "", newPacket, 1000); + } + } + if (typeOfMessage==1) { //forced to send MSG with ack confirmation + ackNumberSend++; + newPacket += "{" + String(ackNumberSend); } LoRa_Utils::sendNewPacket(newPacket); } @@ -189,7 +194,7 @@ namespace MSG_Utils { String ackMessage = "ack" + lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf("{")+1); ackMessage.trim(); delay(4000); - sendMessage(lastReceivedPacket.sender, ackMessage); + sendMessage(0, lastReceivedPacket.sender, ackMessage); lastReceivedPacket.message = lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf(":")+1, lastReceivedPacket.message.indexOf("{")); } else { lastReceivedPacket.message = lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf(":")+1); @@ -199,7 +204,7 @@ namespace MSG_Utils { } if (lastReceivedPacket.message.indexOf("ping")==0 || lastReceivedPacket.message.indexOf("Ping")==0 || lastReceivedPacket.message.indexOf("PING")==0) { delay(4000); - sendMessage(lastReceivedPacket.sender, "pong, 73!"); + sendMessage(0, lastReceivedPacket.sender, "pong, 73!"); } if (lastReceivedPacket.sender == "CA2RXU-15" && lastReceivedPacket.message.indexOf("WX")==0) { // WX = WeatherReport Serial.println("Weather Report Received"); diff --git a/src/msg_utils.h b/src/msg_utils.h index 796b9a3..1da6f1b 100644 --- a/src/msg_utils.h +++ b/src/msg_utils.h @@ -14,7 +14,7 @@ namespace MSG_Utils { void ledNotification(); void deleteFile(); void saveNewMessage(String typeMessage, String station, String newMessage); - void sendMessage(String station, String textMessage); + void sendMessage(int typeOfMessage, String station, String textMessage); void checkReceivedMessage(ReceivedLoRaPacket packetReceived); } diff --git a/src/station_utils.cpp b/src/station_utils.cpp index 80e10c2..38af230 100644 --- a/src/station_utils.cpp +++ b/src/station_utils.cpp @@ -19,12 +19,6 @@ extern std::vector lastHeardStation; extern std::vector lastHeardStation_temp; extern int myBeaconsIndex; -extern String firstNearTracker; -extern String secondNearTracker; -extern String thirdNearTracker; -extern String fourthNearTracker; - -extern uint32_t lastDeleteListenedTracker; extern uint32_t lastTx; extern uint32_t lastTxTime; @@ -47,6 +41,13 @@ extern double lastTxDistance; extern bool miceActive; +String firstNearTracker; +String secondNearTracker; +String thirdNearTracker; +String fourthNearTracker; + +uint32_t lastDeleteListenedTracker; + namespace STATION_Utils { diff --git a/src/winlink_utils.cpp b/src/winlink_utils.cpp index ff0acf5..b074f02 100644 --- a/src/winlink_utils.cpp +++ b/src/winlink_utils.cpp @@ -19,6 +19,30 @@ namespace WINLINK_Utils { void login() { Serial.println("Starting Winlink Login"); + /* + ---genero ack number en random + ---reviso si llega a 999 y paso a 1 + + menu50 seria: + si no logged: + start login + read msg/mails + delete all msg/mails + + + si esta logeado pasa a otro menu de : + L + R + Y + B + y mas + + + */ + + + + // enviar "L" con ack // recibir ack - esperar challenge // recibir challenge con ack