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