Seeed Test program for Carbon BLE

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Committer:
lanselambor
Date:
Mon Sep 12 10:36:49 2016 +0000
Revision:
14:b8bf29421727
Seeed Test program for Carbon BLE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lanselambor 14:b8bf29421727 1 /* mbed Microcontroller Library
lanselambor 14:b8bf29421727 2 * Copyright (c) 2006-2013 ARM Limited
lanselambor 14:b8bf29421727 3 *
lanselambor 14:b8bf29421727 4 * Licensed under the Apache License, Version 2.0 (the "License");
lanselambor 14:b8bf29421727 5 * you may not use this file except in compliance with the License.
lanselambor 14:b8bf29421727 6 * You may obtain a copy of the License at
lanselambor 14:b8bf29421727 7 *
lanselambor 14:b8bf29421727 8 * http://www.apache.org/licenses/LICENSE-2.0
lanselambor 14:b8bf29421727 9 *
lanselambor 14:b8bf29421727 10 * Unless required by applicable law or agreed to in writing, software
lanselambor 14:b8bf29421727 11 * distributed under the License is distributed on an "AS IS" BASIS,
lanselambor 14:b8bf29421727 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
lanselambor 14:b8bf29421727 13 * See the License for the specific language governing permissions and
lanselambor 14:b8bf29421727 14 * limitations under the License.
lanselambor 14:b8bf29421727 15 */
lanselambor 14:b8bf29421727 16
lanselambor 14:b8bf29421727 17 #include "mbed.h"
lanselambor 14:b8bf29421727 18 #include "ble/BLE.h"
lanselambor 14:b8bf29421727 19
lanselambor 14:b8bf29421727 20 #include "ble/services/UARTService.h"
lanselambor 14:b8bf29421727 21
lanselambor 14:b8bf29421727 22 #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
lanselambor 14:b8bf29421727 23 * it will have an impact on code-size and power consumption. */
lanselambor 14:b8bf29421727 24
lanselambor 14:b8bf29421727 25 #if NEED_CONSOLE_OUTPUT
lanselambor 14:b8bf29421727 26 #define DEBUG(...) { printf(__VA_ARGS__); }
lanselambor 14:b8bf29421727 27 #else
lanselambor 14:b8bf29421727 28 #define DEBUG(...) /* nothing */
lanselambor 14:b8bf29421727 29 #endif /* #if NEED_CONSOLE_OUTPUT */
lanselambor 14:b8bf29421727 30
lanselambor 14:b8bf29421727 31 BLEDevice ble;
lanselambor 14:b8bf29421727 32 DigitalOut led1(LED1);
lanselambor 14:b8bf29421727 33
lanselambor 14:b8bf29421727 34 UARTService *uartServicePtr;
lanselambor 14:b8bf29421727 35
lanselambor 14:b8bf29421727 36 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
lanselambor 14:b8bf29421727 37 {
lanselambor 14:b8bf29421727 38 DEBUG("Disconnected!\n\r");
lanselambor 14:b8bf29421727 39 DEBUG("Restarting the advertising process\n\r");
lanselambor 14:b8bf29421727 40 ble.startAdvertising();
lanselambor 14:b8bf29421727 41 }
lanselambor 14:b8bf29421727 42
lanselambor 14:b8bf29421727 43 void onDataWritten(const GattWriteCallbackParams *params)
lanselambor 14:b8bf29421727 44 {
lanselambor 14:b8bf29421727 45 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
lanselambor 14:b8bf29421727 46 uint16_t bytesRead = params->len;
lanselambor 14:b8bf29421727 47 DEBUG("received %u bytes\n\r", bytesRead);
lanselambor 14:b8bf29421727 48 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
lanselambor 14:b8bf29421727 49 }
lanselambor 14:b8bf29421727 50 }
lanselambor 14:b8bf29421727 51
lanselambor 14:b8bf29421727 52 void periodicCallback(void)
lanselambor 14:b8bf29421727 53 {
lanselambor 14:b8bf29421727 54 led1 = !led1;
lanselambor 14:b8bf29421727 55 }
lanselambor 14:b8bf29421727 56
lanselambor 14:b8bf29421727 57 int main(void)
lanselambor 14:b8bf29421727 58 {
lanselambor 14:b8bf29421727 59 led1 = 1;
lanselambor 14:b8bf29421727 60 Ticker ticker;
lanselambor 14:b8bf29421727 61 ticker.attach(periodicCallback, 1);
lanselambor 14:b8bf29421727 62
lanselambor 14:b8bf29421727 63 DEBUG("Initialising the nRF51822\n\r");
lanselambor 14:b8bf29421727 64 ble.init();
lanselambor 14:b8bf29421727 65 ble.onDisconnection(disconnectionCallback);
lanselambor 14:b8bf29421727 66 ble.onDataWritten(onDataWritten);
lanselambor 14:b8bf29421727 67
lanselambor 14:b8bf29421727 68 /* setup advertising */
lanselambor 14:b8bf29421727 69 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
lanselambor 14:b8bf29421727 70 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
lanselambor 14:b8bf29421727 71 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
lanselambor 14:b8bf29421727 72 (const uint8_t *)"BLE SPI", sizeof("BLE SPI") - 1);
lanselambor 14:b8bf29421727 73 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
lanselambor 14:b8bf29421727 74 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
lanselambor 14:b8bf29421727 75
lanselambor 14:b8bf29421727 76 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
lanselambor 14:b8bf29421727 77 ble.startAdvertising();
lanselambor 14:b8bf29421727 78
lanselambor 14:b8bf29421727 79 UARTService uartService(ble);
lanselambor 14:b8bf29421727 80 uartServicePtr = &uartService;
lanselambor 14:b8bf29421727 81
lanselambor 14:b8bf29421727 82 while (true) {
lanselambor 14:b8bf29421727 83 ble.waitForEvent();
lanselambor 14:b8bf29421727 84 }
lanselambor 14:b8bf29421727 85 }