AdventCalendar2015
Dependencies: BLE_API mbed nRF51822
Fork of BLE_ButtonSense by
main.cpp@1:f66e5ed21c90, 2015-12-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |