AdventCalendar2015

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_ButtonSense by Bluetooth Low Energy

Committer:
yueee_yt
Date:
Sat Dec 19 11:15:17 2015 +0000
Revision:
1:f66e5ed21c90
Parent:
0:2dec89c76f68
AdventCalendar2015

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:2dec89c76f68 1 /* mbed Microcontroller Library
rgrover1 0:2dec89c76f68 2 * Copyright (c) 2006-2015 ARM Limited
rgrover1 0:2dec89c76f68 3 *
rgrover1 0:2dec89c76f68 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:2dec89c76f68 5 * you may not use this file except in compliance with the License.
rgrover1 0:2dec89c76f68 6 * You may obtain a copy of the License at
rgrover1 0:2dec89c76f68 7 *
rgrover1 0:2dec89c76f68 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:2dec89c76f68 9 *
rgrover1 0:2dec89c76f68 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:2dec89c76f68 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:2dec89c76f68 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:2dec89c76f68 13 * See the License for the specific language governing permissions and
rgrover1 0:2dec89c76f68 14 * limitations under the License.
rgrover1 0:2dec89c76f68 15 */
rgrover1 0:2dec89c76f68 16
rgrover1 0:2dec89c76f68 17 #include "mbed.h"
rgrover1 0:2dec89c76f68 18 #include "ble/BLE.h"
rgrover1 0:2dec89c76f68 19 #include "ble/DiscoveredCharacteristic.h"
rgrover1 0:2dec89c76f68 20 #include "ble/DiscoveredService.h"
rgrover1 0:2dec89c76f68 21
rgrover1 0:2dec89c76f68 22 #include "ble_gatt.h"
rgrover1 0:2dec89c76f68 23
rgrover1 0:2dec89c76f68 24 BLE ble;
rgrover1 0:2dec89c76f68 25
yueee_yt 1:f66e5ed21c90 26 int mode=0;
yueee_yt 1:f66e5ed21c90 27
yueee_yt 1:f66e5ed21c90 28 const uint8_t WriteCharacteristicAddr[]= {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
yueee_yt 1:f66e5ed21c90 29
yueee_yt 1:f66e5ed21c90 30 uint8_t peripheral1_ADDRESS[]= {0x3b ,0x72 ,0x34 ,0x88 ,0xe2 ,0xd4};
yueee_yt 1:f66e5ed21c90 31 uint8_t peripheral2_ADDRESS[]= {0x5c ,0xde ,0xa7 ,0xdd ,0xec ,0xe1};
yueee_yt 1:f66e5ed21c90 32 uint8_t peripheral3_ADDRESS[]= {0xf5 ,0x5a ,0x21 ,0xa5 ,0xc0 ,0xde};
yueee_yt 1:f66e5ed21c90 33 uint8_t peripheral4_ADDRESS[]= {0xe0 ,0x15 ,0xdc ,0x65 ,0x1b ,0xd0};
yueee_yt 1:f66e5ed21c90 34 uint8_t peripheral5_ADDRESS[]= {0x01 ,0xc6 ,0x18 ,0x2f ,0x66 ,0xdd};
yueee_yt 1:f66e5ed21c90 35
yueee_yt 1:f66e5ed21c90 36 Gap::Handle_t peripheral1_connectionHandle = 0xFFFF;
yueee_yt 1:f66e5ed21c90 37 Gap::Handle_t peripheral2_connectionHandle = 0xFFFF;
yueee_yt 1:f66e5ed21c90 38 Gap::Handle_t peripheral3_connectionHandle = 0xFFFF;
yueee_yt 1:f66e5ed21c90 39 Gap::Handle_t peripheral4_connectionHandle = 0xFFFF;
yueee_yt 1:f66e5ed21c90 40 Gap::Handle_t peripheral5_connectionHandle = 0xFFFF;
yueee_yt 1:f66e5ed21c90 41
yueee_yt 1:f66e5ed21c90 42 DiscoveredCharacteristic peripheral1_WriteCharacteristic;
yueee_yt 1:f66e5ed21c90 43 DiscoveredCharacteristic peripheral2_WriteCharacteristic;
yueee_yt 1:f66e5ed21c90 44 DiscoveredCharacteristic peripheral3_WriteCharacteristic;
yueee_yt 1:f66e5ed21c90 45 DiscoveredCharacteristic peripheral4_WriteCharacteristic;
yueee_yt 1:f66e5ed21c90 46 DiscoveredCharacteristic peripheral5_WriteCharacteristic;
rgrover1 0:2dec89c76f68 47
rgrover1 0:2dec89c76f68 48 DigitalOut alivenessLED(LED1, 1);
rgrover1 0:2dec89c76f68 49
rgrover1 0:2dec89c76f68 50 void periodicCallback(void) {
rgrover1 0:2dec89c76f68 51 alivenessLED = !alivenessLED; /* Do blinky on LED1 while we're waiting for BLE events */
yueee_yt 1:f66e5ed21c90 52 int er;
yueee_yt 1:f66e5ed21c90 53 if(mode==0){
yueee_yt 1:f66e5ed21c90 54 er= ble.gap().connect(peripheral1_ADDRESS, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL); //Connection
yueee_yt 1:f66e5ed21c90 55 mode=1;printf("mode1 \r\n");
yueee_yt 1:f66e5ed21c90 56 if(er!=0)printf("connection error:%x \r\n",er);
yueee_yt 1:f66e5ed21c90 57 }
yueee_yt 1:f66e5ed21c90 58 if(mode==4){
yueee_yt 1:f66e5ed21c90 59 er= ble.gap().connect(peripheral2_ADDRESS, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL); //Connection
yueee_yt 1:f66e5ed21c90 60 mode=11;printf("mode11 \r\n");
yueee_yt 1:f66e5ed21c90 61 if(er!=0)printf("connection error:%x \r\n",er);
yueee_yt 1:f66e5ed21c90 62 }
yueee_yt 1:f66e5ed21c90 63 if(mode==14){
yueee_yt 1:f66e5ed21c90 64 er= ble.gap().connect(peripheral3_ADDRESS, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL); //Connection
yueee_yt 1:f66e5ed21c90 65 mode=21;printf("mode21 \r\n");
yueee_yt 1:f66e5ed21c90 66 if(er!=0)printf("connection error:%x \r\n",er);
yueee_yt 1:f66e5ed21c90 67 }
yueee_yt 1:f66e5ed21c90 68 if(mode==24){
yueee_yt 1:f66e5ed21c90 69 er= ble.gap().connect(peripheral4_ADDRESS, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL); //Connection
yueee_yt 1:f66e5ed21c90 70 mode=31;printf("mode31 \r\n");
yueee_yt 1:f66e5ed21c90 71 if(er!=0)printf("connection error:%x \r\n",er);
yueee_yt 1:f66e5ed21c90 72 }
yueee_yt 1:f66e5ed21c90 73 if(mode==34){
yueee_yt 1:f66e5ed21c90 74 er= ble.gap().connect(peripheral5_ADDRESS, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL); //Connection
yueee_yt 1:f66e5ed21c90 75 mode=41;printf("mode41 \r\n");
yueee_yt 1:f66e5ed21c90 76 if(er!=0)printf("connection error:%x \r\n",er);
yueee_yt 1:f66e5ed21c90 77 }
rgrover1 0:2dec89c76f68 78 }
rgrover1 0:2dec89c76f68 79
rgrover1 0:2dec89c76f68 80 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) {
yueee_yt 1:f66e5ed21c90 81 //if (params->peerAddr[0] != 0x29) { /* !ALERT! Update this filter to suit your device. */
yueee_yt 1:f66e5ed21c90 82 // return;
yueee_yt 1:f66e5ed21c90 83 //}
rgrover1 0:2dec89c76f68 84 printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n",
rgrover1 0:2dec89c76f68 85 params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],
rgrover1 0:2dec89c76f68 86 params->rssi, params->isScanResponse, params->type);
rgrover1 0:2dec89c76f68 87
yueee_yt 1:f66e5ed21c90 88 //ble.gap().connect(params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
rgrover1 0:2dec89c76f68 89 }
rgrover1 0:2dec89c76f68 90
yueee_yt 1:f66e5ed21c90 91 void peripheral1_characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
yueee_yt 1:f66e5ed21c90 92 {
yueee_yt 1:f66e5ed21c90 93 bool flag;
yueee_yt 1:f66e5ed21c90 94 if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) {
yueee_yt 1:f66e5ed21c90 95 const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID();
yueee_yt 1:f66e5ed21c90 96 flag=true;
yueee_yt 1:f66e5ed21c90 97 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
yueee_yt 1:f66e5ed21c90 98 if( longUUIDBytes[UUID::LENGTH_OF_LONG_UUID-i-1]!=WriteCharacteristicAddr[i])flag=false;
yueee_yt 1:f66e5ed21c90 99 if(flag==true) {
yueee_yt 1:f66e5ed21c90 100 printf("#peripheral1_Write characteristic found\r\n");
yueee_yt 1:f66e5ed21c90 101 peripheral1_WriteCharacteristic = *characteristicP;
yueee_yt 1:f66e5ed21c90 102 mode=3;printf("mode3 \r\n");
yueee_yt 1:f66e5ed21c90 103 }
yueee_yt 1:f66e5ed21c90 104 }
yueee_yt 1:f66e5ed21c90 105 }
yueee_yt 1:f66e5ed21c90 106
yueee_yt 1:f66e5ed21c90 107 void peripheral2_characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
yueee_yt 1:f66e5ed21c90 108 {
yueee_yt 1:f66e5ed21c90 109 bool flag;
yueee_yt 1:f66e5ed21c90 110 if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) {
yueee_yt 1:f66e5ed21c90 111 const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID();
yueee_yt 1:f66e5ed21c90 112 flag=true;
yueee_yt 1:f66e5ed21c90 113 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
yueee_yt 1:f66e5ed21c90 114 if( longUUIDBytes[UUID::LENGTH_OF_LONG_UUID-i-1]!=WriteCharacteristicAddr[i])flag=false;
yueee_yt 1:f66e5ed21c90 115 if(flag==true) {
yueee_yt 1:f66e5ed21c90 116 printf("#peripheral2_Write characteristic found\r\n");
yueee_yt 1:f66e5ed21c90 117 peripheral2_WriteCharacteristic = *characteristicP;
yueee_yt 1:f66e5ed21c90 118 mode=13;printf("mode13 \r\n");
yueee_yt 1:f66e5ed21c90 119 }
rgrover1 0:2dec89c76f68 120 }
rgrover1 0:2dec89c76f68 121 }
rgrover1 0:2dec89c76f68 122
yueee_yt 1:f66e5ed21c90 123 void peripheral3_characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
yueee_yt 1:f66e5ed21c90 124 {
yueee_yt 1:f66e5ed21c90 125 bool flag;
yueee_yt 1:f66e5ed21c90 126 if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) {
yueee_yt 1:f66e5ed21c90 127 const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID();
yueee_yt 1:f66e5ed21c90 128 flag=true;
yueee_yt 1:f66e5ed21c90 129 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
yueee_yt 1:f66e5ed21c90 130 if( longUUIDBytes[UUID::LENGTH_OF_LONG_UUID-i-1]!=WriteCharacteristicAddr[i])flag=false;
yueee_yt 1:f66e5ed21c90 131 if(flag==true) {
yueee_yt 1:f66e5ed21c90 132 printf("#peripheral3_Write characteristic found\r\n");
yueee_yt 1:f66e5ed21c90 133 peripheral3_WriteCharacteristic = *characteristicP;
yueee_yt 1:f66e5ed21c90 134 mode=23;printf("mode23 \r\n");
yueee_yt 1:f66e5ed21c90 135 }
yueee_yt 1:f66e5ed21c90 136 }
yueee_yt 1:f66e5ed21c90 137 }
yueee_yt 1:f66e5ed21c90 138
yueee_yt 1:f66e5ed21c90 139 void peripheral4_characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
yueee_yt 1:f66e5ed21c90 140 {
yueee_yt 1:f66e5ed21c90 141 bool flag;
yueee_yt 1:f66e5ed21c90 142 if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) {
yueee_yt 1:f66e5ed21c90 143 const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID();
yueee_yt 1:f66e5ed21c90 144 flag=true;
yueee_yt 1:f66e5ed21c90 145 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
yueee_yt 1:f66e5ed21c90 146 if( longUUIDBytes[UUID::LENGTH_OF_LONG_UUID-i-1]!=WriteCharacteristicAddr[i])flag=false;
yueee_yt 1:f66e5ed21c90 147 if(flag==true) {
yueee_yt 1:f66e5ed21c90 148 printf("#peripheral4_Write characteristic found\r\n");
yueee_yt 1:f66e5ed21c90 149 peripheral4_WriteCharacteristic = *characteristicP;
yueee_yt 1:f66e5ed21c90 150 mode=33;printf("mode33 \r\n");
yueee_yt 1:f66e5ed21c90 151 }
yueee_yt 1:f66e5ed21c90 152 }
yueee_yt 1:f66e5ed21c90 153 }
yueee_yt 1:f66e5ed21c90 154
yueee_yt 1:f66e5ed21c90 155 void peripheral5_characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
yueee_yt 1:f66e5ed21c90 156 {
yueee_yt 1:f66e5ed21c90 157 bool flag;
yueee_yt 1:f66e5ed21c90 158 if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) {
yueee_yt 1:f66e5ed21c90 159 const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID();
yueee_yt 1:f66e5ed21c90 160 flag=true;
yueee_yt 1:f66e5ed21c90 161 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
yueee_yt 1:f66e5ed21c90 162 if( longUUIDBytes[UUID::LENGTH_OF_LONG_UUID-i-1]!=WriteCharacteristicAddr[i])flag=false;
yueee_yt 1:f66e5ed21c90 163 if(flag==true) {
yueee_yt 1:f66e5ed21c90 164 printf("#peripheral5_Write characteristic found\r\n");
yueee_yt 1:f66e5ed21c90 165 peripheral5_WriteCharacteristic = *characteristicP;
yueee_yt 1:f66e5ed21c90 166 mode=43;printf("mode43 \r\n");
yueee_yt 1:f66e5ed21c90 167 }
rgrover1 0:2dec89c76f68 168 }
rgrover1 0:2dec89c76f68 169 }
rgrover1 0:2dec89c76f68 170
rgrover1 0:2dec89c76f68 171 void discoveryTerminationCallback(Gap::Handle_t connectionHandle) {
yueee_yt 1:f66e5ed21c90 172 if(peripheral1_connectionHandle==connectionHandle) {
yueee_yt 1:f66e5ed21c90 173 printf("peripheral1_terminated SD\r\n");
yueee_yt 1:f66e5ed21c90 174 mode=4;printf("mode4 \r\n");
yueee_yt 1:f66e5ed21c90 175 }
yueee_yt 1:f66e5ed21c90 176 if(peripheral2_connectionHandle==connectionHandle) {
yueee_yt 1:f66e5ed21c90 177 printf("peripheral2_terminated SD\r\n");
yueee_yt 1:f66e5ed21c90 178 mode=14;printf("mode14 \r\n");
yueee_yt 1:f66e5ed21c90 179 }
yueee_yt 1:f66e5ed21c90 180 if(peripheral3_connectionHandle==connectionHandle) {
yueee_yt 1:f66e5ed21c90 181 printf("peripheral3_terminated SD\r\n");
yueee_yt 1:f66e5ed21c90 182 mode=24;printf("mode24 \r\n");
yueee_yt 1:f66e5ed21c90 183 }
yueee_yt 1:f66e5ed21c90 184 if(peripheral4_connectionHandle==connectionHandle) {
yueee_yt 1:f66e5ed21c90 185 printf("peripheral4_terminated SD\r\n");
yueee_yt 1:f66e5ed21c90 186 mode=34;printf("mode34 \r\n");
yueee_yt 1:f66e5ed21c90 187 }
yueee_yt 1:f66e5ed21c90 188 if(peripheral5_connectionHandle==connectionHandle) {
yueee_yt 1:f66e5ed21c90 189 printf("peripheral5_terminated SD\r\n");
yueee_yt 1:f66e5ed21c90 190 mode=44;printf("mode44 \r\n");
yueee_yt 1:f66e5ed21c90 191 }
yueee_yt 1:f66e5ed21c90 192 }
yueee_yt 1:f66e5ed21c90 193
yueee_yt 1:f66e5ed21c90 194 void peripheral1_serviceDiscoveryCallback(const DiscoveredService *service)
yueee_yt 1:f66e5ed21c90 195 {
yueee_yt 1:f66e5ed21c90 196 }
yueee_yt 1:f66e5ed21c90 197 void peripheral2_serviceDiscoveryCallback(const DiscoveredService *service)
yueee_yt 1:f66e5ed21c90 198 {
yueee_yt 1:f66e5ed21c90 199 }
yueee_yt 1:f66e5ed21c90 200 void peripheral3_serviceDiscoveryCallback(const DiscoveredService *service)
yueee_yt 1:f66e5ed21c90 201 {
yueee_yt 1:f66e5ed21c90 202 }
yueee_yt 1:f66e5ed21c90 203 void peripheral4_serviceDiscoveryCallback(const DiscoveredService *service)
yueee_yt 1:f66e5ed21c90 204 {
yueee_yt 1:f66e5ed21c90 205 }
yueee_yt 1:f66e5ed21c90 206 void peripheral5_serviceDiscoveryCallback(const DiscoveredService *service)
yueee_yt 1:f66e5ed21c90 207 {
rgrover1 0:2dec89c76f68 208 }
rgrover1 0:2dec89c76f68 209
rgrover1 0:2dec89c76f68 210 void connectionCallback(const Gap::ConnectionCallbackParams_t *params) {
yueee_yt 1:f66e5ed21c90 211 bool f;
yueee_yt 1:f66e5ed21c90 212 int i;
yueee_yt 1:f66e5ed21c90 213 printf("connection callback\r\n");
rgrover1 0:2dec89c76f68 214 if (params->role == Gap::CENTRAL) {
yueee_yt 1:f66e5ed21c90 215
yueee_yt 1:f66e5ed21c90 216 f=true;
yueee_yt 1:f66e5ed21c90 217 for(i=0; i<6; i++)if(params->peerAddr[i]!=peripheral1_ADDRESS[i])f=false;
yueee_yt 1:f66e5ed21c90 218 if(f==true) {
yueee_yt 1:f66e5ed21c90 219 peripheral1_connectionHandle=params->handle;
yueee_yt 1:f66e5ed21c90 220 ble.gattClient().launchServiceDiscovery(params->handle, peripheral1_serviceDiscoveryCallback, peripheral1_characteristicDiscoveryCallback);
yueee_yt 1:f66e5ed21c90 221 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
yueee_yt 1:f66e5ed21c90 222 mode=2;printf("mode2 \r\n");
yueee_yt 1:f66e5ed21c90 223 }
yueee_yt 1:f66e5ed21c90 224
yueee_yt 1:f66e5ed21c90 225 f=true;
yueee_yt 1:f66e5ed21c90 226 for(i=0; i<6; i++)if(params->peerAddr[i]!=peripheral2_ADDRESS[i])f=false;
yueee_yt 1:f66e5ed21c90 227 if(f==true) {
yueee_yt 1:f66e5ed21c90 228 peripheral2_connectionHandle=params->handle;
yueee_yt 1:f66e5ed21c90 229 ble.gattClient().launchServiceDiscovery(params->handle, peripheral2_serviceDiscoveryCallback, peripheral2_characteristicDiscoveryCallback);
yueee_yt 1:f66e5ed21c90 230 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
yueee_yt 1:f66e5ed21c90 231 mode=12;printf("mode12 \r\n");
yueee_yt 1:f66e5ed21c90 232 }
yueee_yt 1:f66e5ed21c90 233
yueee_yt 1:f66e5ed21c90 234 f=true;
yueee_yt 1:f66e5ed21c90 235 for(i=0; i<6; i++)if(params->peerAddr[i]!=peripheral3_ADDRESS[i])f=false;
yueee_yt 1:f66e5ed21c90 236 if(f==true) {
yueee_yt 1:f66e5ed21c90 237 peripheral3_connectionHandle=params->handle;
yueee_yt 1:f66e5ed21c90 238 ble.gattClient().launchServiceDiscovery(params->handle, peripheral3_serviceDiscoveryCallback, peripheral3_characteristicDiscoveryCallback);
yueee_yt 1:f66e5ed21c90 239 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
yueee_yt 1:f66e5ed21c90 240 mode=22;printf("mode22 \r\n");
yueee_yt 1:f66e5ed21c90 241 }
yueee_yt 1:f66e5ed21c90 242
yueee_yt 1:f66e5ed21c90 243 f=true;
yueee_yt 1:f66e5ed21c90 244 for(i=0; i<6; i++)if(params->peerAddr[i]!=peripheral4_ADDRESS[i])f=false;
yueee_yt 1:f66e5ed21c90 245 if(f==true) {
yueee_yt 1:f66e5ed21c90 246 peripheral4_connectionHandle=params->handle;
yueee_yt 1:f66e5ed21c90 247 ble.gattClient().launchServiceDiscovery(params->handle, peripheral4_serviceDiscoveryCallback, peripheral4_characteristicDiscoveryCallback);
yueee_yt 1:f66e5ed21c90 248 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
yueee_yt 1:f66e5ed21c90 249 mode=32;printf("mode32 \r\n");
yueee_yt 1:f66e5ed21c90 250 }
yueee_yt 1:f66e5ed21c90 251
yueee_yt 1:f66e5ed21c90 252 f=true;
yueee_yt 1:f66e5ed21c90 253 for(i=0; i<6; i++)if(params->peerAddr[i]!=peripheral5_ADDRESS[i])f=false;
yueee_yt 1:f66e5ed21c90 254 if(f==true) {
yueee_yt 1:f66e5ed21c90 255 peripheral5_connectionHandle=params->handle;
yueee_yt 1:f66e5ed21c90 256 ble.gattClient().launchServiceDiscovery(params->handle, peripheral5_serviceDiscoveryCallback, peripheral5_characteristicDiscoveryCallback);
yueee_yt 1:f66e5ed21c90 257 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
yueee_yt 1:f66e5ed21c90 258 mode=42;printf("mode42 \r\n");
yueee_yt 1:f66e5ed21c90 259 }
rgrover1 0:2dec89c76f68 260 }
rgrover1 0:2dec89c76f68 261 }
rgrover1 0:2dec89c76f68 262
yueee_yt 1:f66e5ed21c90 263 //void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
yueee_yt 1:f66e5ed21c90 264 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
yueee_yt 1:f66e5ed21c90 265 printf("disconnect\r\n");
yueee_yt 1:f66e5ed21c90 266 if(peripheral1_connectionHandle==params->handle) {
yueee_yt 1:f66e5ed21c90 267 printf("peripheral1:Disconnected\r\n");
yueee_yt 1:f66e5ed21c90 268 }
yueee_yt 1:f66e5ed21c90 269 if(peripheral2_connectionHandle==params->handle) {
yueee_yt 1:f66e5ed21c90 270 printf("peripheral2:Disconnected\r\n");
yueee_yt 1:f66e5ed21c90 271 }
yueee_yt 1:f66e5ed21c90 272 if(peripheral3_connectionHandle==params->handle) {
yueee_yt 1:f66e5ed21c90 273 printf("peripheral3:Disconnected\r\n");
yueee_yt 1:f66e5ed21c90 274 }
yueee_yt 1:f66e5ed21c90 275 if(peripheral4_connectionHandle==params->handle) {
yueee_yt 1:f66e5ed21c90 276 printf("peripheral4:Disconnected\r\n");
yueee_yt 1:f66e5ed21c90 277 }
yueee_yt 1:f66e5ed21c90 278 if(peripheral5_connectionHandle==params->handle) {
yueee_yt 1:f66e5ed21c90 279 printf("peripheral5:Disconnected\r\n");
yueee_yt 1:f66e5ed21c90 280 }
rgrover1 0:2dec89c76f68 281 }
rgrover1 0:2dec89c76f68 282
rgrover1 0:2dec89c76f68 283 void hvxCallback(const GattHVXCallbackParams *params) {
rgrover1 0:2dec89c76f68 284 printf("received HVX callback for handle %u; type %s\r\n", params->handle, (params->type == BLE_HVX_NOTIFICATION) ? "notification" : "indication");
rgrover1 0:2dec89c76f68 285 for (unsigned index = 0; index < params->len; index++) {
rgrover1 0:2dec89c76f68 286 printf(" %02x", params->data[index]);
rgrover1 0:2dec89c76f68 287 }
rgrover1 0:2dec89c76f68 288 printf("\r\n");
rgrover1 0:2dec89c76f68 289 }
rgrover1 0:2dec89c76f68 290
rgrover1 0:2dec89c76f68 291 int main(void) {
rgrover1 0:2dec89c76f68 292 Ticker ticker;
rgrover1 0:2dec89c76f68 293 ticker.attach(periodicCallback, 1);
rgrover1 0:2dec89c76f68 294
rgrover1 0:2dec89c76f68 295 ble.init();
rgrover1 0:2dec89c76f68 296 ble.gap().onConnection(connectionCallback);
rgrover1 0:2dec89c76f68 297 ble.gap().onDisconnection(disconnectionCallback);
rgrover1 0:2dec89c76f68 298
yueee_yt 1:f66e5ed21c90 299 // ble.gap().setScanParams(500, 400);
yueee_yt 1:f66e5ed21c90 300 // ble.gap().startScan(advertisementCallback);
rgrover1 0:2dec89c76f68 301
yueee_yt 1:f66e5ed21c90 302 // ble.gattClient().onHVX(hvxCallback);
rgrover1 0:2dec89c76f68 303
rgrover1 0:2dec89c76f68 304 while (true) {
rgrover1 0:2dec89c76f68 305 ble.waitForEvent();
rgrover1 0:2dec89c76f68 306 }
rgrover1 0:2dec89c76f68 307 }