/** * Callback triggered when the ble initialization process has finished */ void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { // in case of error, forward the error handling to onBleInitError onBleInitError(ble, error); return; } // ensure that it is the default instance of BLE if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } /** * The Beacon payload has the following composition: * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 * Major/Minor = 0x1122 / 0x3344 * Tx Power = 0xC8 = 200, 2's compliment is 256-200 = (-56dB) * * Note: please remember to calibrate your beacons TX Power for more accurate results. */ const uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61}; uint16_t majorNumber = 1122; uint16_t minorNumber = 3344; uint16_t txPower = 0xC8; iBeacon ibeacon(ble, uuid, majorNumber, minorNumber, txPower); ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ ble.gap().startAdvertising(); }
void start_advertising() { /* Create advertising parameters and payload */ ble::AdvertisingParameters adv_parameters( ble::advertising_type_t::CONNECTABLE_UNDIRECTED, ble::adv_interval_t(ble::millisecond_t(1000)) ); _adv_data_builder.setFlags(); /** * The Beacon payload has the following composition: * 128-Bit / 16byte UUID = E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 * Major/Minor = 0x1122 / 0x3344 * Tx Power = 0xC8 = 200, 2's compliment is 256-200 = (-56dB) * * Note: please remember to calibrate your beacons TX Power for more accurate results. */ static const uint8_t uuid[] = { 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61 }; uint16_t major_number = 1122; uint16_t minor_number = 3344; uint16_t tx_power = 0xC8; uint16_t comp_id = 0x004C; Payload ibeacon(uuid, major_number, minor_number, tx_power, comp_id); _adv_data_builder.setManufacturerSpecificData(ibeacon.raw); /* Setup advertising */ ble_error_t error = _ble.gap().setAdvertisingParameters( ble::LEGACY_ADVERTISING_HANDLE, adv_parameters ); if (error) { print_error(error, "_ble.gap().setAdvertisingParameters() failed"); return; } error = _ble.gap().setAdvertisingPayload( ble::LEGACY_ADVERTISING_HANDLE, _adv_data_builder.getAdvertisingData() ); if (error) { print_error(error, "_ble.gap().setAdvertisingPayload() failed"); return; } /* Start advertising */ error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE); if (error) { print_error(error, "_ble.gap().startAdvertising() failed"); return; } }
/** * Test for advertising using an iBeacon */ void setupIBeaconTest(void) { /* setup the iBeacon */ const static uint8_t uuid[] = {0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61}; uint16_t majorNumber = 1122; uint16_t minorNumber = 3344; uint16_t txPower = 0xC8; iBeacon ibeacon(ble, uuid, majorNumber, minorNumber, txPower); uint16_t interval_value = 1000; ble.gap().setAdvertisingInterval(interval_value); /* 1000ms. */ CHECK_EQUALS(ble.gap().getAdvertisingParams().getInterval(), interval_value); ble.gap().setAdvertisingTimeout(0); CHECK_EQUALS(ble.gap().getAdvertisingParams().getTimeout(), 0); ASSERT_NO_FAILURE(ble.gap().startAdvertising()); printf("ASSERTIONS DONE\r\n"); }