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 #include <ble_payload.h>
lorevee 0:ac0b0725c6fa 18
lorevee 0:ac0b0725c6fa 19 Payload::Payload() {
lorevee 0:ac0b0725c6fa 20 stringLength = 0;
lorevee 0:ac0b0725c6fa 21 payloadUnitCount = 0;
lorevee 0:ac0b0725c6fa 22 payload = NULL;
lorevee 0:ac0b0725c6fa 23 }
lorevee 0:ac0b0725c6fa 24
lorevee 0:ac0b0725c6fa 25 Payload::Payload(const uint8_t *tokenString, uint8_t string_ength) {
lorevee 0:ac0b0725c6fa 26 // initialize private data members
lorevee 0:ac0b0725c6fa 27 stringLength = string_ength;
lorevee 0:ac0b0725c6fa 28 payloadUnitCount = 0;
lorevee 0:ac0b0725c6fa 29 payload = NULL;
lorevee 0:ac0b0725c6fa 30
lorevee 0:ac0b0725c6fa 31 int index = 0;
lorevee 0:ac0b0725c6fa 32 while( index!=stringLength) {
lorevee 0:ac0b0725c6fa 33 int len=tokenString[index];
lorevee 0:ac0b0725c6fa 34 index=index+1+len;
lorevee 0:ac0b0725c6fa 35 payloadUnitCount++;
lorevee 0:ac0b0725c6fa 36 }
lorevee 0:ac0b0725c6fa 37
lorevee 0:ac0b0725c6fa 38 UnitPayload *obj = new UnitPayload[payloadUnitCount];
lorevee 0:ac0b0725c6fa 39 int i=0;
lorevee 0:ac0b0725c6fa 40 int c=0;
lorevee 0:ac0b0725c6fa 41 int j,k;
lorevee 0:ac0b0725c6fa 42
lorevee 0:ac0b0725c6fa 43 while(i<payloadUnitCount)
lorevee 0:ac0b0725c6fa 44 {
lorevee 0:ac0b0725c6fa 45 obj[i].length=tokenString[c];
lorevee 0:ac0b0725c6fa 46 obj[i].id=tokenString[c+1];
lorevee 0:ac0b0725c6fa 47
lorevee 0:ac0b0725c6fa 48 obj[i].data = new uint8_t[obj[i].length];
lorevee 0:ac0b0725c6fa 49 for(j=c+2,k=0;(j<(c+obj[i].length+1))&&(k<obj[i].length-1);j++,k++)
lorevee 0:ac0b0725c6fa 50 {
lorevee 0:ac0b0725c6fa 51 obj[i].data[k]=tokenString[j];
lorevee 0:ac0b0725c6fa 52
lorevee 0:ac0b0725c6fa 53 }
lorevee 0:ac0b0725c6fa 54
lorevee 0:ac0b0725c6fa 55 c=c+obj[i].length+1;
lorevee 0:ac0b0725c6fa 56 i++;
lorevee 0:ac0b0725c6fa 57
lorevee 0:ac0b0725c6fa 58 }
lorevee 0:ac0b0725c6fa 59 payload = obj;
lorevee 0:ac0b0725c6fa 60 }
lorevee 0:ac0b0725c6fa 61
lorevee 0:ac0b0725c6fa 62 uint8_t Payload::getPayloadUnitCount() {
lorevee 0:ac0b0725c6fa 63 return payloadUnitCount;
lorevee 0:ac0b0725c6fa 64 }
lorevee 0:ac0b0725c6fa 65
lorevee 0:ac0b0725c6fa 66 uint8_t Payload::getIDAtIndex(int index) {
lorevee 0:ac0b0725c6fa 67 return payload[index].get_id();
lorevee 0:ac0b0725c6fa 68 }
lorevee 0:ac0b0725c6fa 69
lorevee 0:ac0b0725c6fa 70 uint8_t Payload::getLengthAtIndex(int index) {
lorevee 0:ac0b0725c6fa 71 return payload[index].get_length();
lorevee 0:ac0b0725c6fa 72 }
lorevee 0:ac0b0725c6fa 73
lorevee 0:ac0b0725c6fa 74 uint8_t* Payload::getDataAtIndex(int index) {
lorevee 0:ac0b0725c6fa 75 return payload[index].get_data();
lorevee 0:ac0b0725c6fa 76 }
lorevee 0:ac0b0725c6fa 77
lorevee 0:ac0b0725c6fa 78 int8_t Payload::getInt8AtIndex(int index) {
lorevee 0:ac0b0725c6fa 79 uint8_t* str = payload[index].get_data();
lorevee 0:ac0b0725c6fa 80 int8_t value = (int8_t)str[0];
lorevee 0:ac0b0725c6fa 81 return value;
lorevee 0:ac0b0725c6fa 82 }
lorevee 0:ac0b0725c6fa 83
lorevee 0:ac0b0725c6fa 84 uint16_t Payload::getUint16AtIndex(int index) {
lorevee 0:ac0b0725c6fa 85 uint16_t* str = (uint16_t*)payload[index].get_data();
lorevee 0:ac0b0725c6fa 86 uint16_t value = str[0];
lorevee 0:ac0b0725c6fa 87 return value;
lorevee 0:ac0b0725c6fa 88 }
lorevee 0:ac0b0725c6fa 89
lorevee 0:ac0b0725c6fa 90 uint8_t* Payload::getSerializedAdDataAtIndex(int index) {
lorevee 0:ac0b0725c6fa 91 uint8_t length = payload[index].get_length();
lorevee 0:ac0b0725c6fa 92 uint8_t* data = payload[index].get_data();
lorevee 0:ac0b0725c6fa 93 uint8_t id = payload[index].get_id();
lorevee 0:ac0b0725c6fa 94 uint8_t *serializedAdData = new uint8_t[length];
lorevee 0:ac0b0725c6fa 95
lorevee 0:ac0b0725c6fa 96 serializedAdData[0] = id;
lorevee 0:ac0b0725c6fa 97 for(int i=0; i<length-1; i++) {
lorevee 0:ac0b0725c6fa 98 serializedAdData[i+1] = data[i];
lorevee 0:ac0b0725c6fa 99 }
lorevee 0:ac0b0725c6fa 100 return serializedAdData;
lorevee 0:ac0b0725c6fa 101 }
lorevee 0:ac0b0725c6fa 102
lorevee 0:ac0b0725c6fa 103 Payload::~Payload() {
lorevee 0:ac0b0725c6fa 104 int i = 0;
lorevee 0:ac0b0725c6fa 105
lorevee 0:ac0b0725c6fa 106 if(payload) {
lorevee 0:ac0b0725c6fa 107 while(i<payloadUnitCount) {
lorevee 0:ac0b0725c6fa 108 if(payload->data) {
lorevee 0:ac0b0725c6fa 109 delete[] payload->data;
lorevee 0:ac0b0725c6fa 110 payload->data = NULL;
lorevee 0:ac0b0725c6fa 111 }
lorevee 0:ac0b0725c6fa 112 }
lorevee 0:ac0b0725c6fa 113 delete[] payload;
lorevee 0:ac0b0725c6fa 114 payload = NULL;
lorevee 0:ac0b0725c6fa 115 }
lorevee 0:ac0b0725c6fa 116
lorevee 0:ac0b0725c6fa 117 }
lorevee 0:ac0b0725c6fa 118