EEP fORK
Dependencies: BLE_API mbed nRF51822
Fork of MCS_LRF by
main.cpp@3:de77a4ebbf21, 2015-10-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |