Murata RF modules are designed to simplify wireless development and certification by minimizing the amount of RF expertise you need to wirelessly enable a wide range of applications.
Diff: Payload.cpp
- Revision:
- 0:8e83b9448758
- Child:
- 2:f8e393a81c25
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Payload.cpp Tue Feb 03 21:24:15 2015 +0000 @@ -0,0 +1,118 @@ +#include "Payload.h" + +using namespace SmartLabMuRata; + +Payload::Payload() +{ + max = EXPANDSIZE; + data = new char[EXPANDSIZE]; + position = 0; +} + +Payload::Payload(Payload * payload) +{ + this->data = payload->data; + this->position = payload->position; +} + +const char * Payload::GetData() +{ + return data; +} + +ResponseFlag Payload::GetResponseFlag() +{ + if ((data[0] >> 7) == 0x01) + return Response_Confirmation; + else return Request_Indication; +} + +void Payload::SetResponseFlag(const ResponseFlag flag) +{ + if (flag == Request_Indication) + data[0] &= 0x7F; + else data[0] |= 0x80; +} + +SubCommandID Payload::GetSubCommandID() +{ + return (SubCommandID)(data[0] & 0x7F); +} + +void Payload::SetSubCommandID(const SubCommandID id) +{ + SetSubCommandID((char)id); +} + +void Payload::SetSubCommandID(const int value) +{ + data[0] = (data[0] & 0x80) | (value & 0x7F); + position = 1; +} + +char Payload::GetFrameID() +{ + return data[1]; +} + +void Payload::SetFrameID(const char frameID) +{ + data[1] = frameID; + position = 2; +} + +int Payload::GetPosition() +{ + return position; +} + +void Payload::SetPosition(const int position) +{ + if (this->position > max) + this->position = max; + else this->position = position; +} + +void Payload::Allocate(const int length) +{ + if (length <= 0) + return; + + if (length > max) { + delete data; + data = new char[length]; + } + + Rewind(); +} + +void Payload::Rewind() +{ + position = 0; +} + +void Payload::SetContent(const char value) +{ + if (position >= max) { + char temp[max + EXPANDSIZE]; + memcpy(temp, data, position); + delete data; + data = temp; + } + + data[position++] = value; +} + +void Payload::SetContent(const char * value, const int offset, const int length) +{ + if (position + length - offset>= max) { + max += EXPANDSIZE * (1 + length / EXPANDSIZE); + char temp[max]; + memcpy(temp, data, position); + delete data; + data = temp; + } + + memcpy(data + position, value, length); + position += length; +} \ No newline at end of file