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
Parent:
13:15764cc1f12c
Seeed Test program for Carbon BLE

Who changed what in which revision?

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