|
|
|
@ -7,21 +7,27 @@
|
|
|
|
|
|
|
|
|
|
#define PACKET_N_BYTES 16
|
|
|
|
|
|
|
|
|
|
// type definitions
|
|
|
|
|
using ui8_t = uint8_t;
|
|
|
|
|
|
|
|
|
|
using packet_t = std::array<ui8_t, PACKET_N_BYTES>;
|
|
|
|
|
using payload_t = std::array<ui8_t, 12>;
|
|
|
|
|
|
|
|
|
|
// packet head for reference
|
|
|
|
|
const std::array<ui8_t,2> head = {0xAE, 0xAE};
|
|
|
|
|
|
|
|
|
|
// packet tail for reference
|
|
|
|
|
const std::array<ui8_t,2> tail = {0xAE, 0xAE};
|
|
|
|
|
|
|
|
|
|
enum packetParts
|
|
|
|
|
// packet sections
|
|
|
|
|
enum packetSections
|
|
|
|
|
{
|
|
|
|
|
Head,
|
|
|
|
|
Payload,
|
|
|
|
|
Tail
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// dummy function which spitsout the payload of the packet
|
|
|
|
|
void outputPayload(payload_t payload)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
@ -30,14 +36,17 @@ void outputPayload(payload_t payload)
|
|
|
|
|
std::cout << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// this function cann be called for example when the dma has received a datablock from uart and
|
|
|
|
|
// triggered a completion interrupt.
|
|
|
|
|
// The different packet sections can be changed according to the packet received. For example one
|
|
|
|
|
// can perform a CRC here.
|
|
|
|
|
void parsePacket(const packet_t& newPacket)
|
|
|
|
|
{
|
|
|
|
|
bool done = false;
|
|
|
|
|
payload_t payload;
|
|
|
|
|
packetParts packetIndex = Head;
|
|
|
|
|
packetSections packetIndex = Head;
|
|
|
|
|
ui8_t i = 0;
|
|
|
|
|
|
|
|
|
|
//do {
|
|
|
|
|
// packet index foorloop forloop is rolled out throughout
|
|
|
|
|
switch(packetIndex) {
|
|
|
|
|
case Head:
|
|
|
|
|
std::cout << "checking packet head..." << std::endl;
|
|
|
|
@ -51,7 +60,9 @@ void parsePacket(const packet_t& newPacket)
|
|
|
|
|
std::cout << "...head valid!" << std::endl;
|
|
|
|
|
//packetIndex = Payload;
|
|
|
|
|
//break;
|
|
|
|
|
case Payload:
|
|
|
|
|
|
|
|
|
|
// leapover to next packet section
|
|
|
|
|
case Payload:
|
|
|
|
|
// copy payload
|
|
|
|
|
std::cout << "copy payload..." << std::endl;
|
|
|
|
|
for(;i < 14; i++) {
|
|
|
|
@ -60,6 +71,8 @@ void parsePacket(const packet_t& newPacket)
|
|
|
|
|
std::cout << "...done!" << std::endl;
|
|
|
|
|
//packetIndex = Tail;
|
|
|
|
|
//break;
|
|
|
|
|
|
|
|
|
|
// leapover to next packet section
|
|
|
|
|
case Tail:
|
|
|
|
|
// check tail
|
|
|
|
|
std::cout << "checking packet tail..." << std::endl;
|
|
|
|
@ -72,8 +85,7 @@ void parsePacket(const packet_t& newPacket)
|
|
|
|
|
std::cout << "...tail valid!" << std::endl;
|
|
|
|
|
std::cout << "forwarding payload!" << std::endl;
|
|
|
|
|
outputPayload(payload);
|
|
|
|
|
done = true;
|
|
|
|
|
break;
|
|
|
|
|
return;
|
|
|
|
|
default:
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|