project for eddystone

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_URIBeacon by Bluetooth Low Energy

Committer:
rgrover1
Date:
Mon Mar 09 16:35:03 2015 +0000
Revision:
16:1daa78939a3b
Parent:
14:868a1207022d
Child:
17:e2c0a1696e39
updating the URIBeacon demo to the latest API for URIBeaconConfigService.; ; Hopefully the app has been simplified now.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 14:868a1207022d 1 /* mbed Microcontroller Library
rgrover1 14:868a1207022d 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 0:790a27ffc99b 3 *
rgrover1 0:790a27ffc99b 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:790a27ffc99b 5 * you may not use this file except in compliance with the License.
rgrover1 0:790a27ffc99b 6 * You may obtain a copy of the License at
rgrover1 0:790a27ffc99b 7 *
rgrover1 13:b82d8db73633 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:790a27ffc99b 9 *
rgrover1 0:790a27ffc99b 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:790a27ffc99b 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:790a27ffc99b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:790a27ffc99b 13 * See the License for the specific language governing permissions and
rgrover1 0:790a27ffc99b 14 * limitations under the License.
rgrover1 0:790a27ffc99b 15 */
rgrover1 0:790a27ffc99b 16
rgrover1 0:790a27ffc99b 17 #include "mbed.h"
rgrover1 0:790a27ffc99b 18 #include "BLEDevice.h"
rgrover1 13:b82d8db73633 19 #include "URIBeaconConfigService.h"
rgrover1 11:c77cc2b74101 20 #include "DFUService.h"
rgrover1 11:c77cc2b74101 21 #include "DeviceInformationService.h"
rgrover1 16:1daa78939a3b 22 #include "ConfigParamsPersistence.h"
rgrover1 13:b82d8db73633 23
rgrover1 0:790a27ffc99b 24 BLEDevice ble;
rgrover1 13:b82d8db73633 25 URIBeaconConfigService *uriBeaconConfig;
rgrover1 13:b82d8db73633 26
rgrover1 16:1daa78939a3b 27 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
rgrover1 16:1daa78939a3b 28 {
rgrover1 6:31b65d4ea67d 29 ble.startAdvertising();
rgrover1 6:31b65d4ea67d 30 }
rgrover1 0:790a27ffc99b 31
rgrover1 0:790a27ffc99b 32 int main(void)
rgrover1 0:790a27ffc99b 33 {
rgrover1 0:790a27ffc99b 34 ble.init();
rgrover1 6:31b65d4ea67d 35 ble.onDisconnection(disconnectionCallback);
rgrover1 13:b82d8db73633 36
rgrover1 16:1daa78939a3b 37 /*
rgrover1 16:1daa78939a3b 38 * Load parameters from (platform specific) persistent storage. Parameters
rgrover1 16:1daa78939a3b 39 * can be set to non-default values while the URIBeacon is in configuration
rgrover1 16:1daa78939a3b 40 * mode (within the first 60 seconds of power-up). Thereafter, parameters
rgrover1 16:1daa78939a3b 41 * get copied out to persistent storage before switching to normal URIBeacon
rgrover1 16:1daa78939a3b 42 * operation.
rgrover1 16:1daa78939a3b 43 */
rgrover1 16:1daa78939a3b 44 URIBeaconConfigService::Params_t params;
rgrover1 16:1daa78939a3b 45 loadURIBeaconConfigParams(&params);
rgrover1 13:b82d8db73633 46
rgrover1 16:1daa78939a3b 47 /* Initialize a URIBeaconConfig service providing config params, default URI, and power levels. */
rgrover1 16:1daa78939a3b 48 static URIBeaconConfigService::PowerLevels_t defaultAdvPowerLevels = {-20, -4, 0, 10}; // Values for ADV packets related to firmware levels
rgrover1 16:1daa78939a3b 49 uriBeaconConfig = new URIBeaconConfigService(ble, params, "http://uribeacon.org", defaultAdvPowerLevels);
rgrover1 13:b82d8db73633 50 if (!uriBeaconConfig->configuredSuccessfully()) {
rgrover1 6:31b65d4ea67d 51 error("failed to accommodate URI");
rgrover1 6:31b65d4ea67d 52 }
rgrover1 0:790a27ffc99b 53
rgrover1 13:b82d8db73633 54 // Setup auxiliary services to allow over-the-air firmware updates, etc
rgrover1 13:b82d8db73633 55 DFUService dfu(ble);
rgrover1 16:1daa78939a3b 56 DeviceInformationService deviceInfo(ble, "ARM", "UriBeacon", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
rgrover1 11:c77cc2b74101 57
rgrover1 16:1daa78939a3b 58 ble.startAdvertising(); /* Set the whole thing in motion. After this call a GAP central can scan the URIBeaconConfig
rgrover1 16:1daa78939a3b 59 * service, which then automatically switches to the URIBeacon after a timeout. */
rgrover1 0:790a27ffc99b 60
rgrover1 0:790a27ffc99b 61 while (true) {
rgrover1 0:790a27ffc99b 62 ble.waitForEvent();
rgrover1 0:790a27ffc99b 63 }
rgrover1 0:790a27ffc99b 64 }