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.

Committer:
yangcq88517
Date:
Sun Feb 08 01:22:29 2015 +0000
Revision:
7:a71d7c24afc0
Parent:
4:7388451219ee
Child:
9:0ce800923eda
bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangcq88517 0:8e83b9448758 1 #include "Payload.h"
yangcq88517 0:8e83b9448758 2
yangcq88517 0:8e83b9448758 3 using namespace SmartLabMuRata;
yangcq88517 0:8e83b9448758 4
yangcq88517 0:8e83b9448758 5 Payload::Payload()
yangcq88517 0:8e83b9448758 6 {
yangcq88517 0:8e83b9448758 7 max = EXPANDSIZE;
yangcq88517 0:8e83b9448758 8 data = new char[EXPANDSIZE];
yangcq88517 0:8e83b9448758 9 position = 0;
yangcq88517 0:8e83b9448758 10 }
yangcq88517 0:8e83b9448758 11
yangcq88517 0:8e83b9448758 12 Payload::Payload(Payload * payload)
yangcq88517 0:8e83b9448758 13 {
yangcq88517 0:8e83b9448758 14 this->data = payload->data;
yangcq88517 0:8e83b9448758 15 this->position = payload->position;
yangcq88517 0:8e83b9448758 16 }
yangcq88517 0:8e83b9448758 17
yangcq88517 2:f8e393a81c25 18 char * Payload::GetData()
yangcq88517 0:8e83b9448758 19 {
yangcq88517 0:8e83b9448758 20 return data;
yangcq88517 0:8e83b9448758 21 }
yangcq88517 0:8e83b9448758 22
yangcq88517 0:8e83b9448758 23 ResponseFlag Payload::GetResponseFlag()
yangcq88517 0:8e83b9448758 24 {
yangcq88517 0:8e83b9448758 25 if ((data[0] >> 7) == 0x01)
yangcq88517 0:8e83b9448758 26 return Response_Confirmation;
yangcq88517 0:8e83b9448758 27 else return Request_Indication;
yangcq88517 0:8e83b9448758 28 }
yangcq88517 0:8e83b9448758 29
yangcq88517 0:8e83b9448758 30 void Payload::SetResponseFlag(const ResponseFlag flag)
yangcq88517 0:8e83b9448758 31 {
yangcq88517 0:8e83b9448758 32 if (flag == Request_Indication)
yangcq88517 0:8e83b9448758 33 data[0] &= 0x7F;
yangcq88517 0:8e83b9448758 34 else data[0] |= 0x80;
yangcq88517 0:8e83b9448758 35 }
yangcq88517 0:8e83b9448758 36
yangcq88517 0:8e83b9448758 37 SubCommandID Payload::GetSubCommandID()
yangcq88517 0:8e83b9448758 38 {
yangcq88517 0:8e83b9448758 39 return (SubCommandID)(data[0] & 0x7F);
yangcq88517 0:8e83b9448758 40 }
yangcq88517 0:8e83b9448758 41
yangcq88517 0:8e83b9448758 42 void Payload::SetSubCommandID(const SubCommandID id)
yangcq88517 0:8e83b9448758 43 {
yangcq88517 7:a71d7c24afc0 44 SetSubCommandID((int)id);
yangcq88517 0:8e83b9448758 45 }
yangcq88517 0:8e83b9448758 46
yangcq88517 0:8e83b9448758 47 void Payload::SetSubCommandID(const int value)
yangcq88517 0:8e83b9448758 48 {
yangcq88517 0:8e83b9448758 49 data[0] = (data[0] & 0x80) | (value & 0x7F);
yangcq88517 0:8e83b9448758 50 position = 1;
yangcq88517 0:8e83b9448758 51 }
yangcq88517 0:8e83b9448758 52
yangcq88517 0:8e83b9448758 53 char Payload::GetFrameID()
yangcq88517 0:8e83b9448758 54 {
yangcq88517 0:8e83b9448758 55 return data[1];
yangcq88517 0:8e83b9448758 56 }
yangcq88517 0:8e83b9448758 57
yangcq88517 0:8e83b9448758 58 void Payload::SetFrameID(const char frameID)
yangcq88517 0:8e83b9448758 59 {
yangcq88517 0:8e83b9448758 60 data[1] = frameID;
yangcq88517 0:8e83b9448758 61 position = 2;
yangcq88517 0:8e83b9448758 62 }
yangcq88517 0:8e83b9448758 63
yangcq88517 0:8e83b9448758 64 int Payload::GetPosition()
yangcq88517 0:8e83b9448758 65 {
yangcq88517 0:8e83b9448758 66 return position;
yangcq88517 0:8e83b9448758 67 }
yangcq88517 0:8e83b9448758 68
yangcq88517 0:8e83b9448758 69 void Payload::SetPosition(const int position)
yangcq88517 0:8e83b9448758 70 {
yangcq88517 0:8e83b9448758 71 if (this->position > max)
yangcq88517 0:8e83b9448758 72 this->position = max;
yangcq88517 0:8e83b9448758 73 else this->position = position;
yangcq88517 0:8e83b9448758 74 }
yangcq88517 0:8e83b9448758 75
yangcq88517 0:8e83b9448758 76 void Payload::Allocate(const int length)
yangcq88517 0:8e83b9448758 77 {
yangcq88517 0:8e83b9448758 78 if (length <= 0)
yangcq88517 0:8e83b9448758 79 return;
yangcq88517 0:8e83b9448758 80
yangcq88517 0:8e83b9448758 81 if (length > max) {
yangcq88517 2:f8e393a81c25 82 delete[] data;
yangcq88517 0:8e83b9448758 83 data = new char[length];
yangcq88517 0:8e83b9448758 84 }
yangcq88517 0:8e83b9448758 85
yangcq88517 0:8e83b9448758 86 Rewind();
yangcq88517 0:8e83b9448758 87 }
yangcq88517 0:8e83b9448758 88
yangcq88517 0:8e83b9448758 89 void Payload::Rewind()
yangcq88517 0:8e83b9448758 90 {
yangcq88517 0:8e83b9448758 91 position = 0;
yangcq88517 0:8e83b9448758 92 }
yangcq88517 0:8e83b9448758 93
yangcq88517 0:8e83b9448758 94 void Payload::SetContent(const char value)
yangcq88517 0:8e83b9448758 95 {
yangcq88517 0:8e83b9448758 96 if (position >= max) {
yangcq88517 4:7388451219ee 97 max += EXPANDSIZE;
yangcq88517 4:7388451219ee 98 char * temp = new char[max];
yangcq88517 0:8e83b9448758 99 memcpy(temp, data, position);
yangcq88517 2:f8e393a81c25 100 delete[] data;
yangcq88517 0:8e83b9448758 101 data = temp;
yangcq88517 0:8e83b9448758 102 }
yangcq88517 0:8e83b9448758 103
yangcq88517 0:8e83b9448758 104 data[position++] = value;
yangcq88517 0:8e83b9448758 105 }
yangcq88517 0:8e83b9448758 106
yangcq88517 0:8e83b9448758 107 void Payload::SetContent(const char * value, const int offset, const int length)
yangcq88517 0:8e83b9448758 108 {
yangcq88517 2:f8e393a81c25 109 if (length <= 0)
yangcq88517 2:f8e393a81c25 110 return;
yangcq88517 2:f8e393a81c25 111
yangcq88517 2:f8e393a81c25 112 if (position + length >= max) {
yangcq88517 0:8e83b9448758 113 max += EXPANDSIZE * (1 + length / EXPANDSIZE);
yangcq88517 2:f8e393a81c25 114 char * temp = new char[max];
yangcq88517 0:8e83b9448758 115 memcpy(temp, data, position);
yangcq88517 2:f8e393a81c25 116 delete[] data;
yangcq88517 0:8e83b9448758 117 data = temp;
yangcq88517 0:8e83b9448758 118 }
yangcq88517 0:8e83b9448758 119
yangcq88517 2:f8e393a81c25 120 memcpy(data + position, value + offset, length);
yangcq88517 0:8e83b9448758 121 position += length;
yangcq88517 0:8e83b9448758 122 }