|
|
|
@ -4,7 +4,7 @@ bool validateTNC2Frame(const String &tnc2FormattedFrame); |
|
|
|
|
|
|
|
|
|
String encode_address_ax25(String tnc2Address); |
|
|
|
|
String decode_address_ax25(const String &ax25Address, bool &isLast, bool isRelay); |
|
|
|
|
String decode_path_ax25(const String &ax25Address, bool &isLast, bool isRelay); |
|
|
|
|
String decode_path_ax25(const String &ax25Address); |
|
|
|
|
|
|
|
|
|
bool validateKISSFrame(const String &kissFormattedFrame); |
|
|
|
|
|
|
|
|
@ -137,23 +137,19 @@ String decapsulateKISS(const String &frame) { |
|
|
|
|
String decode_kiss(const String &inputKISSTNCFrame, bool &dataFrame, bool &pktFrame) { |
|
|
|
|
String TNC2Frame = ""; |
|
|
|
|
|
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame))
|
|
|
|
|
{ |
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame)) { |
|
|
|
|
dataFrame = inputKISSTNCFrame.charAt(1) == CMD_DATA; |
|
|
|
|
String ax25Frame = decapsulateKISS(inputKISSTNCFrame); |
|
|
|
|
bool isLast = false; |
|
|
|
|
String dest_1 = decode_path_ax25(ax25Frame.substring(14, 56), isLast, false); |
|
|
|
|
for (int p = 0; p <= dest_1.indexOf("WIDE"); p++) { pktFrame = true; } |
|
|
|
|
String dest_2 = decode_path_ax25(ax25Frame.substring(14, 56), isLast, false); |
|
|
|
|
for (int p = 0; p <= dest_2.indexOf("ECHO"); p++) { pktFrame = true; } |
|
|
|
|
String dest_3 = decode_path_ax25(ax25Frame.substring(14, 56), isLast, false); |
|
|
|
|
for (int p = 0; p <= dest_3.indexOf("TRACE"); p++) { pktFrame = true; } |
|
|
|
|
String dest_4 = decode_path_ax25(ax25Frame.substring(14, 56), isLast, false); |
|
|
|
|
for (int p = 0; p <= dest_4.indexOf("RELAY"); p++) { pktFrame = true; } |
|
|
|
|
String dest_5 = decode_path_ax25(ax25Frame.substring(14, 56), isLast, false); |
|
|
|
|
for (int p = 0; p <= dest_5.indexOf("TCPIP"); p++) { pktFrame = true; } |
|
|
|
|
}
|
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame)) { |
|
|
|
|
dataFrame = inputKISSTNCFrame.charAt(1) == CMD_DATA; |
|
|
|
|
String dest_1 = decode_path_ax25(ax25Frame.substring(14, 56)); |
|
|
|
|
for (int p = 0; p <= dest_1.indexOf("WIDE"); p++) { pktFrame = true;} |
|
|
|
|
String dest_2 = decode_path_ax25(ax25Frame.substring(14, 56)); |
|
|
|
|
for (int p = 0; p <= dest_2.indexOf("ECHO"); p++) { pktFrame = true;} |
|
|
|
|
String dest_3 = decode_path_ax25(ax25Frame.substring(14, 56)); |
|
|
|
|
for (int p = 0; p <= dest_3.indexOf("TRACE"); p++) { pktFrame = true;} |
|
|
|
|
String dest_4 = decode_path_ax25(ax25Frame.substring(14, 56)); |
|
|
|
|
for (int p = 0; p <= dest_4.indexOf("RELAY"); p++) { pktFrame = true;} |
|
|
|
|
String dest_5 = decode_path_ax25(ax25Frame.substring(0, 7)); |
|
|
|
|
for (int p = 0; p <= dest_5.indexOf("APRS"); p++) { pktFrame = true;} |
|
|
|
|
if (dataFrame && !pktFrame) { |
|
|
|
|
String ax25Frame = decapsulateKISS(inputKISSTNCFrame); |
|
|
|
|
delay(250); |
|
|
|
@ -245,7 +241,7 @@ String decode_address_ax25(const String &ax25Address, bool &isLast, bool isRelay |
|
|
|
|
return TNCAddress; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String decode_path_ax25(const String &ax25Address, bool &isLast, bool isRelay) { |
|
|
|
|
String decode_path_ax25(const String &ax25Address) { |
|
|
|
|
String TNCAddress = ""; |
|
|
|
|
for (int i = 0; i < 42; ++i) { |
|
|
|
|
uint8_t currentCharacter = ax25Address.charAt(i); |
|
|
|
@ -254,13 +250,6 @@ String decode_path_ax25(const String &ax25Address, bool &isLast, bool isRelay) { |
|
|
|
|
TNCAddress += (char) currentCharacter; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
auto ssid_char = (uint8_t) ax25Address.charAt(6); |
|
|
|
|
int ssid = 0b1111 & ssid_char; |
|
|
|
|
if (ssid)
|
|
|
|
|
{ |
|
|
|
|
TNCAddress += '-'; |
|
|
|
|
TNCAddress += ssid; |
|
|
|
|
} |
|
|
|
|
return TNCAddress; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|