EEP fORK

Dependencies:   BLE_API mbed nRF51822

Fork of MCS_LRF by Farshad N

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?

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 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 }