E_PKT
Packet Type Definitions
pktparser
(parser_packet) interprets byte sequences converted by the serparser.
serparser_heap parser_ser;
void setup() {
// init ser parser (heap alloc)
parser_ser.begin(PARSER::ASCII, 256);
}
void loop() {
int c;
while ((c = Serial.read()) >= 0) {
parser_ser.parse(c);
if (parser_ser.available()) {
// get buffer object
auto&& payl = parser_ser.get_buf();
// identify packet type
auto&& typ = identify_packet_type(payl.begin(), payl.end());
// if packet type is TWELITE standard 0x81 message
if (typ == E_PKT::PKT_TWELITE) {
pktparser pkt; // packet parser object
// analyze packet data
typ = pkt.parse<TwePacketTwelite>(payl.begin(), payl.end());
if (typ != E_PKT::PKT_ERROR) { // success!
// get data object
auto&& atw = pkt.use<TwePacketTwelite>();
// display packet inforamtion
Serial << crlf << format("TWELITE: SRC=%08X LQI=%03d "
, app.u32addr_src, app.u8lqi);
Serial << " DI1..4="
<< atw.DI1 ? 'L' : 'H' << atw.DI2 ? 'L' : 'H'
<< atw.DI3 ? 'L' : 'H' << atw.DI4 ? 'L' : 'H';
}
}
}
}
}
The example above shows how to interpret a 0x81 message from the standard application. The parser_ser
object receives input from Serial and converts it to a byte sequence. This sequence is then passed to identify_packet_type()
to determine the packet type (E_PKT
). If the packet type is identified, .parse<TwePacketTwelite>()
is called to analyze the content. The result is of type TwePacketTwelite
, and the .use<TwePacketTwelite>()
function is used to retrieve the parsed object. TwePacketTwelite
is a class, but its member variables can be accessed like a struct.
parse<T>
template <class T>
E_PKT parse(const uint8_t* p, const uint8_t* e)
Parses the byte sequence.
Specify the packet type T
to be parsed. For example, use TwePacketTwelite
for a 0x81 message from the standard application.
p
and e
specify the beginning and one-past-the-end of the byte sequence.
Returns a value of type E_PKT
. If an error occurs, it returns E_PKT::PKT_ERROR
.
use<T>
template
T& use()
Returns a reference to the object corresponding to the interpreted byte sequence. Call this only after successfully executing parse<T>
.
T
must be the same type used in parse<T>
, or you can specify TwePacket
to retrieve only basic information.