EddystoneService::EddystoneError_t EddystoneService::startConfigService(void) { if (operationMode == EDDYSTONE_MODE_CONFIG) { /* Nothing to do, we are already in config mode */ return EDDYSTONE_ERROR_NONE; } else if (advConfigInterval == 0) { /* Nothing to do, the advertisement interval is 0 */ return EDDYSTONE_ERROR_INVALID_ADVERTISING_INTERVAL; } if (operationMode == EDDYSTONE_MODE_BEACON) { ble.shutdown(); stopBeaconService(); } if (!ble.hasInitialized()) { operationMode = EDDYSTONE_MODE_CONFIG; ble.init(this, &EddystoneService::bleInitComplete); /* Set the device name once more */ ble.gap().setDeviceName(reinterpret_cast<const uint8_t *>(deviceName)); return EDDYSTONE_ERROR_NONE; } operationMode = EDDYSTONE_MODE_CONFIG; setupConfigService(); return EDDYSTONE_ERROR_NONE; }
/* When changing modes, we shutdown and init the BLE instance, so * this is needed to complete the initialisation task. */ void EddystoneService::bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext) { if (initContext->error != BLE_ERROR_NONE) { /* Initialisation failed */ return; } switch (operationMode) { case EDDYSTONE_MODE_CONFIG: setupConfigService(); break; case EDDYSTONE_MODE_BEACON: setupBeaconService(); break; default: /* Some error occurred */ error("Invalid EddystonService mode"); break; } }
EddystoneService::EddystoneError_t EddystoneService::startConfigService(void) { if (operationMode == EDDYSTONE_MODE_CONFIG) { /* Nothing to do, we are already in config mode */ return EDDYSTONE_ERROR_NONE; } else if (advConfigInterval == 0) { /* Nothing to do, the advertisement interval is 0 */ return EDDYSTONE_ERROR_INVALID_ADVERTISING_INTERVAL; } if (operationMode == EDDYSTONE_MODE_BEACON) { ble.shutdown(); stopBeaconService(); operationMode = EDDYSTONE_MODE_CONFIG; ble.init(this, &EddystoneService::bleInitComplete); return EDDYSTONE_ERROR_NONE; } operationMode = EDDYSTONE_MODE_CONFIG; setupConfigService(); return EDDYSTONE_ERROR_NONE; }