|
|
|
@ -1,8 +1,8 @@ |
|
|
|
|
#include "KISS_TO_PKT.h" |
|
|
|
|
|
|
|
|
|
bool validateTNC2Frame(const String &tnc2FormattedFrame); |
|
|
|
|
bool validateKISSFrame(const String &kissFormattedFrame); |
|
|
|
|
String decapsulateKISS(const String &frame); |
|
|
|
|
bool validateTNC2Frame_pkt(const String &tnc2FormattedFrame); |
|
|
|
|
bool validateKISSFrame_pkt(const String &kissFormattedFrame); |
|
|
|
|
String decapsulateKISS_pkt(const String &frame); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* https://ham.zmailer.org/oh2mqk/aprx/PROTOCOLS
|
|
|
|
@ -32,12 +32,12 @@ String decapsulateKISS(const String &frame); |
|
|
|
|
String encode_kiss_pkt(const String &tnc2FormattedFrame)
|
|
|
|
|
{ |
|
|
|
|
String TNC2Frame = ""; |
|
|
|
|
String ax25Frame = encapsulateKISS(tnc2FormattedFrame, CMD_DATA); |
|
|
|
|
String ax25Frame = encapsulateKISS_pkt(tnc2FormattedFrame, CMD_DATA); |
|
|
|
|
TNC2Frame += ax25Frame; |
|
|
|
|
return TNC2Frame; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String encapsulateKISS(const String &ax25Frame, uint8_t TNCCmd)
|
|
|
|
|
String encapsulateKISS_pkt(const String &ax25Frame, uint8_t TNCCmd)
|
|
|
|
|
{ |
|
|
|
|
String kissFrame = ""; |
|
|
|
|
kissFrame += (char) FEND; // start of frame
|
|
|
|
@ -65,7 +65,7 @@ String encapsulateKISS(const String &ax25Frame, uint8_t TNCCmd) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String decapsulateKISS(const String &frame, uint8_t TNCCmd)
|
|
|
|
|
String decapsulateKISS_pkt(const String &frame, uint8_t TNCCmd)
|
|
|
|
|
{ |
|
|
|
|
String ax25Frame = ""; |
|
|
|
|
for (int i = 2; i < frame.length() - 1; ++i)
|
|
|
|
@ -92,10 +92,10 @@ String decapsulateKISS(const String &frame, uint8_t TNCCmd) |
|
|
|
|
//HACK for PACKEt MODE
|
|
|
|
|
String decode_kiss_pkt(const String &inputKISSTNCFrame, bool &dataFrame) { |
|
|
|
|
String TNC2Frame = ""; |
|
|
|
|
if (validateKISSFrame(inputKISSTNCFrame)) { |
|
|
|
|
if (validateKISSFrame_pkt(inputKISSTNCFrame)) { |
|
|
|
|
dataFrame = inputKISSTNCFrame.charAt(1) == CMD_DATA; |
|
|
|
|
if (dataFrame){ |
|
|
|
|
String ax25Frame = decapsulateKISS(inputKISSTNCFrame, CMD_DATA); |
|
|
|
|
String ax25Frame = decapsulateKISS_pkt(inputKISSTNCFrame, CMD_DATA); |
|
|
|
|
delay(250); |
|
|
|
|
TNC2Frame += ax25Frame; |
|
|
|
|
} |
|
|
|
@ -103,12 +103,12 @@ String decode_kiss_pkt(const String &inputKISSTNCFrame, bool &dataFrame) { |
|
|
|
|
return TNC2Frame; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool validateTNC2Frame(const String &tnc2FormattedFrame) { |
|
|
|
|
bool validateTNC2Frame_pkt(const String &tnc2FormattedFrame) { |
|
|
|
|
return (tnc2FormattedFrame.indexOf(':') != -1) &&
|
|
|
|
|
(tnc2FormattedFrame.indexOf('>') != -1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool validateKISSFrame(const String &kissFormattedFrame) { |
|
|
|
|
bool validateKISSFrame_pkt(const String &kissFormattedFrame) { |
|
|
|
|
return kissFormattedFrame.charAt(0) == (char) FEND && |
|
|
|
|
kissFormattedFrame.charAt(kissFormattedFrame.length() - 1) == (char) FEND; |
|
|
|
|
} |
|
|
|
|