-
-
Notifications
You must be signed in to change notification settings - Fork 72
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7e4fdff
commit 47e6623
Showing
5 changed files
with
283 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,200 @@ | ||
#include "configuration.h" | ||
#include "aprs_is_utils.h" | ||
#include "A7670_utils.h" | ||
#include "pins_config.h" | ||
#include "lora_utils.h" | ||
#include "display.h" | ||
#include "utils.h" | ||
|
||
#if defined(ESP32_DIY_LoRa_A7670) | ||
#define TINY_GSM_MODEM_SIM7600 //The AT instruction of A7670 is compatible with SIM7600 | ||
#define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb | ||
#define SerialAT Serial1 | ||
#include <TinyGsmClient.h> | ||
#include <StreamDebugger.h> | ||
StreamDebugger debugger(SerialAT, Serial); | ||
TinyGsm modem(debugger); | ||
|
||
extern Configuration Config; | ||
extern String firstLine; | ||
|
||
bool modemStartUp = false; | ||
bool serverStartUp = false; | ||
bool userBytesSended = false; | ||
bool beaconBytesSended = false; | ||
bool beaconSended = false; | ||
bool stationBeacon = false; | ||
|
||
extern bool modemLoggedToAPRSIS; | ||
|
||
|
||
namespace A7670_Utils { | ||
|
||
bool checkModemOn() { | ||
bool modemReady = false; | ||
Serial.print("Starting Modem ... "); | ||
show_display(firstLine, "Starting Modem...", 0); | ||
|
||
pinMode(A7670_ResetPin, OUTPUT); //A7670 Reset | ||
digitalWrite(A7670_ResetPin, LOW); | ||
delay(100); | ||
digitalWrite(A7670_ResetPin, HIGH); | ||
delay(3000); | ||
digitalWrite(A7670_ResetPin, LOW); | ||
|
||
pinMode(A7670_PWR_PIN, OUTPUT); | ||
digitalWrite(A7670_PWR_PIN, LOW); | ||
delay(100); | ||
digitalWrite(A7670_PWR_PIN, HIGH); | ||
delay(1000); | ||
digitalWrite(A7670_PWR_PIN, LOW); | ||
|
||
int i = 20; | ||
while (i) { | ||
SerialAT.println("AT"); | ||
delay(500); | ||
if (SerialAT.available()) { | ||
String r = SerialAT.readString(); | ||
//Serial.println(r); | ||
if ( r.indexOf("OK") >= 0 ) { | ||
modemReady = true; | ||
i = 1; | ||
Serial.println("Modem Ready!\n"); | ||
show_display(firstLine, "Starting Modem...", "---> Modem Ready", 0); | ||
return true; | ||
} | ||
} | ||
if (!modemReady) { | ||
delay(500); | ||
} | ||
i--; | ||
} | ||
return false; | ||
} | ||
|
||
void setup() { | ||
SerialAT.begin(115200, SERIAL_8N1, A7670_RX_PIN, A7670_TX_PIN); | ||
if (checkModemOn()) {; | ||
delay(1000); | ||
//setup_gps(); // if gps active / won't be need for now | ||
} else { | ||
show_display(firstLine, "Starting Modem...", "---> Failed !!!", 0); | ||
Serial.println(F("*********** Failed to connect to the modem! ***********")); | ||
} | ||
} | ||
|
||
bool checkATResponse(String ATMessage) { | ||
int delayATMessage = 3000; | ||
bool validAT = false; | ||
//Serial.println(ATMessage); | ||
int i = 10; | ||
while (i) { | ||
if (!validAT) { | ||
SerialAT.println(ATMessage); | ||
} | ||
delay(500); | ||
if (SerialAT.available()) { | ||
String response = SerialAT.readString(); | ||
//Serial.println(response); // DEBUG of Modem AT message | ||
if(response.indexOf("verified") >= 0) { | ||
Serial.println("Logged! (User Validated)\n"); | ||
show_display(firstLine, "Connecting APRS-IS...", "---> Logged!", 1000); | ||
Serial.println("#################### APRS-IS FEED ####################"); | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (ATMessage == "AT+NETOPEN" && response.indexOf("OK") >= 0) { | ||
Serial.println("Port Open!"); | ||
show_display(firstLine, "Opening Port...", "---> Port Open", 0); | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (ATMessage == "AT+NETOPEN" && response.indexOf("Network is already opened") >= 0) { | ||
Serial.println("Port Open! (was already opened)"); | ||
show_display(firstLine, "Opening Port...", "---> Port Open", 0); | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (ATMessage.indexOf("AT+CIPOPEN") == 0 && response.indexOf("PB DONE") >= 0) { | ||
Serial.println("Contacted!"); | ||
show_display(firstLine, "Connecting APRS-IS...", "---> Contacted", 0); | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (ATMessage.indexOf("AT+CIPSEND=0,") == 0 && response.indexOf(">") >= 0) { | ||
Serial.print("."); | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (ATMessage.indexOf(Config.callsign) >= 3 && !modemLoggedToAPRSIS && response.indexOf("OK") >= 0 && !stationBeacon) { // login info | ||
validAT = true; | ||
delayATMessage = 0; | ||
} else if (ATMessage.indexOf(Config.callsign) == 0 && !beaconSended && response.indexOf("OK") >= 0 && !stationBeacon) { // self beacon or querys | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} else if (stationBeacon && response.indexOf("OK") >= 0) { //upload others beacons | ||
validAT = true; | ||
i = 1; | ||
delayATMessage = 0; | ||
} | ||
} | ||
delay(delayATMessage); | ||
i--; | ||
} | ||
return validAT; | ||
} | ||
|
||
void APRS_IS_connect() { | ||
String loginInfo = "user " + Config.callsign + " pass " + String(Config.aprs_is.passcode) + " vers CA2RXU_LoRa_iGate 1.3 filter " + Config.aprs_is.filter; | ||
Serial.println("-----> Connecting to APRS IS"); | ||
while (!modemStartUp) { | ||
Serial.print("Opening Port... "); | ||
show_display(firstLine, "Opening Port...", 0); | ||
modemStartUp = checkATResponse("AT+NETOPEN"); | ||
delay(2000); | ||
} while (!serverStartUp) { | ||
Serial.print("Connecting APRS-IS Server... "); | ||
show_display(firstLine, "Connecting APRS-IS...", 0); | ||
serverStartUp = checkATResponse("AT+CIPOPEN=0,\"TCP\",\"" + String(Config.aprs_is.server) + "\"," + String(Config.aprs_is.port)); | ||
delay(2000); | ||
} while (!userBytesSended) { | ||
Serial.print("Writing User Login Data "); | ||
show_display(firstLine, "Connecting APRS-IS...", "---> User Login Data", 0); | ||
userBytesSended = checkATResponse("AT+CIPSEND=0," + String(loginInfo.length()+1)); | ||
delay(2000); | ||
} while (!modemLoggedToAPRSIS) { | ||
Serial.print("."); | ||
modemLoggedToAPRSIS = checkATResponse(loginInfo); | ||
delay(2000); | ||
} | ||
} | ||
|
||
void uploadToAPRSIS(String packet) { | ||
beaconBytesSended = checkATResponse("AT+CIPSEND=0," + String(packet.length()+1)); | ||
delay(2000); | ||
if (beaconBytesSended) { | ||
Serial.print("."); | ||
beaconSended = checkATResponse(packet); | ||
} | ||
if (!beaconSended) { | ||
Serial.println("------------------------------------> UPLOAD FAILED!!!"); | ||
} else { | ||
Serial.println("Packet Uploaded to APRS-IS!"); | ||
} | ||
beaconBytesSended = false; | ||
beaconSended = false; | ||
} | ||
|
||
void listenAPRSIS() { | ||
if (SerialAT.available()) { | ||
String packetAPRSIS = SerialAT.readStringUntil('\r'); | ||
packetAPRSIS.trim(); | ||
if (!packetAPRSIS.startsWith("#") && packetAPRSIS.indexOf("+IPD") == -1 && packetAPRSIS.indexOf("RECV") == -1 && packetAPRSIS.length() > 0) { | ||
APRS_IS_Utils::processAPRSISPacket(packetAPRSIS); | ||
} | ||
} | ||
delay(1); | ||
} | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
#ifndef A7670_UTILS_H_ | ||
#define A7670_UTILS_H_ | ||
|
||
#include <Arduino.h> | ||
|
||
namespace A7670_Utils { | ||
|
||
bool checkModemOn(); | ||
void setup(); | ||
bool checkATResponse(String ATMessage); | ||
void APRS_IS_connect(); | ||
void uploadToAPRSIS(String packet); | ||
void listenAPRSIS(); | ||
|
||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.