EEP fORK
Dependencies: BLE_API mbed nRF51822
Fork of MCS_LRF by
main.cpp@0:d58d1cdf43a9, 2015-08-07 (annotated)
- Committer:
- Farshad
- Date:
- Fri Aug 07 00:36:11 2015 +0000
- Revision:
- 0:d58d1cdf43a9
- Child:
- 1:e18634cb382a
Initial check in. Able to connect with Edison and cellphone and change all colors. Both UART and Device Information Service are running correctly.
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 | 0:d58d1cdf43a9 | 25 | #if NEED_CONSOLE_OUTPUT |
Farshad | 0:d58d1cdf43a9 | 26 | Serial pc(USBTX, USBRX); |
Farshad | 0:d58d1cdf43a9 | 27 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
Farshad | 0:d58d1cdf43a9 | 28 | #else |
Farshad | 0:d58d1cdf43a9 | 29 | #define DEBUG(...) /* nothing */ |
Farshad | 0:d58d1cdf43a9 | 30 | #endif /* #if NEED_CONSOLE_OUTPUT */ |
Farshad | 0:d58d1cdf43a9 | 31 | |
Farshad | 0:d58d1cdf43a9 | 32 | BLEDevice ble; |
Farshad | 0:d58d1cdf43a9 | 33 | DigitalOut pin0(p0); |
Farshad | 0:d58d1cdf43a9 | 34 | DigitalOut pin1(p1); |
Farshad | 0:d58d1cdf43a9 | 35 | |
Farshad | 0:d58d1cdf43a9 | 36 | |
Farshad | 0:d58d1cdf43a9 | 37 | const static char DEVICE_NAME[] = "MCS LED"; |
Farshad | 0:d58d1cdf43a9 | 38 | const static char MANUFACTURER[] = "MCS"; |
Farshad | 0:d58d1cdf43a9 | 39 | const static char MODEL[] = "Model 1"; |
Farshad | 0:d58d1cdf43a9 | 40 | const static char SERIAL_NO[] = "SN 1234"; |
Farshad | 0:d58d1cdf43a9 | 41 | const static char HARDWARE_REV[] = "hw-rev 1"; |
Farshad | 0:d58d1cdf43a9 | 42 | const static char FIRMWARE_REV[] = "fw-rev 1"; |
Farshad | 0:d58d1cdf43a9 | 43 | const static char SOFTWARE_REV[] = "soft-rev 1"; |
Farshad | 0:d58d1cdf43a9 | 44 | |
Farshad | 0:d58d1cdf43a9 | 45 | UARTService *uartServicePtr; |
Farshad | 0:d58d1cdf43a9 | 46 | |
Farshad | 0:d58d1cdf43a9 | 47 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) |
Farshad | 0:d58d1cdf43a9 | 48 | { |
Farshad | 0:d58d1cdf43a9 | 49 | DEBUG("Disconnected!\n\r"); |
Farshad | 0:d58d1cdf43a9 | 50 | DEBUG("Restarting the advertising process\n\r"); |
Farshad | 0:d58d1cdf43a9 | 51 | ble.startAdvertising(); |
Farshad | 0:d58d1cdf43a9 | 52 | } |
Farshad | 0:d58d1cdf43a9 | 53 | |
Farshad | 0:d58d1cdf43a9 | 54 | /* set io pins based on the data color, r=red, y=yellow, o=off */ |
Farshad | 0:d58d1cdf43a9 | 55 | static void processData(uint8_t data) |
Farshad | 0:d58d1cdf43a9 | 56 | { |
Farshad | 0:d58d1cdf43a9 | 57 | DEBUG("data: %d ", data); |
Farshad | 0:d58d1cdf43a9 | 58 | switch(data) { |
Farshad | 0:d58d1cdf43a9 | 59 | case 'r': |
Farshad | 0:d58d1cdf43a9 | 60 | pin0 = 0; |
Farshad | 0:d58d1cdf43a9 | 61 | pin1 = 0; |
Farshad | 0:d58d1cdf43a9 | 62 | DEBUG("r \r\n"); |
Farshad | 0:d58d1cdf43a9 | 63 | break; |
Farshad | 0:d58d1cdf43a9 | 64 | |
Farshad | 0:d58d1cdf43a9 | 65 | case 'y': |
Farshad | 0:d58d1cdf43a9 | 66 | pin0 = 1; |
Farshad | 0:d58d1cdf43a9 | 67 | pin1 = 0; |
Farshad | 0:d58d1cdf43a9 | 68 | DEBUG("y \r\n"); |
Farshad | 0:d58d1cdf43a9 | 69 | break; |
Farshad | 0:d58d1cdf43a9 | 70 | |
Farshad | 0:d58d1cdf43a9 | 71 | case 'o': |
Farshad | 0:d58d1cdf43a9 | 72 | pin0 = 1; |
Farshad | 0:d58d1cdf43a9 | 73 | pin1 = 1; |
Farshad | 0:d58d1cdf43a9 | 74 | DEBUG("o \r\n"); |
Farshad | 0:d58d1cdf43a9 | 75 | break; |
Farshad | 0:d58d1cdf43a9 | 76 | |
Farshad | 0:d58d1cdf43a9 | 77 | default: |
Farshad | 0:d58d1cdf43a9 | 78 | DEBUG("default \r\n"); |
Farshad | 0:d58d1cdf43a9 | 79 | pin0 = 0; |
Farshad | 0:d58d1cdf43a9 | 80 | pin1 = 1; |
Farshad | 0:d58d1cdf43a9 | 81 | break; |
Farshad | 0:d58d1cdf43a9 | 82 | } |
Farshad | 0:d58d1cdf43a9 | 83 | } |
Farshad | 0:d58d1cdf43a9 | 84 | |
Farshad | 0:d58d1cdf43a9 | 85 | void onDataWritten(const GattWriteCallbackParams *params) |
Farshad | 0:d58d1cdf43a9 | 86 | { |
Farshad | 0:d58d1cdf43a9 | 87 | if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) { |
Farshad | 0:d58d1cdf43a9 | 88 | uint16_t bytesRead = params->len; |
Farshad | 0:d58d1cdf43a9 | 89 | DEBUG("received %u bytes\n\r", bytesRead); |
Farshad | 0:d58d1cdf43a9 | 90 | for(int i = 0; i < bytesRead; i++) { |
Farshad | 0:d58d1cdf43a9 | 91 | DEBUG("0x%X", params->data[i]); |
Farshad | 0:d58d1cdf43a9 | 92 | } |
Farshad | 0:d58d1cdf43a9 | 93 | DEBUG("\n\r", bytesRead); |
Farshad | 0:d58d1cdf43a9 | 94 | |
Farshad | 0:d58d1cdf43a9 | 95 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead); |
Farshad | 0:d58d1cdf43a9 | 96 | if(params->len == 1) |
Farshad | 0:d58d1cdf43a9 | 97 | processData(*(params->data)); |
Farshad | 0:d58d1cdf43a9 | 98 | } |
Farshad | 0:d58d1cdf43a9 | 99 | } |
Farshad | 0:d58d1cdf43a9 | 100 | |
Farshad | 0:d58d1cdf43a9 | 101 | void periodicCallback(void) |
Farshad | 0:d58d1cdf43a9 | 102 | { |
Farshad | 0:d58d1cdf43a9 | 103 | // led1 = !led1; |
Farshad | 0:d58d1cdf43a9 | 104 | } |
Farshad | 0:d58d1cdf43a9 | 105 | |
Farshad | 0:d58d1cdf43a9 | 106 | int main(void) |
Farshad | 0:d58d1cdf43a9 | 107 | { |
Farshad | 0:d58d1cdf43a9 | 108 | pin0 = 1; |
Farshad | 0:d58d1cdf43a9 | 109 | pin1 = 1; |
Farshad | 0:d58d1cdf43a9 | 110 | Ticker ticker; |
Farshad | 0:d58d1cdf43a9 | 111 | ticker.attach(periodicCallback, 1); |
Farshad | 0:d58d1cdf43a9 | 112 | |
Farshad | 0:d58d1cdf43a9 | 113 | DEBUG("Initialising the nRF51822\n\r"); |
Farshad | 0:d58d1cdf43a9 | 114 | ble.init(); |
Farshad | 0:d58d1cdf43a9 | 115 | |
Farshad | 0:d58d1cdf43a9 | 116 | ble.onDisconnection(disconnectionCallback); |
Farshad | 0:d58d1cdf43a9 | 117 | ble.onDataWritten(onDataWritten); |
Farshad | 0:d58d1cdf43a9 | 118 | |
Farshad | 0:d58d1cdf43a9 | 119 | /* setup advertising */ |
Farshad | 0:d58d1cdf43a9 | 120 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
Farshad | 0:d58d1cdf43a9 | 121 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
Farshad | 0:d58d1cdf43a9 | 122 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) - 1); |
Farshad | 0:d58d1cdf43a9 | 123 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,(const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); |
Farshad | 0:d58d1cdf43a9 | 124 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, |
Farshad | 0:d58d1cdf43a9 | 125 | (uint8_t *)GattService::UUID_DEVICE_INFORMATION_SERVICE, sizeof(GattService::UUID_DEVICE_INFORMATION_SERVICE)); |
Farshad | 0:d58d1cdf43a9 | 126 | ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); |
Farshad | 0:d58d1cdf43a9 | 127 | ble.startAdvertising(); |
Farshad | 0:d58d1cdf43a9 | 128 | |
Farshad | 0:d58d1cdf43a9 | 129 | /* Setup uart service */ |
Farshad | 0:d58d1cdf43a9 | 130 | UARTService uartService(ble); |
Farshad | 0:d58d1cdf43a9 | 131 | uartServicePtr = &uartService; |
Farshad | 0:d58d1cdf43a9 | 132 | |
Farshad | 0:d58d1cdf43a9 | 133 | /* Setup auxiliary service. */ |
Farshad | 0:d58d1cdf43a9 | 134 | DeviceInformationService deviceInfo(ble, MANUFACTURER, MODEL, SERIAL_NO,HARDWARE_REV, FIRMWARE_REV, SOFTWARE_REV); |
Farshad | 0:d58d1cdf43a9 | 135 | |
Farshad | 0:d58d1cdf43a9 | 136 | while (true) { |
Farshad | 0:d58d1cdf43a9 | 137 | ble.waitForEvent(); |
Farshad | 0:d58d1cdf43a9 | 138 | } |
Farshad | 0:d58d1cdf43a9 | 139 | } |