test2

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_Observer by Bluetooth Low Energy

Committer:
DDUdui
Date:
Mon Aug 17 09:47:40 2015 +0000
Revision:
6:af32aad52c44
Parent:
5:103717ce54e5
test2
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:332983584a9c 1 /* mbed Microcontroller Library
rgrover1 0:332983584a9c 2 * Copyright (c) 2006-2015 ARM Limited
rgrover1 0:332983584a9c 3 *
rgrover1 0:332983584a9c 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:332983584a9c 5 * you may not use this file except in compliance with the License.
rgrover1 0:332983584a9c 6 * You may obtain a copy of the License at
rgrover1 0:332983584a9c 7 *
rgrover1 0:332983584a9c 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:332983584a9c 9 *
rgrover1 0:332983584a9c 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:332983584a9c 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:332983584a9c 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:332983584a9c 13 * See the License for the specific language governing permissions and
rgrover1 0:332983584a9c 14 * limitations under the License.
rgrover1 0:332983584a9c 15 */
rgrover1 0:332983584a9c 16
rgrover1 0:332983584a9c 17 #include "mbed.h"
DDUdui 6:af32aad52c44 18 #include "ble/BLE.h"
DDUdui 6:af32aad52c44 19 #include "ble/DiscoveredCharacteristic.h"
DDUdui 6:af32aad52c44 20 #include "ble/DiscoveredService.h"
rgrover1 5:103717ce54e5 21 BLE ble;
rgrover1 0:332983584a9c 22 DigitalOut led1(LED1);
DDUdui 6:af32aad52c44 23 DigitalOut led2(P0_28);
DDUdui 6:af32aad52c44 24 DigitalOut led3(P0_29);
DDUdui 6:af32aad52c44 25 Serial pc(USBTX, USBRX);
DDUdui 6:af32aad52c44 26
rgrover1 0:332983584a9c 27
rgrover1 0:332983584a9c 28 void periodicCallback(void)
rgrover1 0:332983584a9c 29 {
rgrover1 0:332983584a9c 30 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
rgrover1 0:332983584a9c 31 }
rgrover1 0:332983584a9c 32
rgrover1 3:50a7d47912b2 33 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) {
DDUdui 6:af32aad52c44 34 if (params->peerAddr[0] == 0xcb) { /* !ALERT! Alter this filter to suit your device. */
DDUdui 6:af32aad52c44 35 return;
DDUdui 6:af32aad52c44 36 }
DDUdui 6:af32aad52c44 37 pc.printf("Adv peerAddr: [%02x %02x %02x %02x %02x %02x] rssi %d, ScanResp: %u, AdvType: %u\r\n",
rgrover1 3:50a7d47912b2 38 params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],
rgrover1 3:50a7d47912b2 39 params->rssi, params->isScanResponse, params->type);
DDUdui 6:af32aad52c44 40 /*
rgrover1 3:50a7d47912b2 41 for (unsigned index = 0; index < params->advertisingDataLen; index++) {
DDUdui 6:af32aad52c44 42 pc.printf("%02x ", params->advertisingData[index]);
DDUdui 6:af32aad52c44 43 }
DDUdui 6:af32aad52c44 44 pc.printf("\r\n");
DDUdui 6:af32aad52c44 45 /* DUMP_ADV_DATA */
DDUdui 6:af32aad52c44 46
DDUdui 6:af32aad52c44 47 ble.gap().connect(params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
DDUdui 6:af32aad52c44 48
DDUdui 6:af32aad52c44 49 }
DDUdui 6:af32aad52c44 50
DDUdui 6:af32aad52c44 51 void serviceDiscoveryCallback(const DiscoveredService *service) {
DDUdui 6:af32aad52c44 52 if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
DDUdui 6:af32aad52c44 53 pc.printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle());
DDUdui 6:af32aad52c44 54 } else {
DDUdui 6:af32aad52c44 55 printf("S UUID-");
DDUdui 6:af32aad52c44 56 const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID();
DDUdui 6:af32aad52c44 57 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) {
DDUdui 6:af32aad52c44 58 printf("%02x", longUUIDBytes[i]);
DDUdui 6:af32aad52c44 59 }
DDUdui 6:af32aad52c44 60 pc.printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle());
rgrover1 0:332983584a9c 61 }
DDUdui 6:af32aad52c44 62 }
DDUdui 6:af32aad52c44 63
DDUdui 6:af32aad52c44 64 void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP) {
DDUdui 6:af32aad52c44 65
DDUdui 6:af32aad52c44 66 }
DDUdui 6:af32aad52c44 67
DDUdui 6:af32aad52c44 68 void discoveryTerminationCallback(Gap::Handle_t connectionHandle) {
DDUdui 6:af32aad52c44 69 pc.printf("terminated SD for handle %u\r\n", connectionHandle);
rgrover1 0:332983584a9c 70 }
DDUdui 6:af32aad52c44 71
DDUdui 6:af32aad52c44 72 void connectionCallback(const Gap::ConnectionCallbackParams_t *params) {
DDUdui 6:af32aad52c44 73 pc.printf("Connected!!\r\n");
DDUdui 6:af32aad52c44 74 led2=0;
DDUdui 6:af32aad52c44 75 led3=1;
DDUdui 6:af32aad52c44 76 ble.stopAdvertising();
DDUdui 6:af32aad52c44 77 wait(3);
DDUdui 6:af32aad52c44 78 if (params->role == Gap::CENTRAL) {
DDUdui 6:af32aad52c44 79 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
DDUdui 6:af32aad52c44 80 ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, 0xa000, 0xa001);
DDUdui 6:af32aad52c44 81 }/*
DDUdui 6:af32aad52c44 82 ble.gap().disconnect(0,Gap::REMOTE_USER_TERMINATED_CONNECTION);
DDUdui 6:af32aad52c44 83 */
DDUdui 6:af32aad52c44 84 }
DDUdui 6:af32aad52c44 85 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
DDUdui 6:af32aad52c44 86 {
DDUdui 6:af32aad52c44 87 pc.printf("Disconnected\r\n");
DDUdui 6:af32aad52c44 88 pc.printf("Rescan\r\n");
DDUdui 6:af32aad52c44 89 led2=1;
DDUdui 6:af32aad52c44 90 led3=0;
DDUdui 6:af32aad52c44 91 ble.startScan(advertisementCallback);
DDUdui 6:af32aad52c44 92 ble.startAdvertising();
DDUdui 6:af32aad52c44 93 }
DDUdui 6:af32aad52c44 94
rgrover1 0:332983584a9c 95
rgrover1 0:332983584a9c 96 int main(void)
rgrover1 0:332983584a9c 97 {
rgrover1 0:332983584a9c 98 led1 = 1;
DDUdui 6:af32aad52c44 99 led2 = 1;
DDUdui 6:af32aad52c44 100 led3 = 0;
rgrover1 0:332983584a9c 101 Ticker ticker;
rgrover1 0:332983584a9c 102 ticker.attach(periodicCallback, 1);
DDUdui 6:af32aad52c44 103 ble.onConnection(connectionCallback);
DDUdui 6:af32aad52c44 104 ble.onDisconnection(disconnectionCallback);
rgrover1 0:332983584a9c 105
rgrover1 0:332983584a9c 106 ble.init();
DDUdui 6:af32aad52c44 107
DDUdui 6:af32aad52c44 108 pc.baud(9600);
DDUdui 6:af32aad52c44 109 pc.printf("Observer Init \r\n");
DDUdui 6:af32aad52c44 110
DDUdui 6:af32aad52c44 111
DDUdui 6:af32aad52c44 112 /* */
DDUdui 6:af32aad52c44 113 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
DDUdui 6:af32aad52c44 114 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
DDUdui 6:af32aad52c44 115 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
DDUdui 6:af32aad52c44 116 (const uint8_t *)"RAMO2", sizeof("RAMO2") - 1);
DDUdui 6:af32aad52c44 117
DDUdui 6:af32aad52c44 118 ble.gap().setAdvertisingInterval(100); /* 1second. */
DDUdui 6:af32aad52c44 119 ble.gap().startAdvertising();
rgrover1 0:332983584a9c 120
rgrover1 5:103717ce54e5 121 ble.gap().setScanParams(500 /* scan interval */, 200 /* scan window */);
rgrover1 5:103717ce54e5 122 ble.gap().startScan(advertisementCallback);
DDUdui 6:af32aad52c44 123
rgrover1 0:332983584a9c 124 while (true) {
rgrover1 0:332983584a9c 125 ble.waitForEvent();
rgrover1 0:332983584a9c 126 }
rgrover1 0:332983584a9c 127 }