EEP fORK

Dependencies:   BLE_API mbed nRF51822

Fork of MCS_LRF by Farshad N

Committer:
Farshad
Date:
Fri Oct 09 03:42:39 2015 +0000
Revision:
3:de77a4ebbf21
Parent:
2:79a9dad8bc5e
Child:
4:76bd50c41d39
Removed unused parsing code.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Farshad 0:d58d1cdf43a9 1 /* mbed Microcontroller Library
Farshad 0:d58d1cdf43a9 2 * Copyright (c) 2006-2013 ARM Limited
Farshad 0:d58d1cdf43a9 3 *
Farshad 0:d58d1cdf43a9 4 * Licensed under the Apache License, Version 2.0 (the "License");
Farshad 0:d58d1cdf43a9 5 * you may not use this file except in compliance with the License.
Farshad 0:d58d1cdf43a9 6 * You may obtain a copy of the License at
Farshad 0:d58d1cdf43a9 7 *
Farshad 0:d58d1cdf43a9 8 * http://www.apache.org/licenses/LICENSE-2.0
Farshad 0:d58d1cdf43a9 9 *
Farshad 0:d58d1cdf43a9 10 * Unless required by applicable law or agreed to in writing, software
Farshad 0:d58d1cdf43a9 11 * distributed under the License is distributed on an "AS IS" BASIS,
Farshad 0:d58d1cdf43a9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Farshad 0:d58d1cdf43a9 13 * See the License for the specific language governing permissions and
Farshad 0:d58d1cdf43a9 14 * limitations under the License.
Farshad 0:d58d1cdf43a9 15 */
Farshad 0:d58d1cdf43a9 16
Farshad 0:d58d1cdf43a9 17 #include "mbed.h"
Farshad 0:d58d1cdf43a9 18 #include "BLE.h"
Farshad 0:d58d1cdf43a9 19 #include "DeviceInformationService.h"
Farshad 0:d58d1cdf43a9 20 #include "UARTService.h"
Farshad 0:d58d1cdf43a9 21
Farshad 0:d58d1cdf43a9 22 #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
Farshad 0:d58d1cdf43a9 23 * it will have an impact on code-size and power consumption. */
Farshad 0:d58d1cdf43a9 24
Farshad 2:79a9dad8bc5e 25 #define NEED_PARSE_TRACE 0 // only used for parsing tag data- will not work if parse function is called from within serial interrupt
Farshad 2:79a9dad8bc5e 26
Farshad 2:79a9dad8bc5e 27 Serial pc(USBTX, USBRX);
Farshad 0:d58d1cdf43a9 28 #if NEED_CONSOLE_OUTPUT
Farshad 2:79a9dad8bc5e 29 //Serial pc(USBTX, USBRX);
Farshad 0:d58d1cdf43a9 30 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
Farshad 0:d58d1cdf43a9 31 #else
Farshad 0:d58d1cdf43a9 32 #define DEBUG(...) /* nothing */
Farshad 2:79a9dad8bc5e 33 #define TRACE(...)
Farshad 0:d58d1cdf43a9 34 #endif /* #if NEED_CONSOLE_OUTPUT */
Farshad 0:d58d1cdf43a9 35
Farshad 2:79a9dad8bc5e 36 #if NEED_TRACE
Farshad 2:79a9dad8bc5e 37 #define TRACE(...) { pc.printf(__VA_ARGS__); }
Farshad 2:79a9dad8bc5e 38 #else
Farshad 2:79a9dad8bc5e 39 #define TRACE(...)
Farshad 2:79a9dad8bc5e 40 #endif /* #if NEED_TRACE */
Farshad 2:79a9dad8bc5e 41
Farshad 0:d58d1cdf43a9 42 BLEDevice ble;
Farshad 2:79a9dad8bc5e 43 //DigitalOut led(p19);
Farshad 2:79a9dad8bc5e 44 DigitalOut led(p21);
Farshad 2:79a9dad8bc5e 45 DigitalOut trigger(p8);
Farshad 2:79a9dad8bc5e 46 Serial reader(p9, p17); // tx, rx === NOTE tx port pin needs to be wired and verified
Farshad 0:d58d1cdf43a9 47
Farshad 2:79a9dad8bc5e 48 const static char DEVICE_NAME[] = "MCS_RFID";
Farshad 0:d58d1cdf43a9 49 const static char MANUFACTURER[] = "MCS";
Farshad 0:d58d1cdf43a9 50 const static char MODEL[] = "Model 1";
Farshad 0:d58d1cdf43a9 51 const static char SERIAL_NO[] = "SN 1234";
Farshad 0:d58d1cdf43a9 52 const static char HARDWARE_REV[] = "hw-rev 1";
Farshad 0:d58d1cdf43a9 53 const static char FIRMWARE_REV[] = "fw-rev 1";
Farshad 0:d58d1cdf43a9 54 const static char SOFTWARE_REV[] = "soft-rev 1";
Farshad 0:d58d1cdf43a9 55
Farshad 0:d58d1cdf43a9 56 UARTService *uartServicePtr;
Farshad 2:79a9dad8bc5e 57 static uint8_t isConnected = 0;
Farshad 0:d58d1cdf43a9 58
Farshad 2:79a9dad8bc5e 59 // these values must macth definitions in the XML file accompanying this device
Farshad 2:79a9dad8bc5e 60 const static uint16_t tagIdCmd = 0x0001;
Farshad 2:79a9dad8bc5e 61 const static uint16_t triggerCmd = 0x0002;
Farshad 2:79a9dad8bc5e 62
Farshad 3:de77a4ebbf21 63 // definition of the RFID packet
Farshad 3:de77a4ebbf21 64 #define HEADER_FLAG 0xFF
Farshad 3:de77a4ebbf21 65 #define EPC_READ_CMD 0x29
Farshad 3:de77a4ebbf21 66 #define BIT_64_TAG_FLAG 0x60
Farshad 3:de77a4ebbf21 67 #define BIT_96_TAG_FLAG 0x80
Farshad 3:de77a4ebbf21 68 #define SKIP_TO_BIT_FLAG 22
Farshad 3:de77a4ebbf21 69 #define BIT_64_TAG_PC_WORD 0x20
Farshad 3:de77a4ebbf21 70 #define BIT_96_TAG_PC_WORD 0x30
Farshad 3:de77a4ebbf21 71 #define SKIP_TO_TAG_EPC 2
Farshad 2:79a9dad8bc5e 72
Farshad 3:de77a4ebbf21 73
Farshad 3:de77a4ebbf21 74 #define SET_PARAM_CMD_MASK 0x8000 // commands with MSB set to 0 are to get the parameter and MSB of 1 to set the parameter
Farshad 3:de77a4ebbf21 75 #define READER_BAUD_RATE 115200
Farshad 3:de77a4ebbf21 76 #define READ_BUF_SIZE 255
Farshad 3:de77a4ebbf21 77 #define TAG_EPC_BUF_SIZE 12
Farshad 3:de77a4ebbf21 78
Farshad 2:79a9dad8bc5e 79
Farshad 2:79a9dad8bc5e 80 typedef enum {
Farshad 2:79a9dad8bc5e 81 AWAITING_HEADER,
Farshad 2:79a9dad8bc5e 82 AWAITING_DATA_LEN,
Farshad 2:79a9dad8bc5e 83 AWAITING_READ_CMD,
Farshad 2:79a9dad8bc5e 84 AWAITING_STATUS_1,
Farshad 2:79a9dad8bc5e 85 AWAITING_STATUS_2,
Farshad 2:79a9dad8bc5e 86 AWAITING_EPC_LENGTH,
Farshad 2:79a9dad8bc5e 87 AWAITING_PC_WORD,
Farshad 2:79a9dad8bc5e 88 READING_TAG_EPC,
Farshad 2:79a9dad8bc5e 89 READIG_TAG_CRC
Farshad 2:79a9dad8bc5e 90 } packetState_e;
Farshad 2:79a9dad8bc5e 91
Farshad 2:79a9dad8bc5e 92 static uint8_t tagEPC[TAG_EPC_BUF_SIZE] = {0};
Farshad 2:79a9dad8bc5e 93 static packetState_e state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 94 static uint8_t tagBufIndex = 0;
Farshad 2:79a9dad8bc5e 95 static uint8_t skip = 0;
Farshad 2:79a9dad8bc5e 96 static uint16_t tagLen = 0;
Farshad 2:79a9dad8bc5e 97 static uint16_t dataLen = 0;
Farshad 2:79a9dad8bc5e 98
Farshad 2:79a9dad8bc5e 99
Farshad 2:79a9dad8bc5e 100 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
Farshad 0:d58d1cdf43a9 101 {
Farshad 0:d58d1cdf43a9 102 DEBUG("Disconnected!\n\r");
Farshad 0:d58d1cdf43a9 103 DEBUG("Restarting the advertising process\n\r");
Farshad 0:d58d1cdf43a9 104 ble.startAdvertising();
Farshad 2:79a9dad8bc5e 105 isConnected = 0;
Farshad 2:79a9dad8bc5e 106 led = isConnected;
Farshad 2:79a9dad8bc5e 107 }
Farshad 2:79a9dad8bc5e 108
Farshad 2:79a9dad8bc5e 109 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
Farshad 2:79a9dad8bc5e 110 {
Farshad 2:79a9dad8bc5e 111 DEBUG("Connected!\n\r");
Farshad 2:79a9dad8bc5e 112 isConnected = 1;
Farshad 2:79a9dad8bc5e 113 led = isConnected;
Farshad 0:d58d1cdf43a9 114 }
Farshad 0:d58d1cdf43a9 115
Farshad 2:79a9dad8bc5e 116 static void sendBLENotification()
Farshad 2:79a9dad8bc5e 117 {
Farshad 2:79a9dad8bc5e 118 uint8_t buf[READ_BUF_SIZE];
Farshad 2:79a9dad8bc5e 119 uint8_t offset = 0;
Farshad 2:79a9dad8bc5e 120 memcpy(buf, &tagIdCmd, sizeof(uint16_t)); // command
Farshad 2:79a9dad8bc5e 121 offset+=sizeof(uint16_t);
Farshad 2:79a9dad8bc5e 122 memcpy(&buf[offset], &tagLen, sizeof(uint16_t)); // length of array
Farshad 2:79a9dad8bc5e 123 offset+=sizeof(uint16_t);
Farshad 2:79a9dad8bc5e 124 memcpy(&buf[offset], &tagEPC, tagLen); // tag EPC
Farshad 2:79a9dad8bc5e 125 offset+= tagLen;
Farshad 2:79a9dad8bc5e 126 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), buf, offset);
Farshad 2:79a9dad8bc5e 127 }
Farshad 2:79a9dad8bc5e 128
Farshad 2:79a9dad8bc5e 129
Farshad 1:e18634cb382a 130 static void processData(const GattWriteCallbackParams *params)
Farshad 0:d58d1cdf43a9 131 {
Farshad 2:79a9dad8bc5e 132 if(params->len >= 2) {
Farshad 2:79a9dad8bc5e 133 uint16_t command = params->data[0] + (params->data[1] << 8);
Farshad 2:79a9dad8bc5e 134 bool isSetCmd = (command & SET_PARAM_CMD_MASK) == SET_PARAM_CMD_MASK;
Farshad 2:79a9dad8bc5e 135 DEBUG("command: %d \r\n", command);
Farshad 2:79a9dad8bc5e 136
Farshad 2:79a9dad8bc5e 137 switch(command & ~SET_PARAM_CMD_MASK) {
Farshad 2:79a9dad8bc5e 138 case tagIdCmd:
Farshad 2:79a9dad8bc5e 139 if(!isSetCmd && params->len == 2) {
Farshad 2:79a9dad8bc5e 140 // form the reply to send
Farshad 2:79a9dad8bc5e 141 DEBUG("CMD is GET code\n\r");
Farshad 3:de77a4ebbf21 142 // TODO can do a trigger for a new read before transimiting, For now just send the latest read
Farshad 2:79a9dad8bc5e 143 sendBLENotification();
Farshad 2:79a9dad8bc5e 144 }
Farshad 1:e18634cb382a 145 break;
Farshad 0:d58d1cdf43a9 146
Farshad 2:79a9dad8bc5e 147 case triggerCmd:
Farshad 2:79a9dad8bc5e 148 if(isSetCmd && params->len == 2) {
Farshad 2:79a9dad8bc5e 149 // TODO also need to send this information to the LED controller
Farshad 2:79a9dad8bc5e 150 DEBUG("CMD is SET triggerCmd\n\r");
Farshad 2:79a9dad8bc5e 151 trigger = 0;
Farshad 2:79a9dad8bc5e 152 wait_ms(10);
Farshad 2:79a9dad8bc5e 153 trigger = 1;
Farshad 2:79a9dad8bc5e 154 }
Farshad 1:e18634cb382a 155 break;
Farshad 0:d58d1cdf43a9 156
Farshad 1:e18634cb382a 157 default:
Farshad 1:e18634cb382a 158 break;
Farshad 1:e18634cb382a 159 }
Farshad 0:d58d1cdf43a9 160 }
Farshad 0:d58d1cdf43a9 161 }
Farshad 0:d58d1cdf43a9 162
Farshad 0:d58d1cdf43a9 163 void onDataWritten(const GattWriteCallbackParams *params)
Farshad 0:d58d1cdf43a9 164 {
Farshad 0:d58d1cdf43a9 165 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
Farshad 0:d58d1cdf43a9 166 uint16_t bytesRead = params->len;
Farshad 0:d58d1cdf43a9 167 DEBUG("received %u bytes\n\r", bytesRead);
Farshad 0:d58d1cdf43a9 168 for(int i = 0; i < bytesRead; i++) {
Farshad 2:79a9dad8bc5e 169 DEBUG("0x%X ", params->data[i]);
Farshad 0:d58d1cdf43a9 170 }
Farshad 0:d58d1cdf43a9 171 DEBUG("\n\r", bytesRead);
Farshad 3:de77a4ebbf21 172
Farshad 3:de77a4ebbf21 173 // echo?
Farshad 2:79a9dad8bc5e 174 // ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
Farshad 1:e18634cb382a 175
Farshad 1:e18634cb382a 176 processData(params);
Farshad 0:d58d1cdf43a9 177 }
Farshad 0:d58d1cdf43a9 178 }
Farshad 0:d58d1cdf43a9 179
Farshad 2:79a9dad8bc5e 180
Farshad 3:de77a4ebbf21 181 // State machine to parse the tag data received from serial port. It only looks for EPC data in the packet
Farshad 2:79a9dad8bc5e 182 static void parsePacket(uint8_t d)
Farshad 2:79a9dad8bc5e 183 {
Farshad 2:79a9dad8bc5e 184 TRACE("%02X ", d);
Farshad 2:79a9dad8bc5e 185 switch (state) {
Farshad 2:79a9dad8bc5e 186 case AWAITING_HEADER:
Farshad 2:79a9dad8bc5e 187 if(d == HEADER_FLAG) {
Farshad 2:79a9dad8bc5e 188 TRACE("AWAITING_DATA_LEN \r\n");
Farshad 2:79a9dad8bc5e 189 state = AWAITING_DATA_LEN;
Farshad 2:79a9dad8bc5e 190 skip = 0;
Farshad 2:79a9dad8bc5e 191 }
Farshad 2:79a9dad8bc5e 192 break;
Farshad 2:79a9dad8bc5e 193
Farshad 2:79a9dad8bc5e 194 case AWAITING_DATA_LEN:
Farshad 2:79a9dad8bc5e 195 if(d > 0) {
Farshad 2:79a9dad8bc5e 196 dataLen = d;
Farshad 2:79a9dad8bc5e 197 state = AWAITING_READ_CMD;
Farshad 2:79a9dad8bc5e 198 TRACE("AWAITING_READ_CMD \r\n");
Farshad 2:79a9dad8bc5e 199 } else {
Farshad 2:79a9dad8bc5e 200 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 201 }
Farshad 2:79a9dad8bc5e 202 break;
Farshad 2:79a9dad8bc5e 203
Farshad 2:79a9dad8bc5e 204 case AWAITING_READ_CMD:
Farshad 2:79a9dad8bc5e 205 if(d == EPC_READ_CMD) {
Farshad 2:79a9dad8bc5e 206 state = AWAITING_STATUS_1;
Farshad 2:79a9dad8bc5e 207 TRACE("AWAITING_STATUS_1 \r\n");
Farshad 2:79a9dad8bc5e 208 } else {
Farshad 2:79a9dad8bc5e 209 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 210 }
Farshad 2:79a9dad8bc5e 211 break;
Farshad 2:79a9dad8bc5e 212
Farshad 2:79a9dad8bc5e 213 case AWAITING_STATUS_1:
Farshad 2:79a9dad8bc5e 214 if(d == 0) {
Farshad 2:79a9dad8bc5e 215 state = AWAITING_STATUS_2;
Farshad 2:79a9dad8bc5e 216 TRACE("AWAITING_STATUS_2 \r\n");
Farshad 2:79a9dad8bc5e 217 } else {
Farshad 2:79a9dad8bc5e 218 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 219 }
Farshad 2:79a9dad8bc5e 220 break;
Farshad 2:79a9dad8bc5e 221
Farshad 2:79a9dad8bc5e 222 case AWAITING_STATUS_2:
Farshad 2:79a9dad8bc5e 223 if(d == 0) {
Farshad 2:79a9dad8bc5e 224 state = AWAITING_EPC_LENGTH;
Farshad 2:79a9dad8bc5e 225 TRACE("AWAITING_EPC_LENGTH_1 \r\n");
Farshad 2:79a9dad8bc5e 226 } else {
Farshad 2:79a9dad8bc5e 227 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 228 }
Farshad 2:79a9dad8bc5e 229 break;
Farshad 2:79a9dad8bc5e 230
Farshad 2:79a9dad8bc5e 231 case AWAITING_EPC_LENGTH:
Farshad 3:de77a4ebbf21 232 if(++skip >= SKIP_TO_BIT_FLAG) {
Farshad 2:79a9dad8bc5e 233 if(d == BIT_64_TAG_FLAG) {
Farshad 2:79a9dad8bc5e 234 state = AWAITING_PC_WORD;
Farshad 2:79a9dad8bc5e 235 tagLen = 8;
Farshad 2:79a9dad8bc5e 236 TRACE("AWAITING_PC_WORD \r\n");
Farshad 2:79a9dad8bc5e 237 } else if (d == BIT_96_TAG_FLAG) {
Farshad 2:79a9dad8bc5e 238 state = AWAITING_PC_WORD;
Farshad 2:79a9dad8bc5e 239 tagLen = 12;
Farshad 2:79a9dad8bc5e 240 TRACE("AWAITING_PC_WORD \r\n");
Farshad 2:79a9dad8bc5e 241 } else {
Farshad 2:79a9dad8bc5e 242 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 243 }
Farshad 2:79a9dad8bc5e 244 }
Farshad 2:79a9dad8bc5e 245 break;
Farshad 2:79a9dad8bc5e 246
Farshad 2:79a9dad8bc5e 247 case AWAITING_PC_WORD:
Farshad 2:79a9dad8bc5e 248 if((tagLen == 8 && d == BIT_64_TAG_PC_WORD) || (tagLen == 12 && d == BIT_96_TAG_PC_WORD)) {
Farshad 2:79a9dad8bc5e 249 state = READING_TAG_EPC;
Farshad 2:79a9dad8bc5e 250 tagBufIndex = 0;
Farshad 2:79a9dad8bc5e 251 TRACE("READING_TAG_EPC \r\n");
Farshad 2:79a9dad8bc5e 252 skip = 0;
Farshad 2:79a9dad8bc5e 253 } else {
Farshad 2:79a9dad8bc5e 254 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 255 }
Farshad 2:79a9dad8bc5e 256 break;
Farshad 2:79a9dad8bc5e 257
Farshad 2:79a9dad8bc5e 258 case READING_TAG_EPC:
Farshad 3:de77a4ebbf21 259 if(++skip >= SKIP_TO_TAG_EPC) {
Farshad 2:79a9dad8bc5e 260 if(tagBufIndex < tagLen) {
Farshad 2:79a9dad8bc5e 261 tagEPC[tagBufIndex++] = d;
Farshad 2:79a9dad8bc5e 262 TRACE("%02X ", d);
Farshad 2:79a9dad8bc5e 263 } else {
Farshad 2:79a9dad8bc5e 264 // don't worry about CRC for now
Farshad 2:79a9dad8bc5e 265 state = AWAITING_HEADER;
Farshad 2:79a9dad8bc5e 266 TRACE("AWAITING_HEADER \r\n");
Farshad 2:79a9dad8bc5e 267
Farshad 2:79a9dad8bc5e 268 TRACE("TAG EPC: ============\r\n");
Farshad 2:79a9dad8bc5e 269 //for(int i = 0; i < tagLen; i++) {
Farshad 2:79a9dad8bc5e 270 // TRACE("%02X ", tagEPC[i]);
Farshad 2:79a9dad8bc5e 271 // pc.printf("%02X ", tagEPC[i]);
Farshad 2:79a9dad8bc5e 272 // }
Farshad 2:79a9dad8bc5e 273 // pc.printf("\r\n");
Farshad 2:79a9dad8bc5e 274
Farshad 2:79a9dad8bc5e 275 sendBLENotification();
Farshad 2:79a9dad8bc5e 276 }
Farshad 2:79a9dad8bc5e 277 }
Farshad 2:79a9dad8bc5e 278 break;
Farshad 2:79a9dad8bc5e 279 }
Farshad 2:79a9dad8bc5e 280 }
Farshad 2:79a9dad8bc5e 281
Farshad 0:d58d1cdf43a9 282 void periodicCallback(void)
Farshad 0:d58d1cdf43a9 283 {
Farshad 0:d58d1cdf43a9 284 // led1 = !led1;
Farshad 0:d58d1cdf43a9 285 }
Farshad 0:d58d1cdf43a9 286
Farshad 3:de77a4ebbf21 287 // this is an ISR, so do not spend too much time here and be careful with printing debug info
Farshad 2:79a9dad8bc5e 288 void readerCallback()
Farshad 2:79a9dad8bc5e 289 {
Farshad 2:79a9dad8bc5e 290 // Note: Need to actually read from the serial to clear the RX interrupt
Farshad 3:de77a4ebbf21 291 while(reader.readable()) {
Farshad 3:de77a4ebbf21 292 parsePacket(reader.getc());
Farshad 2:79a9dad8bc5e 293 }
Farshad 2:79a9dad8bc5e 294
Farshad 2:79a9dad8bc5e 295 // make sure LED stays on
Farshad 2:79a9dad8bc5e 296 led = isConnected;
Farshad 2:79a9dad8bc5e 297 }
Farshad 2:79a9dad8bc5e 298
Farshad 0:d58d1cdf43a9 299 int main(void)
Farshad 0:d58d1cdf43a9 300 {
Farshad 2:79a9dad8bc5e 301 // default state is unknown
Farshad 2:79a9dad8bc5e 302 led = 0;
Farshad 2:79a9dad8bc5e 303
Farshad 0:d58d1cdf43a9 304 Ticker ticker;
Farshad 2:79a9dad8bc5e 305 ticker.attach(periodicCallback, 5);
Farshad 0:d58d1cdf43a9 306
Farshad 0:d58d1cdf43a9 307 DEBUG("Initialising the nRF51822\n\r");
Farshad 0:d58d1cdf43a9 308 ble.init();
Farshad 0:d58d1cdf43a9 309
Farshad 0:d58d1cdf43a9 310 ble.onDisconnection(disconnectionCallback);
Farshad 2:79a9dad8bc5e 311 ble.onConnection(connectionCallback);
Farshad 0:d58d1cdf43a9 312 ble.onDataWritten(onDataWritten);
Farshad 0:d58d1cdf43a9 313
Farshad 0:d58d1cdf43a9 314 /* setup advertising */
Farshad 0:d58d1cdf43a9 315 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Farshad 0:d58d1cdf43a9 316 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Farshad 0:d58d1cdf43a9 317 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) - 1);
Farshad 0:d58d1cdf43a9 318 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,(const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
Farshad 0:d58d1cdf43a9 319 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
Farshad 1:e18634cb382a 320 (uint8_t *)GattService::UUID_DEVICE_INFORMATION_SERVICE, sizeof(GattService::UUID_DEVICE_INFORMATION_SERVICE));
Farshad 2:79a9dad8bc5e 321 ble.setAdvertisingInterval(GapAdvertisingParams::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000));
Farshad 0:d58d1cdf43a9 322 ble.startAdvertising();
Farshad 0:d58d1cdf43a9 323
Farshad 0:d58d1cdf43a9 324 /* Setup uart service */
Farshad 0:d58d1cdf43a9 325 UARTService uartService(ble);
Farshad 0:d58d1cdf43a9 326 uartServicePtr = &uartService;
Farshad 0:d58d1cdf43a9 327
Farshad 0:d58d1cdf43a9 328 /* Setup auxiliary service. */
Farshad 0:d58d1cdf43a9 329 DeviceInformationService deviceInfo(ble, MANUFACTURER, MODEL, SERIAL_NO,HARDWARE_REV, FIRMWARE_REV, SOFTWARE_REV);
Farshad 0:d58d1cdf43a9 330
Farshad 2:79a9dad8bc5e 331 // setup serial port to RFID reader
Farshad 2:79a9dad8bc5e 332 reader.baud(READER_BAUD_RATE);
Farshad 2:79a9dad8bc5e 333 reader.attach(&readerCallback);
Farshad 2:79a9dad8bc5e 334
Farshad 0:d58d1cdf43a9 335 while (true) {
Farshad 0:d58d1cdf43a9 336 ble.waitForEvent();
Farshad 0:d58d1cdf43a9 337 }
Farshad 0:d58d1cdf43a9 338 }