Fork of ble-x-nucleo-idb0xa1 with changes required by BleStarMbed

Dependents:   ble-star-mbed

Committer:
lorevee
Date:
Tue Feb 20 11:07:16 2018 +0000
Revision:
0:ac0b0725c6fa
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lorevee 0:ac0b0725c6fa 1 /* mbed Microcontroller Library
lorevee 0:ac0b0725c6fa 2 * Copyright (c) 2006-2013 ARM Limited
lorevee 0:ac0b0725c6fa 3 *
lorevee 0:ac0b0725c6fa 4 * Licensed under the Apache License, Version 2.0 (the "License");
lorevee 0:ac0b0725c6fa 5 * you may not use this file except in compliance with the License.
lorevee 0:ac0b0725c6fa 6 * You may obtain a copy of the License at
lorevee 0:ac0b0725c6fa 7 *
lorevee 0:ac0b0725c6fa 8 * http://www.apache.org/licenses/LICENSE-2.0
lorevee 0:ac0b0725c6fa 9 *
lorevee 0:ac0b0725c6fa 10 * Unless required by applicable law or agreed to in writing, software
lorevee 0:ac0b0725c6fa 11 * distributed under the License is distributed on an "AS IS" BASIS,
lorevee 0:ac0b0725c6fa 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
lorevee 0:ac0b0725c6fa 13 * See the License for the specific language governing permissions and
lorevee 0:ac0b0725c6fa 14 * limitations under the License.
lorevee 0:ac0b0725c6fa 15 */
lorevee 0:ac0b0725c6fa 16
lorevee 0:ac0b0725c6fa 17 #ifdef YOTTA_CFG_MBED_OS
lorevee 0:ac0b0725c6fa 18 #include "mbed-drivers/mbed.h"
lorevee 0:ac0b0725c6fa 19 #else
lorevee 0:ac0b0725c6fa 20 #include "mbed.h"
lorevee 0:ac0b0725c6fa 21 #endif
lorevee 0:ac0b0725c6fa 22 #include "ble_debug.h"
lorevee 0:ac0b0725c6fa 23
lorevee 0:ac0b0725c6fa 24 #ifndef __PAYLOAD_H__
lorevee 0:ac0b0725c6fa 25 #define __PAYLOAD_H__
lorevee 0:ac0b0725c6fa 26
lorevee 0:ac0b0725c6fa 27 class UnitPayload
lorevee 0:ac0b0725c6fa 28 {
lorevee 0:ac0b0725c6fa 29 public:
lorevee 0:ac0b0725c6fa 30 uint8_t length;
lorevee 0:ac0b0725c6fa 31 uint8_t id;
lorevee 0:ac0b0725c6fa 32 uint8_t *data;
lorevee 0:ac0b0725c6fa 33 uint8_t *idptr;
lorevee 0:ac0b0725c6fa 34
lorevee 0:ac0b0725c6fa 35
lorevee 0:ac0b0725c6fa 36
lorevee 0:ac0b0725c6fa 37 void set_length(uint8_t l) {
lorevee 0:ac0b0725c6fa 38 length=l;
lorevee 0:ac0b0725c6fa 39 }
lorevee 0:ac0b0725c6fa 40
lorevee 0:ac0b0725c6fa 41 void set_id(uint8_t i) {
lorevee 0:ac0b0725c6fa 42 id=i;
lorevee 0:ac0b0725c6fa 43 }
lorevee 0:ac0b0725c6fa 44
lorevee 0:ac0b0725c6fa 45 void set_data(uint8_t* data1) {
lorevee 0:ac0b0725c6fa 46 for(int j=0;j<length;j++)
lorevee 0:ac0b0725c6fa 47 {
lorevee 0:ac0b0725c6fa 48 data[j]=data1[j];
lorevee 0:ac0b0725c6fa 49 }
lorevee 0:ac0b0725c6fa 50 }
lorevee 0:ac0b0725c6fa 51
lorevee 0:ac0b0725c6fa 52 uint8_t get_length() {
lorevee 0:ac0b0725c6fa 53 return length;
lorevee 0:ac0b0725c6fa 54 }
lorevee 0:ac0b0725c6fa 55
lorevee 0:ac0b0725c6fa 56 uint8_t get_id() {
lorevee 0:ac0b0725c6fa 57 return id;
lorevee 0:ac0b0725c6fa 58 }
lorevee 0:ac0b0725c6fa 59
lorevee 0:ac0b0725c6fa 60 uint8_t* get_data() {
lorevee 0:ac0b0725c6fa 61 return data;
lorevee 0:ac0b0725c6fa 62 }
lorevee 0:ac0b0725c6fa 63
lorevee 0:ac0b0725c6fa 64 };
lorevee 0:ac0b0725c6fa 65
lorevee 0:ac0b0725c6fa 66 class Payload {
lorevee 0:ac0b0725c6fa 67 UnitPayload *payload;
lorevee 0:ac0b0725c6fa 68 int stringLength;
lorevee 0:ac0b0725c6fa 69 int payloadUnitCount;
lorevee 0:ac0b0725c6fa 70
lorevee 0:ac0b0725c6fa 71 public:
lorevee 0:ac0b0725c6fa 72 Payload(const uint8_t *tokenString, uint8_t string_ength);
lorevee 0:ac0b0725c6fa 73 Payload();
lorevee 0:ac0b0725c6fa 74 ~Payload();
lorevee 0:ac0b0725c6fa 75 uint8_t getPayloadUnitCount();
lorevee 0:ac0b0725c6fa 76
lorevee 0:ac0b0725c6fa 77 uint8_t getIDAtIndex(int index);
lorevee 0:ac0b0725c6fa 78 uint8_t getLengthAtIndex(int index);
lorevee 0:ac0b0725c6fa 79 uint8_t* getDataAtIndex(int index);
lorevee 0:ac0b0725c6fa 80 int8_t getInt8AtIndex(int index);
lorevee 0:ac0b0725c6fa 81 uint16_t getUint16AtIndex(int index);
lorevee 0:ac0b0725c6fa 82 uint8_t* getSerializedAdDataAtIndex(int index);
lorevee 0:ac0b0725c6fa 83 };
lorevee 0:ac0b0725c6fa 84
lorevee 0:ac0b0725c6fa 85
lorevee 0:ac0b0725c6fa 86 class PayloadUnit {
lorevee 0:ac0b0725c6fa 87 private:
lorevee 0:ac0b0725c6fa 88 uint8_t* lenPtr;
lorevee 0:ac0b0725c6fa 89 uint8_t* adTypePtr;
lorevee 0:ac0b0725c6fa 90 uint8_t* dataPtr;
lorevee 0:ac0b0725c6fa 91
lorevee 0:ac0b0725c6fa 92 public:
lorevee 0:ac0b0725c6fa 93 PayloadUnit() {
lorevee 0:ac0b0725c6fa 94 lenPtr = NULL;
lorevee 0:ac0b0725c6fa 95 adTypePtr = NULL;
lorevee 0:ac0b0725c6fa 96 dataPtr = NULL;
lorevee 0:ac0b0725c6fa 97 }
lorevee 0:ac0b0725c6fa 98
lorevee 0:ac0b0725c6fa 99 PayloadUnit(uint8_t *len, uint8_t *adType, uint8_t* data) {
lorevee 0:ac0b0725c6fa 100 lenPtr = len;
lorevee 0:ac0b0725c6fa 101 adTypePtr = adType;
lorevee 0:ac0b0725c6fa 102 dataPtr = data;
lorevee 0:ac0b0725c6fa 103 }
lorevee 0:ac0b0725c6fa 104
lorevee 0:ac0b0725c6fa 105 void setLenPtr(uint8_t *len) {
lorevee 0:ac0b0725c6fa 106 lenPtr = len;
lorevee 0:ac0b0725c6fa 107 }
lorevee 0:ac0b0725c6fa 108
lorevee 0:ac0b0725c6fa 109 void setAdTypePtr(uint8_t *adType) {
lorevee 0:ac0b0725c6fa 110 adTypePtr = adType;
lorevee 0:ac0b0725c6fa 111 }
lorevee 0:ac0b0725c6fa 112
lorevee 0:ac0b0725c6fa 113 void setDataPtr(uint8_t *data) {
lorevee 0:ac0b0725c6fa 114 dataPtr = data;
lorevee 0:ac0b0725c6fa 115 }
lorevee 0:ac0b0725c6fa 116
lorevee 0:ac0b0725c6fa 117 uint8_t* getLenPtr() {
lorevee 0:ac0b0725c6fa 118 return lenPtr;
lorevee 0:ac0b0725c6fa 119 }
lorevee 0:ac0b0725c6fa 120
lorevee 0:ac0b0725c6fa 121 uint8_t* getAdTypePtr() {
lorevee 0:ac0b0725c6fa 122 return adTypePtr;
lorevee 0:ac0b0725c6fa 123 }
lorevee 0:ac0b0725c6fa 124
lorevee 0:ac0b0725c6fa 125 uint8_t* getDataPtr() {
lorevee 0:ac0b0725c6fa 126 return dataPtr;
lorevee 0:ac0b0725c6fa 127 }
lorevee 0:ac0b0725c6fa 128
lorevee 0:ac0b0725c6fa 129 void printDataAsHex() {
lorevee 0:ac0b0725c6fa 130 int i = 0;
lorevee 0:ac0b0725c6fa 131 PRINTF("AdData=");
lorevee 0:ac0b0725c6fa 132 for(i=0; i<*lenPtr-1; i++) {
lorevee 0:ac0b0725c6fa 133 PRINTF("0x%x ", dataPtr[i]);
lorevee 0:ac0b0725c6fa 134 }
lorevee 0:ac0b0725c6fa 135 PRINTF("\n");
lorevee 0:ac0b0725c6fa 136 }
lorevee 0:ac0b0725c6fa 137
lorevee 0:ac0b0725c6fa 138 void printDataAsString() {
lorevee 0:ac0b0725c6fa 139 int i = 0;
lorevee 0:ac0b0725c6fa 140 PRINTF("AdData=");
lorevee 0:ac0b0725c6fa 141 for(i=0; i<*lenPtr-1; i++) {
lorevee 0:ac0b0725c6fa 142 PRINTF("%c", dataPtr[i]);
lorevee 0:ac0b0725c6fa 143 }
lorevee 0:ac0b0725c6fa 144 PRINTF("\n");
lorevee 0:ac0b0725c6fa 145 }
lorevee 0:ac0b0725c6fa 146
lorevee 0:ac0b0725c6fa 147 };
lorevee 0:ac0b0725c6fa 148
lorevee 0:ac0b0725c6fa 149 class PayloadPtr {
lorevee 0:ac0b0725c6fa 150 private:
lorevee 0:ac0b0725c6fa 151 PayloadUnit *unit;
lorevee 0:ac0b0725c6fa 152 int payloadUnitCount;
lorevee 0:ac0b0725c6fa 153 public:
lorevee 0:ac0b0725c6fa 154 PayloadPtr(const uint8_t *tokenString, uint8_t string_ength) {
lorevee 0:ac0b0725c6fa 155 // initialize private data members
lorevee 0:ac0b0725c6fa 156 int stringLength = string_ength;
lorevee 0:ac0b0725c6fa 157 payloadUnitCount = 0;
lorevee 0:ac0b0725c6fa 158
lorevee 0:ac0b0725c6fa 159 int index = 0;
lorevee 0:ac0b0725c6fa 160 while(index!=stringLength) {
lorevee 0:ac0b0725c6fa 161 int len=tokenString[index];
lorevee 0:ac0b0725c6fa 162 index=index+1+len;
lorevee 0:ac0b0725c6fa 163 payloadUnitCount++;
lorevee 0:ac0b0725c6fa 164 }
lorevee 0:ac0b0725c6fa 165
lorevee 0:ac0b0725c6fa 166 // allocate memory to unit
lorevee 0:ac0b0725c6fa 167 unit = new PayloadUnit[payloadUnitCount];
lorevee 0:ac0b0725c6fa 168 int i = 0;
lorevee 0:ac0b0725c6fa 169 int nextUnitOffset = 0;
lorevee 0:ac0b0725c6fa 170
lorevee 0:ac0b0725c6fa 171 while(i<payloadUnitCount) {
lorevee 0:ac0b0725c6fa 172 unit[i].setLenPtr((uint8_t *)tokenString+nextUnitOffset);
lorevee 0:ac0b0725c6fa 173 unit[i].setAdTypePtr((uint8_t *)tokenString+nextUnitOffset+1);
lorevee 0:ac0b0725c6fa 174 unit[i].setDataPtr((uint8_t *)tokenString+nextUnitOffset+2);
lorevee 0:ac0b0725c6fa 175
lorevee 0:ac0b0725c6fa 176 nextUnitOffset += *unit[i].getLenPtr()+1;
lorevee 0:ac0b0725c6fa 177 i++;
lorevee 0:ac0b0725c6fa 178
lorevee 0:ac0b0725c6fa 179 }
lorevee 0:ac0b0725c6fa 180 }
lorevee 0:ac0b0725c6fa 181
lorevee 0:ac0b0725c6fa 182 PayloadUnit getUnitAtIndex(int index) {
lorevee 0:ac0b0725c6fa 183 return unit[index];
lorevee 0:ac0b0725c6fa 184 }
lorevee 0:ac0b0725c6fa 185
lorevee 0:ac0b0725c6fa 186 int getPayloadUnitCount() { return payloadUnitCount; }
lorevee 0:ac0b0725c6fa 187
lorevee 0:ac0b0725c6fa 188 ~PayloadPtr() {
lorevee 0:ac0b0725c6fa 189 if(unit) delete[] unit;
lorevee 0:ac0b0725c6fa 190
lorevee 0:ac0b0725c6fa 191 unit = NULL;
lorevee 0:ac0b0725c6fa 192 }
lorevee 0:ac0b0725c6fa 193 };
lorevee 0:ac0b0725c6fa 194
lorevee 0:ac0b0725c6fa 195 #endif // __PAYLOAD_H__