|
|
|
@ -4,6 +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);
|
|
|
|
|
|
|
|
|
|
bool validateKISSFrame(const String &kissFormattedFrame);
|
|
|
|
|
|
|
|
|
@ -136,15 +137,20 @@ String decapsulateKISS(const String &frame) {
|
|
|
|
|
String decode_kiss(const String &inputKISSTNCFrame, bool &dataFrame, bool &pktFrame) {
|
|
|
|
|
String TNC2Frame = "";
|
|
|
|
|
|
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame)) {
|
|
|
|
|
String ax25Frame = decapsulateKISS(inputKISSTNCFrame);
|
|
|
|
|
bool isLast = false;
|
|
|
|
|
String dest = decode_address_ax25(ax25Frame.substring(14, 21), isLast, false);
|
|
|
|
|
// Serial.print(src_addr);
|
|
|
|
|
for (int p = 0; p <= dest.indexOf('W'); p++) {
|
|
|
|
|
char dest_1 = dest.charAt(p);
|
|
|
|
|
Serial.print(dest_1);
|
|
|
|
|
}
|
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame))
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
@ -239,6 +245,25 @@ 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 TNCAddress = "";
|
|
|
|
|
for (int i = 0; i < 42; ++i) {
|
|
|
|
|
uint8_t currentCharacter = ax25Address.charAt(i);
|
|
|
|
|
currentCharacter >>= 1;
|
|
|
|
|
if (currentCharacter != ' ') {
|
|
|
|
|
TNCAddress += (char) currentCharacter;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
auto ssid_char = (uint8_t) ax25Address.charAt(6);
|
|
|
|
|
int ssid = 0b1111 & ssid_char;
|
|
|
|
|
if (ssid)
|
|
|
|
|
{
|
|
|
|
|
TNCAddress += '-';
|
|
|
|
|
TNCAddress += ssid;
|
|
|
|
|
}
|
|
|
|
|
return TNCAddress;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool validateTNC2Frame(const String &tnc2FormattedFrame) {
|
|
|
|
|
return (tnc2FormattedFrame.indexOf(':') != -1) && (tnc2FormattedFrame.indexOf('>') != -1);
|
|
|
|
|
}
|
|
|
|
|