new version for central test two peripherals

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_Nano_Central_Type3 by Francesco Pavoni

Committer:
FranKP2138
Date:
Thu Jun 02 15:42:04 2016 +0000
Revision:
6:d37a6e3c17c4
Parent:
5:68a31613f28a
Set pre state for search characteristic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FranKP2138 4:722dfc6fe1de 1 /*
FranKP2138 4:722dfc6fe1de 2 * Copyright (c) 2016 RedBear
FranKP2138 4:722dfc6fe1de 3 *
FranKP2138 4:722dfc6fe1de 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
FranKP2138 4:722dfc6fe1de 5 * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
FranKP2138 4:722dfc6fe1de 6 * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
FranKP2138 4:722dfc6fe1de 7 *
FranKP2138 4:722dfc6fe1de 8 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
FranKP2138 4:722dfc6fe1de 9 *
FranKP2138 4:722dfc6fe1de 10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FranKP2138 4:722dfc6fe1de 11 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
FranKP2138 4:722dfc6fe1de 12 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
FranKP2138 4:722dfc6fe1de 13 * IN THE SOFTWARE.
FranKP2138 4:722dfc6fe1de 14 */
FranKP2138 4:722dfc6fe1de 15 /**
FranKP2138 4:722dfc6fe1de 16 * @brief This example is used to demonstrate central functions.
FranKP2138 4:722dfc6fe1de 17 * Device with this application will try to connect to example "BLE_HRM" or "BLE_simplePeripheral"
FranKP2138 4:722dfc6fe1de 18 * If connecting to "BLE_HRM", will get heart rate
FranKP2138 4:722dfc6fe1de 19 * If connecting to "BLE_simplePeripheral, will discovery all services and characteristics
FranKP2138 4:722dfc6fe1de 20 */
mbed_tw_hoehoe 0:83b5c6efd8d7 21 #include "mbed.h"
mbed_tw_hoehoe 0:83b5c6efd8d7 22 #include "ble/BLE.h"
mbed_tw_hoehoe 0:83b5c6efd8d7 23 #include "ble/DiscoveredCharacteristic.h"
mbed_tw_hoehoe 0:83b5c6efd8d7 24 #include "ble/DiscoveredService.h"
mbed_tw_hoehoe 3:d6f80e11a7f4 25 #include "ble/GapScanningParams.h"
mbed_tw_hoehoe 2:4b53d13d9851 26 #include "ble_radio_notification.h"
mbed_tw_hoehoe 3:d6f80e11a7f4 27 #include "ble_gap.h"
mbed_tw_hoehoe 0:83b5c6efd8d7 28
mbed_tw_hoehoe 0:83b5c6efd8d7 29 BLE ble;
mbed_tw_hoehoe 1:2f1203d70643 30 Serial pc(USBTX, USBRX);
mbed_tw_hoehoe 0:83b5c6efd8d7 31
FranKP2138 4:722dfc6fe1de 32 //const uint8_t MPU6050_service_uuid[] = {0x45,0x35,0x56,0x80,0x0F,0xD8,0x5F,0xB5,0x51,0x48,0x30,0x27,0x06,0x9B,0x3F,0xD9};
FranKP2138 4:722dfc6fe1de 33 //const uint8_t MPU6050_Accel_Characteristic_uuid[] = {0x45,0x35,0x56,0x81,0x0F,0xD8,0x5F,0xB5,0x51,0x48,0x30,0x27,0x06,0x9B,0x3F,0xD9};
FranKP2138 4:722dfc6fe1de 34
FranKP2138 4:722dfc6fe1de 35 static uint8_t service1_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
FranKP2138 4:722dfc6fe1de 36 static uint8_t service1_chars1[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
FranKP2138 4:722dfc6fe1de 37 static uint8_t service1_chars2[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
FranKP2138 4:722dfc6fe1de 38 static uint8_t service1_chars3[] = {0x71, 0x3D, 0, 4, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
FranKP2138 4:722dfc6fe1de 39
FranKP2138 4:722dfc6fe1de 40
FranKP2138 5:68a31613f28a 41 UUID service_uuid(0x180D); // (1) this change in sensor PWM
FranKP2138 4:722dfc6fe1de 42 UUID chars_uuid1(0x2A37);
FranKP2138 4:722dfc6fe1de 43 UUID chars_uuid2(service1_chars2);
FranKP2138 4:722dfc6fe1de 44 UUID chars_uuid3(service1_chars3);
FranKP2138 4:722dfc6fe1de 45
FranKP2138 4:722dfc6fe1de 46 static uint8_t device_is_hrm = 0;
FranKP2138 4:722dfc6fe1de 47 static uint8_t device_is_simple_peripheral = 0;
mbed_tw_hoehoe 0:83b5c6efd8d7 48
FranKP2138 4:722dfc6fe1de 49 // When found the match characteristic, set 1.
FranKP2138 4:722dfc6fe1de 50 static uint8_t characteristic_is_fond = 0;
FranKP2138 4:722dfc6fe1de 51 // When found the match descriptor, set 1.
FranKP2138 4:722dfc6fe1de 52 static uint8_t descriptor_is_found = 0;
FranKP2138 4:722dfc6fe1de 53 // To save the hrm characteristic and descriptor
FranKP2138 4:722dfc6fe1de 54 static DiscoveredCharacteristic chars_hrm;
FranKP2138 4:722dfc6fe1de 55 static DiscoveredCharacteristicDescriptor desc_of_chars_hrm(NULL,GattAttribute::INVALID_HANDLE,GattAttribute::INVALID_HANDLE,UUID::ShortUUIDBytes_t(0));
mbed_tw_hoehoe 0:83b5c6efd8d7 56
FranKP2138 4:722dfc6fe1de 57 static void scanCallback(const Gap::AdvertisementCallbackParams_t *params);
FranKP2138 4:722dfc6fe1de 58 static void discoveredServiceCallBack(const DiscoveredService *service);
FranKP2138 4:722dfc6fe1de 59 static void discoveredCharacteristicCallBack(const DiscoveredCharacteristic *chars);
FranKP2138 4:722dfc6fe1de 60 static void discoveryTerminationCallBack(Gap::Handle_t connectionHandle);
FranKP2138 4:722dfc6fe1de 61 static void discoveredCharsDescriptorCallBack(const CharacteristicDescriptorDiscovery::DiscoveryCallbackParams_t *params);
FranKP2138 4:722dfc6fe1de 62 static void discoveredDescTerminationCallBack(const CharacteristicDescriptorDiscovery::TerminationCallbackParams_t *params) ;
mbed_tw_hoehoe 0:83b5c6efd8d7 63
FranKP2138 4:722dfc6fe1de 64 //DiscoveredCharacteristic accelChar;
FranKP2138 4:722dfc6fe1de 65 //UUID serviceUUID(MPU6050_service_uuid);
FranKP2138 4:722dfc6fe1de 66 //UUID accelUUID(MPU6050_Accel_Characteristic_uuid);
FranKP2138 4:722dfc6fe1de 67
FranKP2138 4:722dfc6fe1de 68 #define NUMBER_OF_PERIPHERALS 2
mbed_tw_hoehoe 3:d6f80e11a7f4 69
mbed_tw_hoehoe 3:d6f80e11a7f4 70 typedef struct {
mbed_tw_hoehoe 3:d6f80e11a7f4 71 Gap::Handle_t handle;
mbed_tw_hoehoe 3:d6f80e11a7f4 72 Gap::Address_t address;
mbed_tw_hoehoe 3:d6f80e11a7f4 73 bool connected;
mbed_tw_hoehoe 3:d6f80e11a7f4 74 uint8_t* deviceName;
mbed_tw_hoehoe 3:d6f80e11a7f4 75 } peripheral_t;
mbed_tw_hoehoe 3:d6f80e11a7f4 76
mbed_tw_hoehoe 3:d6f80e11a7f4 77 static peripheral_t gs_peripheral[NUMBER_OF_PERIPHERALS];
mbed_tw_hoehoe 3:d6f80e11a7f4 78
mbed_tw_hoehoe 3:d6f80e11a7f4 79 uint32_t ble_advdata_parser(uint8_t type, uint8_t advdata_len, uint8_t *p_advdata, uint8_t *len, uint8_t *p_field_data)
mbed_tw_hoehoe 3:d6f80e11a7f4 80 {
FranKP2138 5:68a31613f28a 81 pc.printf("ble_advdata_parse \r\n");
FranKP2138 5:68a31613f28a 82
mbed_tw_hoehoe 3:d6f80e11a7f4 83 uint8_t index=0;
mbed_tw_hoehoe 3:d6f80e11a7f4 84 uint8_t field_length, field_type;
mbed_tw_hoehoe 3:d6f80e11a7f4 85
mbed_tw_hoehoe 3:d6f80e11a7f4 86 while(index<advdata_len)
mbed_tw_hoehoe 3:d6f80e11a7f4 87 {
mbed_tw_hoehoe 3:d6f80e11a7f4 88 field_length = p_advdata[index];
mbed_tw_hoehoe 3:d6f80e11a7f4 89 field_type = p_advdata[index+1];
mbed_tw_hoehoe 3:d6f80e11a7f4 90 if(field_type == type)
mbed_tw_hoehoe 3:d6f80e11a7f4 91 {
mbed_tw_hoehoe 3:d6f80e11a7f4 92 memcpy(p_field_data, &p_advdata[index+2], (field_length-1));
mbed_tw_hoehoe 3:d6f80e11a7f4 93 *len = field_length - 1;
mbed_tw_hoehoe 3:d6f80e11a7f4 94 return NRF_SUCCESS;
mbed_tw_hoehoe 3:d6f80e11a7f4 95 }
FranKP2138 5:68a31613f28a 96 pc.printf("FOUND \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 97 index += field_length + 1;
mbed_tw_hoehoe 3:d6f80e11a7f4 98 }
FranKP2138 5:68a31613f28a 99 pc.printf("NRF_ERROR_NOT_FOUND \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 100 return NRF_ERROR_NOT_FOUND;
mbed_tw_hoehoe 3:d6f80e11a7f4 101 }
mbed_tw_hoehoe 0:83b5c6efd8d7 102
FranKP2138 4:722dfc6fe1de 103
FranKP2138 4:722dfc6fe1de 104 void startDiscovery(uint16_t handle) {
FranKP2138 4:722dfc6fe1de 105 /**
FranKP2138 4:722dfc6fe1de 106 * Launch service discovery. Once launched, application callbacks will beinvoked for matching services or characteristics.
FranKP2138 4:722dfc6fe1de 107 * isServiceDiscoveryActive() can be used to determine status, and a termination callback (if one was set up)will be invoked at the end.
FranKP2138 4:722dfc6fe1de 108 * Service discovery can be terminated prematurely,if needed, using terminateServiceDiscovery().
FranKP2138 4:722dfc6fe1de 109 *
FranKP2138 4:722dfc6fe1de 110 * @param[in] connectionHandle Handle for the connection with the peer.
FranKP2138 4:722dfc6fe1de 111 * @param[in] sc This is the application callback for a matching service. Taken as NULL by default.
FranKP2138 4:722dfc6fe1de 112 * Note: service discovery may still be active when this callback is issued;
FranKP2138 4:722dfc6fe1de 113 * calling asynchronous BLE-stack APIs from within this application callback might cause the stack to abort service discovery.
FranKP2138 4:722dfc6fe1de 114 * If this becomes an issue, it may be better to make a local copy of the discoveredService and wait for service discovery to terminate before operating on the service.
FranKP2138 4:722dfc6fe1de 115 * @param[in] cc This is the application callback for a matching characteristic.Taken as NULL by default.
FranKP2138 4:722dfc6fe1de 116 * Note: service discovery may still be active when this callback is issued;
FranKP2138 4:722dfc6fe1de 117 * calling asynchronous BLE-stack APIs from within this application callback might cause the stack to abort service discovery.
FranKP2138 4:722dfc6fe1de 118 * If this becomes an issue, it may be better to make a local copy of the discoveredCharacteristic and wait for service discovery to terminate before operating on the characteristic.
FranKP2138 4:722dfc6fe1de 119 * @param[in] matchingServiceUUID UUID-based filter for specifying a service in which the application is interested.
FranKP2138 4:722dfc6fe1de 120 * By default it is set as the wildcard UUID_UNKNOWN, in which case it matches all services.
FranKP2138 4:722dfc6fe1de 121 * @param[in] matchingCharacteristicUUIDIn UUID-based filter for specifying characteristic in which the application is interested.
FranKP2138 4:722dfc6fe1de 122 * By default it is set as the wildcard UUID_UKNOWN to match against any characteristic.
FranKP2138 4:722dfc6fe1de 123 *
FranKP2138 4:722dfc6fe1de 124 * @note Using wildcard values for both service-UUID and characteristic-UUID will result in complete service discovery:
FranKP2138 4:722dfc6fe1de 125 * callbacks being called for every service and characteristic.
FranKP2138 4:722dfc6fe1de 126 *
FranKP2138 4:722dfc6fe1de 127 * @note Providing NULL for the characteristic callback will result in characteristic discovery being skipped for each matching service.
FranKP2138 4:722dfc6fe1de 128 * This allows for an inexpensive method to discover only services.
FranKP2138 4:722dfc6fe1de 129 *
FranKP2138 4:722dfc6fe1de 130 * @return BLE_ERROR_NONE if service discovery is launched successfully; else an appropriate error.
FranKP2138 4:722dfc6fe1de 131 */
FranKP2138 5:68a31613f28a 132 pc.printf("start discovery \r\n");
FranKP2138 6:d37a6e3c17c4 133 if(device_is_hrm) {
FranKP2138 6:d37a6e3c17c4 134 pc.printf("device_is_hrm \r\n");
FranKP2138 6:d37a6e3c17c4 135 ble.gattClient().launchServiceDiscovery(handle, discoveredServiceCallBack, discoveredCharacteristicCallBack, service_uuid, chars_uuid1);}
FranKP2138 6:d37a6e3c17c4 136 if(device_is_simple_peripheral){
FranKP2138 6:d37a6e3c17c4 137 pc.printf("device_is_simple_peripheral \r\n");
FranKP2138 6:d37a6e3c17c4 138 ble.gattClient().launchServiceDiscovery(handle, discoveredServiceCallBack, discoveredCharacteristicCallBack);}
FranKP2138 4:722dfc6fe1de 139 }
FranKP2138 4:722dfc6fe1de 140
FranKP2138 4:722dfc6fe1de 141 /**
FranKP2138 4:722dfc6fe1de 142 * @brief Callback handle for scanning device
FranKP2138 4:722dfc6fe1de 143 *
FranKP2138 4:722dfc6fe1de 144 * @param[in] *params params->peerAddr The peer's BLE address
FranKP2138 4:722dfc6fe1de 145 * params->rssi The advertisement packet RSSI value
FranKP2138 4:722dfc6fe1de 146 * params->isScanResponse Whether this packet is the response to a scan request
FranKP2138 4:722dfc6fe1de 147 * params->type The type of advertisement
FranKP2138 4:722dfc6fe1de 148 * (enum from 0 ADV_CONNECTABLE_UNDIRECTED,ADV_CONNECTABLE_DIRECTED,ADV_SCANNABLE_UNDIRECTED,ADV_NON_CONNECTABLE_UNDIRECTED)
FranKP2138 4:722dfc6fe1de 149 * params->advertisingDataLen Length of the advertisement data
FranKP2138 4:722dfc6fe1de 150 * params->advertisingData Pointer to the advertisement packet's data
FranKP2138 4:722dfc6fe1de 151 */
FranKP2138 4:722dfc6fe1de 152
FranKP2138 4:722dfc6fe1de 153 void scanCallback(const Gap::AdvertisementCallbackParams_t *params) {
mbed_tw_hoehoe 1:2f1203d70643 154 pc.printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n",
mbed_tw_hoehoe 0:83b5c6efd8d7 155 params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],
mbed_tw_hoehoe 0:83b5c6efd8d7 156 params->rssi, params->isScanResponse, params->type);
mbed_tw_hoehoe 0:83b5c6efd8d7 157
mbed_tw_hoehoe 3:d6f80e11a7f4 158 uint8_t len;
mbed_tw_hoehoe 3:d6f80e11a7f4 159 uint8_t adv_name[31];
mbed_tw_hoehoe 3:d6f80e11a7f4 160 if( NRF_SUCCESS == ble_advdata_parser(BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME,
mbed_tw_hoehoe 3:d6f80e11a7f4 161 params->advertisingDataLen,
mbed_tw_hoehoe 3:d6f80e11a7f4 162 (uint8_t *)params->advertisingData, &len, adv_name)){
FranKP2138 6:d37a6e3c17c4 163 pc.printf("NRF_Success \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 164
FranKP2138 4:722dfc6fe1de 165 // Cycle fo rconnect two peripheral
FranKP2138 4:722dfc6fe1de 166 for(uint8_t i=0; i<2; i++){
FranKP2138 6:d37a6e3c17c4 167 pc.printf("Cycle go connect \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 168 if(gs_peripheral[i].connected == false){
FranKP2138 6:d37a6e3c17c4 169 pc.printf("If connect == false -> Connect \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 170 memcpy(gs_peripheral[i].address, params->peerAddr, sizeof(params->peerAddr));
mbed_tw_hoehoe 3:d6f80e11a7f4 171 gs_peripheral[i].deviceName = adv_name;
mbed_tw_hoehoe 3:d6f80e11a7f4 172 ble.connect(params->peerAddr, BLEProtocol::AddressType::RANDOM_STATIC, NULL, NULL);
FranKP2138 6:d37a6e3c17c4 173 // (5) forsatura da eliminare
FranKP2138 6:d37a6e3c17c4 174 device_is_simple_peripheral = 1;
FranKP2138 6:d37a6e3c17c4 175
FranKP2138 6:d37a6e3c17c4 176
FranKP2138 4:722dfc6fe1de 177 // new edit add FP
FranKP2138 5:68a31613f28a 178 // (2) Make set name peripheral with button
FranKP2138 4:722dfc6fe1de 179 if( memcmp("TXRX", adv_name, 4) == 0x00 ) {
FranKP2138 6:d37a6e3c17c4 180 pc.printf("peripheral type simpleControl \r\n");
FranKP2138 4:722dfc6fe1de 181 device_is_simple_peripheral = 1;
FranKP2138 6:d37a6e3c17c4 182 // On Led 4
FranKP2138 4:722dfc6fe1de 183 }
FranKP2138 5:68a31613f28a 184 // (3) make set name peripheral with sensor
FranKP2138 4:722dfc6fe1de 185 if(memcmp("Nordic_HRM", adv_name, 10) == 0x00) {
FranKP2138 6:d37a6e3c17c4 186 pc.printf("peripheral type Nordic_HRM \r\n");
FranKP2138 4:722dfc6fe1de 187 device_is_hrm = 1;
FranKP2138 6:d37a6e3c17c4 188 // On led 5
FranKP2138 4:722dfc6fe1de 189 }
FranKP2138 4:722dfc6fe1de 190 // end
FranKP2138 4:722dfc6fe1de 191
mbed_tw_hoehoe 3:d6f80e11a7f4 192 break;
mbed_tw_hoehoe 3:d6f80e11a7f4 193 }
mbed_tw_hoehoe 3:d6f80e11a7f4 194 }
FranKP2138 6:d37a6e3c17c4 195 pc.printf("Stop Scan \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 196 ble.stopScan();
mbed_tw_hoehoe 3:d6f80e11a7f4 197 }
mbed_tw_hoehoe 0:83b5c6efd8d7 198 }
mbed_tw_hoehoe 0:83b5c6efd8d7 199
FranKP2138 4:722dfc6fe1de 200 /** @brief Connection callback handle
FranKP2138 4:722dfc6fe1de 201 *
FranKP2138 4:722dfc6fe1de 202 * @param[in] *params params->handle : The ID for this connection
FranKP2138 4:722dfc6fe1de 203 * params->role : PERIPHERAL = 0x1, // Peripheral Role
FranKP2138 4:722dfc6fe1de 204 * CENTRAL = 0x2, // Central Role.
FranKP2138 4:722dfc6fe1de 205 * params->peerAddrType : The peer's BLE address type
FranKP2138 4:722dfc6fe1de 206 * params->peerAddr : The peer's BLE address
FranKP2138 4:722dfc6fe1de 207 * params->ownAddrType : This device's BLE address type
FranKP2138 4:722dfc6fe1de 208 * params->ownAddr : This devices's BLE address
FranKP2138 4:722dfc6fe1de 209 * params->connectionParams->minConnectionInterval
FranKP2138 4:722dfc6fe1de 210 * params->connectionParams->maxConnectionInterval
FranKP2138 4:722dfc6fe1de 211 * params->connectionParams->slaveLatency
FranKP2138 4:722dfc6fe1de 212 * params->connectionParams->connectionSupervisionTimeout
FranKP2138 4:722dfc6fe1de 213 */
FranKP2138 4:722dfc6fe1de 214 // Comment 1
FranKP2138 4:722dfc6fe1de 215 void connectionCallBack( const Gap::ConnectionCallbackParams_t *params ) {
FranKP2138 4:722dfc6fe1de 216 /*
FranKP2138 4:722dfc6fe1de 217 uint8_t index;
FranKP2138 4:722dfc6fe1de 218
FranKP2138 4:722dfc6fe1de 219 Serial.print("The conn handle : ");
FranKP2138 4:722dfc6fe1de 220 Serial.println(params->handle, HEX);
FranKP2138 4:722dfc6fe1de 221 Serial.print(" The peerAddr : ");
FranKP2138 4:722dfc6fe1de 222 for(index=0; index<6; index++) {
FranKP2138 4:722dfc6fe1de 223 Serial.print(params->peerAddr[index], HEX);
FranKP2138 4:722dfc6fe1de 224 Serial.print(" ");
FranKP2138 4:722dfc6fe1de 225 }
FranKP2138 4:722dfc6fe1de 226 Serial.println(" ");*/
FranKP2138 4:722dfc6fe1de 227
FranKP2138 4:722dfc6fe1de 228 // start to discovery
FranKP2138 4:722dfc6fe1de 229 // Attention Comment
FranKP2138 4:722dfc6fe1de 230 // this state is set in startDiscovery
FranKP2138 4:722dfc6fe1de 231 /*
FranKP2138 4:722dfc6fe1de 232 pc.printf("GAP_EVT_CONNECTED\r\n");
FranKP2138 4:722dfc6fe1de 233 if (params->role == Gap::CENTRAL) {
FranKP2138 4:722dfc6fe1de 234
FranKP2138 4:722dfc6fe1de 235 for(uint8_t i=0; i<2; i++){
FranKP2138 4:722dfc6fe1de 236 if(gs_peripheral[i].connected == false){
FranKP2138 4:722dfc6fe1de 237 gs_peripheral[i].handle = params->handle;
FranKP2138 4:722dfc6fe1de 238 gs_peripheral[i].connected = true;
FranKP2138 4:722dfc6fe1de 239 break;
FranKP2138 4:722dfc6fe1de 240 }
FranKP2138 4:722dfc6fe1de 241 }
FranKP2138 4:722dfc6fe1de 242 ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, serviceUUID, accelUUID);
FranKP2138 4:722dfc6fe1de 243 //ble.gattClient().launchServiceDiscovery(params->handle, discoveredServiceCallBack, discoveredCharacteristicCallBack, service_uuid(0x180D));
FranKP2138 4:722dfc6fe1de 244
FranKP2138 4:722dfc6fe1de 245 }*/
FranKP2138 4:722dfc6fe1de 246
FranKP2138 4:722dfc6fe1de 247
FranKP2138 4:722dfc6fe1de 248 //Comment 3
FranKP2138 4:722dfc6fe1de 249 // check is set Ok
FranKP2138 5:68a31613f28a 250 pc.printf("connectionCallBack \r\n");
FranKP2138 4:722dfc6fe1de 251 startDiscovery(params->handle);
FranKP2138 4:722dfc6fe1de 252 }
FranKP2138 4:722dfc6fe1de 253
FranKP2138 4:722dfc6fe1de 254 /** @brief Disconnect callback handle
FranKP2138 4:722dfc6fe1de 255 *
FranKP2138 4:722dfc6fe1de 256 * @param[in] *params params->handle : connect handle
FranKP2138 4:722dfc6fe1de 257 * params->reason : CONNECTION_TIMEOUT = 0x08,
FranKP2138 4:722dfc6fe1de 258 * REMOTE_USER_TERMINATED_CONNECTION = 0x13,
FranKP2138 4:722dfc6fe1de 259 * REMOTE_DEV_TERMINATION_DUE_TO_LOW_RESOURCES = 0x14, // Remote device terminated connection due to low resources.
FranKP2138 4:722dfc6fe1de 260 * REMOTE_DEV_TERMINATION_DUE_TO_POWER_OFF = 0x15, // Remote device terminated connection due to power off.
FranKP2138 4:722dfc6fe1de 261 * LOCAL_HOST_TERMINATED_CONNECTION = 0x16,
FranKP2138 4:722dfc6fe1de 262 * CONN_INTERVAL_UNACCEPTABLE = 0x3B,
FranKP2138 4:722dfc6fe1de 263 */
FranKP2138 4:722dfc6fe1de 264 // Comment 2
FranKP2138 4:722dfc6fe1de 265
FranKP2138 4:722dfc6fe1de 266 void disconnectionCallBack(const Gap::DisconnectionCallbackParams_t *params) {
FranKP2138 4:722dfc6fe1de 267 // Serial.println("Disconnected, start to scanning");
FranKP2138 5:68a31613f28a 268 pc.printf("Disconnected, start to scanning \r\n");
FranKP2138 5:68a31613f28a 269
FranKP2138 4:722dfc6fe1de 270 // New edit FP
FranKP2138 4:722dfc6fe1de 271 device_is_simple_peripheral = 0;
FranKP2138 4:722dfc6fe1de 272 device_is_hrm = 0;
FranKP2138 4:722dfc6fe1de 273 characteristic_is_fond = 0;
FranKP2138 4:722dfc6fe1de 274 descriptor_is_found = 0;
FranKP2138 4:722dfc6fe1de 275 ble.startScan(scanCallback); // scanCallback
FranKP2138 4:722dfc6fe1de 276 // end
FranKP2138 4:722dfc6fe1de 277
FranKP2138 4:722dfc6fe1de 278 pc.printf("disconnected\r\n");
FranKP2138 4:722dfc6fe1de 279
FranKP2138 5:68a31613f28a 280 for(uint8_t i=0; i<2; i++){
FranKP2138 4:722dfc6fe1de 281 if(gs_peripheral[i].handle == params->handle){
FranKP2138 4:722dfc6fe1de 282 gs_peripheral[i].connected = false;
FranKP2138 4:722dfc6fe1de 283 gs_peripheral[i].handle = 0xFFFF;
FranKP2138 4:722dfc6fe1de 284 }
FranKP2138 4:722dfc6fe1de 285 }
FranKP2138 4:722dfc6fe1de 286 wait(8.0);
FranKP2138 4:722dfc6fe1de 287 ble.gap().startScan(scanCallback);
FranKP2138 4:722dfc6fe1de 288 }
FranKP2138 4:722dfc6fe1de 289
FranKP2138 4:722dfc6fe1de 290 /** @brief Discovered service callback handle
FranKP2138 4:722dfc6fe1de 291 *
FranKP2138 4:722dfc6fe1de 292 * @param[in] *service service->getUUID() The UUID of service
FranKP2138 4:722dfc6fe1de 293 * service->getStartHandle()
FranKP2138 4:722dfc6fe1de 294 * service->getEndHandle()
FranKP2138 4:722dfc6fe1de 295 */
FranKP2138 4:722dfc6fe1de 296
FranKP2138 4:722dfc6fe1de 297 static void discoveredServiceCallBack(const DiscoveredService *service) {
mbed_tw_hoehoe 1:2f1203d70643 298 pc.printf("service found...\r\n");
mbed_tw_hoehoe 0:83b5c6efd8d7 299 }
mbed_tw_hoehoe 0:83b5c6efd8d7 300
FranKP2138 4:722dfc6fe1de 301 /** @brief Discovered characteristics callback handle
FranKP2138 4:722dfc6fe1de 302 *
FranKP2138 4:722dfc6fe1de 303 * @param[in] *chars chars->getUUID() The UUID of service
FranKP2138 4:722dfc6fe1de 304 * chars->getProperties() broadcast() : Check if broadcasting is permitted. True is permited.
FranKP2138 4:722dfc6fe1de 305 * read() : Check reading is permitted.
FranKP2138 4:722dfc6fe1de 306 * writeWoResp() : Check if writing with Write Command is permitted
FranKP2138 4:722dfc6fe1de 307 * write() : Check if writing with Write Request is permitted.
FranKP2138 4:722dfc6fe1de 308 * notify() : Check notifications are permitted.
FranKP2138 4:722dfc6fe1de 309 * indicate() : Check if indications are permitted.
FranKP2138 4:722dfc6fe1de 310 * authSignedWrite() : Check if writing with Signed Write Command is permitted.
FranKP2138 4:722dfc6fe1de 311 * chars->getDeclHandle() characteristic's declaration attribute handle
FranKP2138 4:722dfc6fe1de 312 * chars->getValueHandle() characteristic's value attribute handle
FranKP2138 4:722dfc6fe1de 313 * chars->getLastHandle() characteristic's last attribute handle
FranKP2138 4:722dfc6fe1de 314 */
FranKP2138 4:722dfc6fe1de 315 static void discoveredCharacteristicCallBack(const DiscoveredCharacteristic *characteristicP) {
mbed_tw_hoehoe 1:2f1203d70643 316 pc.printf("characteristicDiscoveryCallback\r\n");
mbed_tw_hoehoe 2:4b53d13d9851 317
FranKP2138 4:722dfc6fe1de 318 //accelChar = *characteristicP;
FranKP2138 5:68a31613f28a 319 // (4) change serial.print -> println how make ?
FranKP2138 4:722dfc6fe1de 320 // New edit FP
FranKP2138 4:722dfc6fe1de 321 if(characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
FranKP2138 6:d37a6e3c17c4 322 pc.printf("characteristicDiscoveryCallback -1- \r\n");
FranKP2138 4:722dfc6fe1de 323 //Serial.println(chars->getUUID().getShortUUID(), HEX);
FranKP2138 4:722dfc6fe1de 324 if(characteristicP->getUUID().getShortUUID() == 0x2A37) {
FranKP2138 6:d37a6e3c17c4 325 pc.printf("characteristicDiscoveryCallback -2- \r\n");
FranKP2138 4:722dfc6fe1de 326 //Serial.println("Found HRM characteristic ");
FranKP2138 4:722dfc6fe1de 327 characteristic_is_fond = 1;
FranKP2138 4:722dfc6fe1de 328 chars_hrm = *characteristicP;
FranKP2138 4:722dfc6fe1de 329 }
FranKP2138 4:722dfc6fe1de 330 } else {
FranKP2138 6:d37a6e3c17c4 331 pc.printf("characteristicDiscoveryCallback -3- \r\n");
FranKP2138 4:722dfc6fe1de 332 uint8_t index;
FranKP2138 4:722dfc6fe1de 333 const uint8_t *uuid = characteristicP->getUUID().getBaseUUID();
FranKP2138 4:722dfc6fe1de 334 for(index=0; index<16; index++) {
FranKP2138 6:d37a6e3c17c4 335 pc.printf("characteristicDiscoveryCallback -4- \r\n");
FranKP2138 4:722dfc6fe1de 336 // Serial.print(uuid[index], HEX);
FranKP2138 4:722dfc6fe1de 337 //Serial.print(" ");
FranKP2138 4:722dfc6fe1de 338 }
FranKP2138 4:722dfc6fe1de 339 //Serial.println(" ");
FranKP2138 4:722dfc6fe1de 340 }
FranKP2138 4:722dfc6fe1de 341 // end
FranKP2138 4:722dfc6fe1de 342
FranKP2138 4:722dfc6fe1de 343
FranKP2138 4:722dfc6fe1de 344 for(uint8_t i=0; i<2; i++){
FranKP2138 6:d37a6e3c17c4 345 pc.printf("characteristicDiscoveryCallback -5- \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 346 if(gs_peripheral[i].connected){
FranKP2138 6:d37a6e3c17c4 347 pc.printf("characteristicDiscoveryCallback -6- \r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 348 ble.gattClient().read(characteristicP->getConnectionHandle(), characteristicP->getValueHandle(), 0);
mbed_tw_hoehoe 2:4b53d13d9851 349 }
mbed_tw_hoehoe 2:4b53d13d9851 350 }
mbed_tw_hoehoe 2:4b53d13d9851 351
mbed_tw_hoehoe 0:83b5c6efd8d7 352 }
mbed_tw_hoehoe 0:83b5c6efd8d7 353
FranKP2138 4:722dfc6fe1de 354
FranKP2138 4:722dfc6fe1de 355 // Coomet 4
FranKP2138 4:722dfc6fe1de 356 static void discoveryTerminationCallBack(Gap::Handle_t connectionHandle) {
FranKP2138 4:722dfc6fe1de 357 pc.printf("terminated SD for handle %u\r\n", connectionHandle);
FranKP2138 4:722dfc6fe1de 358
FranKP2138 4:722dfc6fe1de 359 // New edit FP
FranKP2138 4:722dfc6fe1de 360 if(characteristic_is_fond == 1) {
FranKP2138 4:722dfc6fe1de 361 ble.gattClient().discoverCharacteristicDescriptors(chars_hrm, discoveredCharsDescriptorCallBack, discoveredDescTerminationCallBack);
FranKP2138 4:722dfc6fe1de 362 }
FranKP2138 4:722dfc6fe1de 363 // end
FranKP2138 4:722dfc6fe1de 364 }
FranKP2138 4:722dfc6fe1de 365
mbed_tw_hoehoe 3:d6f80e11a7f4 366
FranKP2138 4:722dfc6fe1de 367 /** @brief Discovered descriptor of characteristic callback handle
FranKP2138 4:722dfc6fe1de 368 *
FranKP2138 4:722dfc6fe1de 369 * @param[in] *params params->characteristic DiscoveredCharacteristic
FranKP2138 4:722dfc6fe1de 370 * params->descriptor descriptor.getUUID() : The uuid of descriptor atrribute
FranKP2138 4:722dfc6fe1de 371 * descriptor.getConnectionHandle()
FranKP2138 4:722dfc6fe1de 372 * descriptor.getAttributeHandle() : Arrtibute handle
FranKP2138 4:722dfc6fe1de 373 */
FranKP2138 4:722dfc6fe1de 374 static void discoveredCharsDescriptorCallBack(const CharacteristicDescriptorDiscovery::DiscoveryCallbackParams_t *params) {
FranKP2138 4:722dfc6fe1de 375 //Serial.println("\r\n----discovered descriptor");
FranKP2138 4:722dfc6fe1de 376 //Serial.print("Desriptor UUID : ");
FranKP2138 4:722dfc6fe1de 377 //Serial.println(params->descriptor.getUUID().getShortUUID(), HEX);
FranKP2138 4:722dfc6fe1de 378 if(params->descriptor.getUUID().getShortUUID() == 0x2902) {
FranKP2138 4:722dfc6fe1de 379 // Save characteristic info
FranKP2138 4:722dfc6fe1de 380 descriptor_is_found = 1;
FranKP2138 4:722dfc6fe1de 381 desc_of_chars_hrm = params->descriptor;
FranKP2138 4:722dfc6fe1de 382 }
FranKP2138 4:722dfc6fe1de 383 //Serial.print("connectionHandle : ");
FranKP2138 4:722dfc6fe1de 384 //Serial.println(params->descriptor.getConnectionHandle(), HEX);
FranKP2138 4:722dfc6fe1de 385 //Serial.print("descriptor Handle : ");
FranKP2138 4:722dfc6fe1de 386 //Serial.println(params->descriptor.getAttributeHandle(), HEX);
FranKP2138 4:722dfc6fe1de 387 }
FranKP2138 4:722dfc6fe1de 388
FranKP2138 4:722dfc6fe1de 389 /** @brief Discovered descriptor of characteristic termination callback handle
FranKP2138 4:722dfc6fe1de 390 *
FranKP2138 4:722dfc6fe1de 391 * @param[in] *params params->characteristic DiscoveredCharacteristic
FranKP2138 4:722dfc6fe1de 392 * params->status Status of the discovery operation
FranKP2138 4:722dfc6fe1de 393 */
FranKP2138 4:722dfc6fe1de 394 static void discoveredDescTerminationCallBack(const CharacteristicDescriptorDiscovery::TerminationCallbackParams_t *params) {
FranKP2138 4:722dfc6fe1de 395 // Serial.println("\r\n----discovery descriptor Termination");
FranKP2138 4:722dfc6fe1de 396 if(descriptor_is_found) {
FranKP2138 4:722dfc6fe1de 397 // Serial.println("Open HRM notify");
FranKP2138 4:722dfc6fe1de 398 uint16_t value = 0x0001;
FranKP2138 4:722dfc6fe1de 399 ble.gattClient().write(GattClient::GATT_OP_WRITE_REQ, chars_hrm.getConnectionHandle(), desc_of_chars_hrm.getAttributeHandle(), 2, (uint8_t *)&value);
FranKP2138 4:722dfc6fe1de 400 }
mbed_tw_hoehoe 0:83b5c6efd8d7 401 }
mbed_tw_hoehoe 0:83b5c6efd8d7 402
FranKP2138 4:722dfc6fe1de 403 /** @brief write callback handle
FranKP2138 4:722dfc6fe1de 404 *
FranKP2138 4:722dfc6fe1de 405 * @param[in] *params params->connHandle : The handle of the connection that triggered the event
FranKP2138 4:722dfc6fe1de 406 * params->handle : Attribute Handle to which the write operation applies
FranKP2138 4:722dfc6fe1de 407 * params->writeOp : OP_INVALID = 0x00, // Invalid operation.
FranKP2138 4:722dfc6fe1de 408 * OP_WRITE_REQ = 0x01, // Write request.
FranKP2138 4:722dfc6fe1de 409 * OP_WRITE_CMD = 0x02, // Write command.
FranKP2138 4:722dfc6fe1de 410 * OP_SIGN_WRITE_CMD = 0x03, // Signed write command.
FranKP2138 4:722dfc6fe1de 411 * OP_PREP_WRITE_REQ = 0x04, // Prepare write request.
FranKP2138 4:722dfc6fe1de 412 * OP_EXEC_WRITE_REQ_CANCEL = 0x05, // Execute write request: cancel all prepared writes.
FranKP2138 4:722dfc6fe1de 413 * OP_EXEC_WRITE_REQ_NOW = 0x06, // Execute write request: immediately execute all prepared writes.
FranKP2138 4:722dfc6fe1de 414 * params->offset : Offset for the write operation
FranKP2138 4:722dfc6fe1de 415 * params->len : Length (in bytes) of the data to write
FranKP2138 4:722dfc6fe1de 416 * params->data : Pointer to the data to write
FranKP2138 4:722dfc6fe1de 417 */
FranKP2138 4:722dfc6fe1de 418 // Attention
FranKP2138 4:722dfc6fe1de 419 void onDataWriteCallBack(const GattWriteCallbackParams *params) {
FranKP2138 4:722dfc6fe1de 420 //Serial.println("GattClient write call back ");
FranKP2138 4:722dfc6fe1de 421 }
FranKP2138 4:722dfc6fe1de 422
FranKP2138 4:722dfc6fe1de 423 /** @brief read callback handle
FranKP2138 4:722dfc6fe1de 424 *
FranKP2138 4:722dfc6fe1de 425 * @param[in] *params params->connHandle : The handle of the connection that triggered the event
FranKP2138 4:722dfc6fe1de 426 * params->handle : Attribute Handle to which the write operation applies
FranKP2138 4:722dfc6fe1de 427 * params->offset : Offset for the write operation
FranKP2138 4:722dfc6fe1de 428 * params->len : Length (in bytes) of the data to write
FranKP2138 4:722dfc6fe1de 429 * params->data : Pointer to the data to write
FranKP2138 4:722dfc6fe1de 430 */
FranKP2138 4:722dfc6fe1de 431
FranKP2138 4:722dfc6fe1de 432 // Attention
FranKP2138 4:722dfc6fe1de 433 void onDataReadCallBack(const GattReadCallbackParams *params) {
FranKP2138 4:722dfc6fe1de 434 // delete comment
FranKP2138 4:722dfc6fe1de 435 /* Serial.println("GattClient read call back ");
FranKP2138 4:722dfc6fe1de 436 Serial.print("The handle : ");
FranKP2138 4:722dfc6fe1de 437 Serial.println(params->handle, HEX);
FranKP2138 4:722dfc6fe1de 438 Serial.print("The offset : ");
FranKP2138 4:722dfc6fe1de 439 Serial.println(params->offset, DEC);
FranKP2138 4:722dfc6fe1de 440 Serial.print("The len : ");
FranKP2138 4:722dfc6fe1de 441 Serial.println(params->len, DEC);
FranKP2138 5:68a31613f28a 442 Serial.print("The data : ");*/
FranKP2138 5:68a31613f28a 443
FranKP2138 5:68a31613f28a 444 pc.printf("triggerRead.....\r\n");
FranKP2138 5:68a31613f28a 445 pc.printf("len: %d\r\n", params->len);
FranKP2138 5:68a31613f28a 446 const uint8_t *data = params->data;
FranKP2138 5:68a31613f28a 447 pc.printf("data ");
FranKP2138 5:68a31613f28a 448
FranKP2138 4:722dfc6fe1de 449 for(uint8_t index=0; index<params->len; index++) {
FranKP2138 5:68a31613f28a 450 //Serial.print( params->data[index], HEX);
FranKP2138 5:68a31613f28a 451 pc.printf("%f ", (float)data[index]);
FranKP2138 4:722dfc6fe1de 452 }
FranKP2138 5:68a31613f28a 453 pc.printf("\r\n");
FranKP2138 5:68a31613f28a 454 //Serial.println("");
FranKP2138 4:722dfc6fe1de 455 }
FranKP2138 4:722dfc6fe1de 456
FranKP2138 4:722dfc6fe1de 457 /** @brief hvx callback handle
FranKP2138 4:722dfc6fe1de 458 *
FranKP2138 4:722dfc6fe1de 459 * @param[in] *params params->connHandle : The handle of the connection that triggered the event
FranKP2138 4:722dfc6fe1de 460 * params->handle : Attribute Handle to which the write operation applies
FranKP2138 4:722dfc6fe1de 461 * params->type : BLE_HVX_NOTIFICATION = 0x01
FranKP2138 4:722dfc6fe1de 462 * BLE_HVX_INDICATION = 0x02
FranKP2138 4:722dfc6fe1de 463 * params->len : Length (in bytes) of the data to write
FranKP2138 4:722dfc6fe1de 464 * params->data : Pointer to the data to write
FranKP2138 4:722dfc6fe1de 465 */
FranKP2138 4:722dfc6fe1de 466 // Attention
FranKP2138 4:722dfc6fe1de 467 void hvxCallBack(const GattHVXCallbackParams *params) {
FranKP2138 4:722dfc6fe1de 468 // delete Cooment
FranKP2138 4:722dfc6fe1de 469 /* Serial.println("GattClient notify call back ");
FranKP2138 4:722dfc6fe1de 470 Serial.print("The len : ");
FranKP2138 5:68a31613f28a 471 Serial.println(params->len, DEC);*/
FranKP2138 4:722dfc6fe1de 472 for(unsigned char index=0; index<params->len; index++) {
FranKP2138 5:68a31613f28a 473 //Serial.print(params->data[index], HEX);
FranKP2138 5:68a31613f28a 474 pc.printf("%f ", (float)params->data[index]);
FranKP2138 4:722dfc6fe1de 475 }
FranKP2138 5:68a31613f28a 476 // Serial.println("");
mbed_tw_hoehoe 0:83b5c6efd8d7 477 }
mbed_tw_hoehoe 0:83b5c6efd8d7 478
FranKP2138 5:68a31613f28a 479 // Option
FranKP2138 5:68a31613f28a 480 /*void triggerRead(const GattReadCallbackParams *response) {
mbed_tw_hoehoe 3:d6f80e11a7f4 481 pc.printf("triggerRead.....\r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 482
mbed_tw_hoehoe 3:d6f80e11a7f4 483 pc.printf("len: %d\r\n", response->len);
mbed_tw_hoehoe 3:d6f80e11a7f4 484 const uint8_t *data = response->data;
mbed_tw_hoehoe 3:d6f80e11a7f4 485 pc.printf("data ");
mbed_tw_hoehoe 0:83b5c6efd8d7 486 for(int i=0; i < response->len; i++){
mbed_tw_hoehoe 3:d6f80e11a7f4 487 pc.printf("%f ", (float)data[i]);
mbed_tw_hoehoe 0:83b5c6efd8d7 488 }
mbed_tw_hoehoe 1:2f1203d70643 489 pc.printf("\r\n");
FranKP2138 4:722dfc6fe1de 490 // Comment property
FranKP2138 4:722dfc6fe1de 491 //accelChar.read();
FranKP2138 5:68a31613f28a 492 }*/
mbed_tw_hoehoe 0:83b5c6efd8d7 493
FranKP2138 4:722dfc6fe1de 494 // is set before
FranKP2138 4:722dfc6fe1de 495 /*void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
mbed_tw_hoehoe 1:2f1203d70643 496 pc.printf("disconnected\r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 497
mbed_tw_hoehoe 3:d6f80e11a7f4 498 for(uint8_t i=0; i<3; i++){
mbed_tw_hoehoe 3:d6f80e11a7f4 499 if(gs_peripheral[i].handle == params->handle){
mbed_tw_hoehoe 3:d6f80e11a7f4 500 gs_peripheral[i].connected = false;
mbed_tw_hoehoe 3:d6f80e11a7f4 501 gs_peripheral[i].handle = 0xFFFF;
mbed_tw_hoehoe 3:d6f80e11a7f4 502 }
mbed_tw_hoehoe 3:d6f80e11a7f4 503 }
mbed_tw_hoehoe 2:4b53d13d9851 504 wait(8.0);
mbed_tw_hoehoe 2:4b53d13d9851 505 ble.gap().startScan(scanCallback);
FranKP2138 4:722dfc6fe1de 506 }*/
mbed_tw_hoehoe 2:4b53d13d9851 507
mbed_tw_hoehoe 0:83b5c6efd8d7 508 int main(void) {
mbed_tw_hoehoe 1:2f1203d70643 509 pc.baud(9600);
mbed_tw_hoehoe 0:83b5c6efd8d7 510 wait(8.0);
mbed_tw_hoehoe 1:2f1203d70643 511 pc.printf("start\r\n");
FranKP2138 5:68a31613f28a 512 pc.printf("Avvio start\r\n");
FranKP2138 5:68a31613f28a 513
mbed_tw_hoehoe 0:83b5c6efd8d7 514
mbed_tw_hoehoe 0:83b5c6efd8d7 515 ble.init();
mbed_tw_hoehoe 3:d6f80e11a7f4 516
FranKP2138 4:722dfc6fe1de 517 ble.onConnection(connectionCallBack);
FranKP2138 4:722dfc6fe1de 518 ble.onDisconnection(disconnectionCallBack);
FranKP2138 4:722dfc6fe1de 519
FranKP2138 4:722dfc6fe1de 520 // New edit FP
FranKP2138 4:722dfc6fe1de 521 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallBack);
FranKP2138 4:722dfc6fe1de 522 ble.gattClient().onHVX(hvxCallBack);
FranKP2138 4:722dfc6fe1de 523 ble.gattClient().onDataWrite(onDataWriteCallBack);
FranKP2138 4:722dfc6fe1de 524 ble.gattClient().onDataRead(onDataReadCallBack);
FranKP2138 4:722dfc6fe1de 525 // scan interval : in milliseconds, valid values lie between 2.5ms and 10.24s
FranKP2138 4:722dfc6fe1de 526 // scan window :in milliseconds, valid values lie between 2.5ms and 10.24s
FranKP2138 4:722dfc6fe1de 527 // timeout : in seconds, between 0x0001 and 0xFFFF, 0x0000 disables timeout
FranKP2138 4:722dfc6fe1de 528 // activeScanning : true or false
FranKP2138 4:722dfc6fe1de 529 // end
FranKP2138 4:722dfc6fe1de 530
FranKP2138 4:722dfc6fe1de 531
FranKP2138 4:722dfc6fe1de 532 // Original
FranKP2138 4:722dfc6fe1de 533 //ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
FranKP2138 4:722dfc6fe1de 534 //ble.gattClient().onDataRead(triggerRead);
mbed_tw_hoehoe 0:83b5c6efd8d7 535 //ble.gattClient().onDataWrite(triggerToggledWrite);
mbed_tw_hoehoe 0:83b5c6efd8d7 536
mbed_tw_hoehoe 0:83b5c6efd8d7 537 ble.gap().setScanParams(500, 400);
mbed_tw_hoehoe 0:83b5c6efd8d7 538 ble.gap().startScan(scanCallback);
FranKP2138 4:722dfc6fe1de 539
FranKP2138 4:722dfc6fe1de 540 // Or
FranKP2138 4:722dfc6fe1de 541 /*
FranKP2138 4:722dfc6fe1de 542 ble.setScanParams(1000, 200, 0, false);
FranKP2138 4:722dfc6fe1de 543 // start scanning
FranKP2138 4:722dfc6fe1de 544 ble.startScan(scanCallBack);
FranKP2138 4:722dfc6fe1de 545 */
mbed_tw_hoehoe 0:83b5c6efd8d7 546
mbed_tw_hoehoe 0:83b5c6efd8d7 547 while (true) {
FranKP2138 5:68a31613f28a 548 pc.printf("while true\r\n");
mbed_tw_hoehoe 3:d6f80e11a7f4 549 ble.waitForEvent();
mbed_tw_hoehoe 0:83b5c6efd8d7 550 }
FranKP2138 4:722dfc6fe1de 551 }
FranKP2138 4:722dfc6fe1de 552
FranKP2138 4:722dfc6fe1de 553 // Altenativa
FranKP2138 5:68a31613f28a 554 /*void loop() {
FranKP2138 4:722dfc6fe1de 555 // put your main code here, to run repeatedly:
FranKP2138 4:722dfc6fe1de 556 ble.waitForEvent();
FranKP2138 5:68a31613f28a 557 }*/