static void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext) { BLE &ble = initContext->ble; ble_error_t error = initContext->error; if (error != BLE_ERROR_NONE) { onBleInitError(initContext); return; } ble.gap().onDisconnection(disconnectionCallback); #ifdef TARGET_NRF51822 EddystoneService::EddystoneParams_t params; if (loadEddystoneServiceConfigParams(¶ms)) { eddyServicePtr = new EddystoneService(ble, params, radioPowerLevels, advConfigInterval); } else { initializeEddystoneToDefaults(ble); } #else #warning "EddystoneService is not configured to store configuration data in non-volatile memory" initializeEddystoneToDefaults(ble); #endif /* * Set the custom device name. The device name is not stored in persistent * storage, so we need to set it manually every time the device is reset */ eddyServicePtr->setCompleteDeviceName(deviceName); /* Start Eddystone in config mode */ eddyServicePtr->startConfigService(); minar::Scheduler::postCallback(timeout).delay(minar::milliseconds(CONFIG_ADVERTISEMENT_TIMEOUT_SECONDS * 1000)); }
/** * 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 bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { onBleInitError(ble, error); return; } if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } ble.gap().onDisconnection(disconnectionCallback); /* Setup primary service. */ hrServicePtr = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER); /* Setup advertising. */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.gap().setAdvertisingInterval(1000); /* 1000ms */ ble.gap().startAdvertising(); }
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; } ble.gap().onDisconnection(disconnectionCallback); ble.gap().onConnection(connectionCallback); ble.gattClient().onDataRead(triggerToggledWrite); ble.gattClient().onDataWrite(triggerRead); // scan interval: 400ms and scan window: 400ms. // Every 400ms the device will scan for 400ms // This means that the device will scan continuously. ble.gap().setScanParams(400, 400); ble.gap().startScan(advertisementCallback); }
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; } dfuPtr = new DFUService(ble); /* setup advertising */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.gap().setAdvertisingInterval(200); ble.gap().startAdvertising(); }
static void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext) { BLE &ble = initContext->ble; ble_error_t error = initContext->error; if (error != BLE_ERROR_NONE) { onBleInitError(initContext); return; } ble.gap().onDisconnection(disconnectionCallback); #ifdef TARGET_NRF51822 EddystoneService::EddystoneParams_t params; if (loadEddystoneServiceConfigParams(¶ms)) { eddyServicePtr = new EddystoneService(ble, params, defaultAdvPowerLevels, radioPowerLevels, advConfigInterval); } else { initializeEddystoneToDefaults(ble); } #else initializeEddystoneToDefaults(ble); #endif /* Start Eddystone in config mode */ eddyServicePtr->startConfigService(); minar::Scheduler::postCallback(timeout).delay(minar::milliseconds(CONFIG_ADVERTISEMENT_TIMEOUT_SECONDS * 1000)); }
void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { onBleInitError(ble, error); return; } if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } ble.gap().setScanParams(1800 /* scan interval */, 1500 /* scan window */); ble.gap().startScan(advertisementCallback); }
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; } ble.gap().setScanParams(500, 450, 0, true); }
/** * 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; } ble.gap().onDisconnection(disconnectionCallback); ble.gattServer().onDataWritten(onDataWrittenCallback); // Set up Eddystone auto eddyServicePtr = new EddystoneService(ble, defaultAdvPowerLevels, radioPowerLevels, 0); eddyServicePtr->setURLData(defaultUrl); // The name of the beacon and the service list eddyServicePtr->setNormalFrameData(beaconName, strlen(beaconName), uuid16_list, sizeof(uuid16_list)); // Every 500 ms. Eddystone URL, then Normal frame eddyServicePtr->setUIDFrameAdvertisingInterval(0); eddyServicePtr->setTLMFrameAdvertisingInterval(0); eddyServicePtr->setURLFrameAdvertisingInterval(500); eddyServicePtr->setNormalFrameAdvertisingInterval(500); eddyServicePtr->startBeaconService(); bool initialValueForLEDCharacteristic = false; ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic); }