outputBufferTest1
This commit is contained in:
parent
ba42204f03
commit
9f691f126e
|
|
@ -117,15 +117,16 @@ bool miceActive = false;
|
|||
|
||||
bool smartBeaconValue = true;
|
||||
|
||||
int ackRequestNumber; // numero generado para los request que se pediran
|
||||
uint32_t lastMsgRxTime = millis(); // tiempo que se actualiza de cada mensaje recibido
|
||||
bool ackRequestState = false; // activa proceso escucha/espera de ack enviado.
|
||||
String ackCallsignRequest = ""; // de quien espero ack
|
||||
String ackNumberRequest = ""; // cual ack espero
|
||||
|
||||
String ackCallsignRequest = ""; // de quien espero ack
|
||||
String ackNumberRequest = ""; // cual ack espero
|
||||
|
||||
int ackRequestNumber; // si
|
||||
bool ackRequestState = false;
|
||||
//
|
||||
String ackDataExpected = "";
|
||||
uint32_t lastRetryTime = millis();
|
||||
uint32_t lastMsgRxTime = millis();
|
||||
//
|
||||
|
||||
uint8_t winlinkStatus = 0;
|
||||
String winlinkMailNumber = "_?";
|
||||
|
|
@ -224,8 +225,6 @@ void loop() {
|
|||
miceActive = Config.validateMicE(currentBeacon->micE);
|
||||
}
|
||||
STATION_Utils::checkSmartBeaconValue();
|
||||
|
||||
//if (ackNumberSend >= 999) ackNumberSend = 1; // mover ??
|
||||
|
||||
POWER_Utils::batteryManager();
|
||||
|
||||
|
|
|
|||
|
|
@ -461,16 +461,13 @@ namespace KEYBOARD_Utils {
|
|||
} else if (menuDisplay == 5062) {
|
||||
menuDisplay = 50620;
|
||||
} else if (menuDisplay == 5063) {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "AL");
|
||||
} else if (menuDisplay == 5070) {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "B");
|
||||
menuDisplay = 5;
|
||||
} else if (menuDisplay == 5080) {
|
||||
menuDisplay = 5081;
|
||||
} else if (menuDisplay == 5084) {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "/EX");
|
||||
winlinkAddressee = "";
|
||||
winlinkSubject = "";
|
||||
|
|
@ -602,12 +599,10 @@ namespace KEYBOARD_Utils {
|
|||
} else if ((menuDisplay == 5021 || menuDisplay == 5031 || menuDisplay == 5041 || menuDisplay == 5051) && key == 8) {
|
||||
winlinkMailNumber = "_?";
|
||||
} else if (menuDisplay == 5021 && key == 13 && winlinkMailNumber != "_?") {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "R" + winlinkMailNumber);
|
||||
winlinkMailNumber = "_?";
|
||||
menuDisplay = 5020;
|
||||
} else if (menuDisplay == 5031 && key == 13 && winlinkMailNumber != "_?") {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "Y" + winlinkMailNumber);
|
||||
winlinkMailNumber = "_?";
|
||||
menuDisplay = 5083;
|
||||
|
|
@ -621,7 +616,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkAddressee += key;
|
||||
} else if (key == 13 && winlinkAddressee.length() > 0) {
|
||||
winlinkAddressee.trim();
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "F" + winlinkMailNumber + " " + winlinkAddressee);
|
||||
winlinkMailNumber = "_?";
|
||||
winlinkAddressee = "";
|
||||
|
|
@ -633,7 +627,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkAddressee = "";
|
||||
}
|
||||
} else if (menuDisplay == 5051 && key == 13 && winlinkMailNumber !="_?") {
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "K" + winlinkMailNumber);
|
||||
winlinkMailNumber = "_?";
|
||||
menuDisplay = 5050;
|
||||
|
|
@ -660,7 +653,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkAliasComplete += key;
|
||||
} else if (key == 13 && winlinkAliasComplete.length()>= 1) {
|
||||
winlinkAliasComplete.trim();
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "A " + winlinkAlias + "=" + winlinkAliasComplete);
|
||||
winlinkAlias = "";
|
||||
winlinkAliasComplete = "";
|
||||
|
|
@ -679,7 +671,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkAlias += key;
|
||||
} else if (key == 13 && winlinkAlias.length()>= 1) {
|
||||
winlinkAlias.trim();
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "A " + winlinkAlias + "=");
|
||||
winlinkAlias = "";
|
||||
menuDisplay = 5062;
|
||||
|
|
@ -712,7 +703,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkSubject += key;
|
||||
} else if (key == 13 && winlinkSubject.length() > 0) {
|
||||
winlinkSubject.trim();
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", "SP " + winlinkAddressee + " " + winlinkSubject);
|
||||
menuDisplay = 5083;
|
||||
} else if (key == 8) {
|
||||
|
|
@ -729,7 +719,6 @@ namespace KEYBOARD_Utils {
|
|||
winlinkBody += key;
|
||||
} else if (key == 13 && winlinkBody.length() <= 67) {
|
||||
winlinkBody.trim();
|
||||
// reemplazar con buffer
|
||||
MSG_Utils::addToOutputBuffer(1, "WLNK-1", winlinkBody);
|
||||
menuDisplay = 5084;
|
||||
} else if (key == 8) {
|
||||
|
|
|
|||
|
|
@ -31,11 +31,13 @@ extern bool digirepeaterActive;
|
|||
|
||||
extern String ackCallsignRequest;
|
||||
extern String ackNumberRequest;
|
||||
|
||||
extern int ackRequestNumber; //si
|
||||
//extern int ackNumberSend;
|
||||
extern String ackDataExpected;
|
||||
extern bool ackRequestState;
|
||||
extern int ackRequestNumber;
|
||||
|
||||
//
|
||||
extern uint32_t lastTxTime;
|
||||
extern String ackDataExpected;
|
||||
|
||||
extern uint8_t winlinkStatus;
|
||||
|
||||
extern APRSPacket lastReceivedPacket;
|
||||
|
|
@ -226,15 +228,13 @@ namespace MSG_Utils {
|
|||
}
|
||||
}
|
||||
|
||||
void sendMessage(uint8_t typeOfMessage, String station, String textMessage) {
|
||||
void sendMessage(String station, String textMessage) {
|
||||
String newPacket = APRSPacketLib::generateMessagePacket(currentBeacon->callsign, "APLRT1", Config.path, station, textMessage);
|
||||
#if HAS_TFT
|
||||
cleanTFT();
|
||||
#endif
|
||||
/*if (textMessage.indexOf("ack") == 0) {
|
||||
if (station != "WLNK-1") { // don't show Winlink ACK
|
||||
show_display("<<ACK Tx>>", 500);
|
||||
}
|
||||
if (textMessage.indexOf("ack") == 0 && station != "WLNK-1") { // don't show Winlink ACK
|
||||
show_display("<<ACK Tx>>", 500);
|
||||
} else if (station.indexOf("CA2RXU-15") == 0 && textMessage.indexOf("wrl") == 0) {
|
||||
show_display("<WEATHER>","", "--- Sending Query ---", 1000);
|
||||
} else {
|
||||
|
|
@ -244,12 +244,6 @@ namespace MSG_Utils {
|
|||
show_display("MSG Tx >>", "", newPacket, 1000);
|
||||
}
|
||||
}
|
||||
if (typeOfMessage == 1) { //forced to send MSG with ack confirmation
|
||||
ackNumberSend++;
|
||||
newPacket += "{" + String(ackNumberSend);
|
||||
}*/
|
||||
|
||||
// MSG_Utils::addToOutputBuffer
|
||||
LoRa_Utils::sendNewPacket(newPacket);
|
||||
}
|
||||
|
||||
|
|
@ -269,75 +263,73 @@ namespace MSG_Utils {
|
|||
}
|
||||
}
|
||||
|
||||
void processOutputBuffer() { // todos los mensajes de salida deben llegar a este buffer !!!
|
||||
|
||||
/* no olvidar revisar que los mensajes no se envien muy pronto despues de gps
|
||||
ni los de gps despues de mensajes
|
||||
lastOutputBufferTx ????
|
||||
lastMsgRxTime??
|
||||
*/
|
||||
|
||||
uint32_t lastOutputBufferTx = millis() - lastMsgRxTime;
|
||||
if (!outputMessagesBuffer.empty() && lastOutputBufferTx >= 4500) {
|
||||
void processOutputBuffer() {
|
||||
if (!outputMessagesBuffer.empty() && (millis() - lastMsgRxTime) >= 4500 && (millis() - lastTxTime) > 3000) {
|
||||
String addressee = outputMessagesBuffer[0].substring(0, outputMessagesBuffer[0].indexOf(","));
|
||||
String payload = outputMessagesBuffer[0].substring(outputMessagesBuffer[0].indexOf(",") + 1);
|
||||
if (payload.indexOf("{") > 0) { // message Has ack Request
|
||||
outputAckRequestBuffer.push_back("5," + addressee + "," + payload); // 5 is for ack packets retries
|
||||
String message = outputMessagesBuffer[0].substring(outputMessagesBuffer[0].indexOf(",") + 1);
|
||||
if (message.indexOf("{") > 0) { // message with ack Request
|
||||
outputAckRequestBuffer.push_back("6," + addressee + "," + message); // 5 is for ack packets retries
|
||||
outputMessagesBuffer.erase(outputMessagesBuffer.begin());
|
||||
lastMsgRxTime = millis(); // ??
|
||||
} else { // Normal message without ack Request
|
||||
/*unit32-t lastPacketTx = millis() - lastTxTime;
|
||||
if (lastPacketTx > 7 * 1000) { // no enviar un mensaje antes de 7 segundos del ultimo gps.
|
||||
}*/
|
||||
sendMessage(0, addressee, payload); //????? cero??
|
||||
} else { // message without ack Request
|
||||
sendMessage(addressee, message);
|
||||
outputMessagesBuffer.erase(outputMessagesBuffer.begin());
|
||||
lastMsgRxTime = millis(); // ?
|
||||
lastTxTime = millis();
|
||||
}
|
||||
}
|
||||
if (outputAckRequestBuffer.empty()) {
|
||||
ackRequestState = false; /// validar que donde se escuchan packets se revise si recibio X ack para sacarlo de los retrys
|
||||
} else if (!outputAckRequestBuffer.empty() && lastOutputBufferTx >= 4500) {
|
||||
/* asegurarse que la creacion del mensaje desde su origen agregue el ackNumber y no en el sendMessage!!! */
|
||||
ackRequestState = false;
|
||||
} else if (!outputAckRequestBuffer.empty() && (millis() - lastMsgRxTime) >= 4500 && (millis() - lastTxTime) > 3000) {
|
||||
bool sendRetry = false;
|
||||
String triesLeftString = outputAckRequestBuffer[0].substring(0 , outputAckRequestBuffer[0].indexOf(","));
|
||||
int triesLeft = triesLeftString.toInt();
|
||||
switch (triesLeft) {
|
||||
case 5:
|
||||
String triesLeft = outputAckRequestBuffer[0].substring(0 , outputAckRequestBuffer[0].indexOf(","));
|
||||
switch (triesLeft.toInt()) {
|
||||
case 6:
|
||||
sendRetry = true;
|
||||
ackRequestState = true;
|
||||
break;
|
||||
case 5:
|
||||
if (millis() - lastRetryTime > 30 * 1000) sendRetry = true;
|
||||
break;
|
||||
case 4:
|
||||
if (millis() - lastRetryTime > 30 * 1000) sendRetry = true;
|
||||
if (millis() - lastRetryTime > 60 * 1000) sendRetry = true;
|
||||
break;
|
||||
case 3:
|
||||
if (millis() - lastRetryTime > 30 * 1000) sendRetry = true;
|
||||
if (millis() - lastRetryTime > 120 * 1000) sendRetry = true;
|
||||
break;
|
||||
case 2:
|
||||
if (millis() - lastRetryTime > 90 * 1000) sendRetry = true;
|
||||
if (millis() - lastRetryTime > 120 * 1000) sendRetry = true;
|
||||
break;
|
||||
case 1:
|
||||
if (millis() - lastRetryTime > 180 * 1000) sendRetry = true;
|
||||
if (millis() - lastRetryTime > 120 * 1000) sendRetry = true;
|
||||
break;
|
||||
case 0:
|
||||
if (millis() - lastRetryTime > 30 * 1000) {
|
||||
ackRequestNumber = false;
|
||||
outputAckRequestBuffer.erase(outputAckRequestBuffer.begin());
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (sendRetry) {
|
||||
String rest = outputAckRequestBuffer[0].substring(outputAckRequestBuffer[0].indexOf(",") + 1);
|
||||
ackCallsignRequest = rest.substring(0, rest.indexOf(","));
|
||||
String payload = rest.substring(rest.indexOf(",") + 1);
|
||||
ackNumberRequest = payload.substring(payload.indexOf("{") + 1);
|
||||
ackRequestState = true;
|
||||
sendMessage(1, ackCallsignRequest, payload); // cambiar "1" !!! //????? cero??
|
||||
ackNumberRequest = payload.substring(payload.indexOf("{") + 1);
|
||||
sendMessage(ackCallsignRequest, payload);
|
||||
lastTxTime = millis();
|
||||
lastRetryTime = millis();
|
||||
if (triesLeft == 1) {
|
||||
outputAckRequestBuffer.erase(outputAckRequestBuffer.begin());
|
||||
} else {
|
||||
outputAckRequestBuffer[0] = String(triesLeft - 1) + "," + ackCallsignRequest + "," + payload;
|
||||
}
|
||||
outputAckRequestBuffer[0] = String(triesLeft.toInt() - 1) + "," + ackCallsignRequest + "," + payload;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void checkReceivedMessage(ReceivedLoRaPacket packet) {
|
||||
|
||||
/*
|
||||
|
||||
agregar revisor de no escuchar o pescar el mismo packet que recien escucho hace X segundos... buffer de 5 o 10?
|
||||
|
||||
*/
|
||||
|
||||
|
||||
if(packet.text.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -372,7 +364,8 @@ namespace MSG_Utils {
|
|||
if (ackRequestState && lastReceivedPacket.message.indexOf("ack") == 0) {
|
||||
ackAnswer = lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf("ack") + 3);
|
||||
if (ackCallsignRequest == lastReceivedPacket.sender && ackNumberRequest == ackAnswer) {
|
||||
// lo saco del buffer de ackrequest
|
||||
outputAckRequestBuffer.erase(outputAckRequestBuffer.begin());
|
||||
ackRequestState = false;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
|
@ -380,7 +373,7 @@ namespace MSG_Utils {
|
|||
if (lastReceivedPacket.message.indexOf("{") >= 0) {
|
||||
String ackMessage = "ack" + lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf("{") + 1);
|
||||
ackMessage.trim();
|
||||
addToOutputBuffer(0, lastReceivedPacket.sender, ackMessage);
|
||||
MSG_Utils::addToOutputBuffer(0, lastReceivedPacket.sender, ackMessage);
|
||||
lastMsgRxTime = millis();
|
||||
lastReceivedPacket.message = lastReceivedPacket.message.substring(0, lastReceivedPacket.message.indexOf("{"));
|
||||
}
|
||||
|
|
@ -389,7 +382,7 @@ namespace MSG_Utils {
|
|||
}
|
||||
if (lastReceivedPacket.message.indexOf("ping") == 0 || lastReceivedPacket.message.indexOf("Ping") == 0 || lastReceivedPacket.message.indexOf("PING") == 0) {
|
||||
lastMsgRxTime = millis();
|
||||
addToOutputBuffer(0, lastReceivedPacket.sender, "pong, 73!");
|
||||
MSG_Utils::addToOutputBuffer(0, lastReceivedPacket.sender, "pong, 73!");
|
||||
}
|
||||
if (lastReceivedPacket.sender == "CA2RXU-15" && lastReceivedPacket.message.indexOf("WX") == 0) { // WX = WeatherReport
|
||||
Serial.println("Weather Report Received");
|
||||
|
|
@ -427,19 +420,10 @@ namespace MSG_Utils {
|
|||
} else if (lastReceivedPacket.message.indexOf("Login [") == 0) {
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Winlink","---> Challenge received");
|
||||
WINLINK_Utils::processWinlinkChallenge(lastReceivedPacket.message.substring(lastReceivedPacket.message.indexOf("[")+1,lastReceivedPacket.message.indexOf("]")));
|
||||
// controlar en proceso anterior tirar al outputMessagesBuffer tambien!
|
||||
lastMsgRxTime = millis();
|
||||
winlinkStatus = 3;
|
||||
menuDisplay = 501;
|
||||
} /*
|
||||
que pasa si es que se reinicio pero esta logeado en las 2 horas?
|
||||
|
||||
else if (winlinkStatus == 2 && lastReceivedPacket.message.indexOf("Login [") == -1) {
|
||||
Serial.println("We were already logged to WINLINK!!!!");
|
||||
show_display("_WINLINK_>", "", " LOGGED !!!!", 2000);
|
||||
winlinkStatus = 5;
|
||||
menuDisplay = 5000;
|
||||
} */else if (winlinkStatus == 3 && ackNumberRequest == ackAnswer) {
|
||||
} else if (winlinkStatus == 3 && ackNumberRequest == ackAnswer) {
|
||||
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Winlink","---> Challenge Answer Send"); // edit show_display : Challenge Answer Send!!!!
|
||||
lastMsgRxTime = millis();
|
||||
winlinkStatus = 4;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace MSG_Utils {
|
|||
void ledNotification();
|
||||
void deleteFile(String typeOfFile);
|
||||
void saveNewMessage(String typeMessage, String station, String newMessage);
|
||||
void sendMessage(uint8_t typeOfMessage, String station, String textMessage);
|
||||
void sendMessage(String station, String textMessage);
|
||||
String ackRequestNumberGenerator();
|
||||
void addToOutputBuffer(uint8_t typeOfMessage, String station, String textMessage);
|
||||
void processOutputBuffer();
|
||||
|
|
|
|||
Loading…
Reference in New Issue