Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

endail/RadioPacket

Repository files navigation

RadioPacket

A packet format for sending/receiving data using the Arduino Manchester library.

lint status

using RadioPacket;
Message m(arr, sizeof(arr));
m.setRawAction(UPDATE_DB_CMD);
RadioPacket p(&m);
p.setRawTransmitterId(TRANSMITTER_ID);
p.setRawReceiverId(RECEIVER_ID);
p.setRawCrc8(p.generateChecksum());
man.transmitArray(
 p.getRawPacketLength(),
 const_cast<uint8_t*>(p.getData()));
RadioPacket* p;
Message* m;
if(RadioPacket::parse(&p, buffer, BUFFER_SIZE) == RadioPacket::PARSE_OK) {
 if(Message::parse(&m, p->getBodyData(), p->getRawBodyLength()) == Message::PARSE_OK) {
 Serial.println(m->getBodyData());
 }
}
delete p;
delete m;

Packet Format

0 1 2 4 6

[PACKET LENGTH][VERSION][TRANSMITTER ID][RECEIVER ID]

6 7 8 9

[FRAGMENT][BODY LENGTH][CRC8]

9

[BODY DATA]

Message Format

0 2 4

[BODY LENGTH][ACTION]

4

[BODY DATA]

Extending Messages

// MeasurementMessage.h
#include <RadioPacket.h>
/**
 * MeasurementMessage holds a single 16 bit integer
 */
class MeasurementMessage : public RadioPacket::Message {
protected:
 static const uint8_t _MEASUREMENT_OFFSET = 0;
 static const uint8_t _ACTION_VALUE = 1;
public:
 MeasurementMessage() : Message() {
 this->setRawAction(_ACTION_VALUE);
 this->resizeBody(sizeof(uint16_t));
 }
 uint16_t getMeasurement() const noexcept {
 return this->_data.getUInt16(this->fromBaseBodyOffset(
 _MEASUREMENT_OFFSET));
 }
 void setMeasurement(const uint16_t m) noexcept {
 this->_data.setUInt16(m, this->fromBaseBodyOffset(
 _MEASUREMENT_OFFSET));
 }
};
// example use of MeasurementMessage
// read analog value of A1 into message object
MeasurementMessage mm;
mm.setMeasurement(::analogRead(A1));
// then encapsulate the message into a RadioPacket as
// in the example transmitter code above
// when receiving, cast Message to a MeasurementMessage,
// where m is a Message* as in the example receiver code above
MeasurementMessage* mm = static_cast<MeasurementMessage*>(m);
mm->getMeasurement();

About

A packet format for sending/receiving data using the Arduino Manchester library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /