25#include <interfaces/endianness.h>
46static constexpr size_t MIN_RX_PACKET_FRAME_SIZE = 11;
47static constexpr size_t MIN_TX_REQUEST_FRAME_SIZE = 13;
48static constexpr size_t MIN_AT_COMMAND_FRAME_SIZE = 3;
49static constexpr size_t MIN_AT_RESPONSE_FRAME_SIZE = 4;
51static constexpr size_t TX_STATUS_FRAME_SIZE = 6;
52static constexpr size_t MODEM_STATUS_FRAME_SIZE = 1;
54static constexpr uint16_t MAX_PACKET_PAYLOAD_LENGTH = 256;
55static constexpr uint16_t MAX_AT_COMMAND_PARAMS_LENGTH = 20;
56static constexpr uint16_t MAX_AT_COMMAND_RESPONSE_LENGTH = 30;
58static constexpr size_t FRAME_DATA_SIZE =
59 MAX_PACKET_PAYLOAD_LENGTH + MIN_TX_REQUEST_FRAME_SIZE;
61static constexpr size_t MAX_API_FRAME_SIZE = FRAME_DATA_SIZE + 5;
62static constexpr size_t MIN_API_FRAME_SIZE = 5;
64static constexpr uint64_t ADDRESS_BROADCAST = 0xFFFF;
65static constexpr uint8_t START_DELIMITER = 0x7E;
153 size_t len = swapBytes16(
length) - 1;
155 return min(len, FRAME_DATA_SIZE);
160 length = swapBytes16(min((
size_t)(len + 1), FRAME_DATA_SIZE + 1));
183 template <
typename FrameType>
187 std::is_base_of<APIFrame, FrameType>::value ||
188 std::is_same<APIFrame, FrameType>::value,
189 "FrameType must be derived from APIFrame or be an APIFrame");
191 return reinterpret_cast<FrameType*
>(
this);
204 if (size >= MIN_API_FRAME_SIZE && size <= MAX_API_FRAME_SIZE)
206 memcpy(f, bytes, size - 1);
229 return reinterpret_cast<const char*
>(&
frameData[1]);
247 size = min((
size_t)size, FRAME_DATA_SIZE - MIN_AT_COMMAND_FRAME_SIZE);
252static_assert(
sizeof(ATCommandFrame) ==
sizeof(APIFrame),
253 "Size of derived classes must be the same as APIFrame class (no "
254 "additional members & no virtual functions)");
270 return reinterpret_cast<const char*
>(&
frameData[1]);
292 size = min((
size_t)size, FRAME_DATA_SIZE - MIN_AT_RESPONSE_FRAME_SIZE);
297static_assert(
sizeof(ATCommandFrame) ==
sizeof(APIFrame),
298 "Size of derived classes must be the same as APIFrame class (no "
299 "additional members & no virtual functions)");
320 memcpy(&addr, &
frameData[1],
sizeof(uint64_t));
321 return swapBytes64(addr);
326 address = swapBytes64(address);
343 (
size_t)MAX_PACKET_PAYLOAD_LENGTH);
348 size = min(size, MAX_PACKET_PAYLOAD_LENGTH);
353static_assert(
sizeof(TXRequestFrame) ==
sizeof(APIFrame),
354 "Size of derived classes must be the same as APIFrame class (no "
355 "additional members & no virtual functions)");
369static_assert(
sizeof(ModemStatusFrame) ==
sizeof(APIFrame),
370 "Size of derived classes must be the same as APIFrame class (no "
371 "additional members & no virtual functions)");
402static_assert(
sizeof(TXStatusFrame) ==
sizeof(APIFrame),
403 "Size of derived classes must be the same as APIFrame class (no "
404 "additional members & no virtual functions)");
420 memcpy(&addr, &
frameData[0],
sizeof(uint64_t));
421 return swapBytes64(addr);
426 address = swapBytes64(address);
427 uint8_t* addr =
reinterpret_cast<uint8_t*
>(&address);
441 (
size_t)MAX_PACKET_PAYLOAD_LENGTH);
446 size = min(size, MAX_PACKET_PAYLOAD_LENGTH);
452static_assert(
sizeof(RXPacketFrame) ==
sizeof(APIFrame),
453 "Size of derived classes must be the same as APIFrame class (no "
454 "additional members & no virtual functions)");
@ FTYPE_AT_COMMAND_RESPONSE
@ DELS_COLL_AVOID_FAILURE
@ DELS_NO_SPECTRUM_AVAILABLE
@ MS_WATCHDOG_TIMER_RESET
This file includes all the types the logdecoder script will decode.
void setFrameDataLength(uint16_t len)
uint8_t frameData[FRAME_DATA_SIZE]
size_t toBytes(uint8_t *bytes)
bool verifyChecksum() const
FrameType * toFrameType()
uint16_t getFrameDataLength() const
static bool fromBytes(uint8_t *bytes, size_t size, APIFrame *f)
uint8_t * getCommandDataPointer()
uint8_t getFrameID() const
uint16_t getCommandDataLength() const
void setParameterSize(uint16_t size)
void setATCommand(const char *at)
void setFrameID(uint8_t frameId)
const char * getATCommand() const
uint8_t getFrameID() const
uint8_t getCommandStatus() const
void setCommandDataSize(uint16_t size)
void setCommandStatus(uint8_t cs)
uint16_t getCommandDataLength() const
const char * getATCommand() const
void setFrameID(uint8_t frameId)
void setATCommand(const char *at)
uint8_t * getCommandDataPointer()
uint8_t getStatus() const
void setStatus(uint8_t status)
uint64_t getSourceAddress() const
void setRXDataLength(uint16_t size)
uint8_t getReceiveOptions() const
uint8_t * getRXDataPointer()
uint16_t getRXDataLength() const
void setSourceAddress(uint64_t address)
void setReceiveOptions(uint8_t ro)
uint8_t getFrameID() const
uint16_t getRFDataLength() const
void setFrameID(uint8_t frameId)
uint8_t getBroadcastRadius() const
void setTransmitOptions(uint8_t br)
void setDestAddress(uint64_t address)
void setBroadcastRadius(uint8_t br)
void setRFDataLength(uint16_t size)
uint8_t * getRFDataPointer()
uint8_t getTrasmitOptions() const
uint64_t getDestAddress() const
uint8_t getFrameID() const
void setDeliveryStatus(uint8_t ds)
uint8_t getDeliveryStatus() const
uint8_t getTransmitRetryCount() const
void setTransmitRetryCount(uint8_t trc)
uint8_t getDiscoveryStatus() const
void setFrameID(uint8_t frameId)
void setDiscoveryStatus(uint8_t ds)