To Be Deploy
Dependencies: BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1
Fork of BLE_EddystoneBeacon_Serviceprod by
main.cpp@38:9bc868ab9c21, 2017-12-21 (annotated)
- Committer:
- rjrahul25
- Date:
- Thu Dec 21 07:07:45 2017 +0000
- Revision:
- 38:9bc868ab9c21
- Parent:
- 37:acd9b4823178
To Be Deploy
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:c04d932e96c9 | 1 | /* mbed Microcontroller Library |
mbedAustin | 32:41840b78597e | 2 | * Copyright (c) 2006-2013 ARM Limited |
screamer | 0:c04d932e96c9 | 3 | * |
screamer | 0:c04d932e96c9 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
screamer | 0:c04d932e96c9 | 5 | * you may not use this file except in compliance with the License. |
screamer | 0:c04d932e96c9 | 6 | * You may obtain a copy of the License at |
screamer | 0:c04d932e96c9 | 7 | * |
screamer | 0:c04d932e96c9 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
screamer | 0:c04d932e96c9 | 9 | * |
screamer | 0:c04d932e96c9 | 10 | * Unless required by applicable law or agreed to in writing, software |
screamer | 0:c04d932e96c9 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
screamer | 0:c04d932e96c9 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
screamer | 0:c04d932e96c9 | 13 | * See the License for the specific language governing permissions and |
screamer | 0:c04d932e96c9 | 14 | * limitations under the License. |
screamer | 0:c04d932e96c9 | 15 | */ |
screamer | 0:c04d932e96c9 | 16 | |
screamer | 0:c04d932e96c9 | 17 | #include "mbed.h" |
andresag | 34:f6d4a699a1ea | 18 | #include "ble/BLE.h" |
andresag | 34:f6d4a699a1ea | 19 | #include "EddystoneService.h" |
andresag | 34:f6d4a699a1ea | 20 | |
andresag | 34:f6d4a699a1ea | 21 | EddystoneService *eddyServicePtr; |
screamer | 0:c04d932e96c9 | 22 | |
andresag | 34:f6d4a699a1ea | 23 | void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext) |
andresag | 34:f6d4a699a1ea | 24 | { |
andresag | 34:f6d4a699a1ea | 25 | /* Initialization error handling goes here... */ |
andresag | 34:f6d4a699a1ea | 26 | (void) initContext; |
andresag | 34:f6d4a699a1ea | 27 | } |
mbedAustin | 30:6c2db8bf5b17 | 28 | |
andresag | 34:f6d4a699a1ea | 29 | /* |
andresag | 34:f6d4a699a1ea | 30 | * Update TLM frame battery voltage value. |
andresag | 34:f6d4a699a1ea | 31 | */ |
andresag | 34:f6d4a699a1ea | 32 | uint16_t tlmBatteryVoltageCallback(uint16_t prevBatteryVoltage) |
andresag | 34:f6d4a699a1ea | 33 | { |
andresag | 34:f6d4a699a1ea | 34 | prevBatteryVoltage++; |
andresag | 34:f6d4a699a1ea | 35 | return prevBatteryVoltage; |
andresag | 34:f6d4a699a1ea | 36 | } |
mbedAustin | 30:6c2db8bf5b17 | 37 | |
andresag | 34:f6d4a699a1ea | 38 | /* |
andresag | 34:f6d4a699a1ea | 39 | * Update TLM frame beacon temperature value. |
andresag | 34:f6d4a699a1ea | 40 | */ |
andresag | 34:f6d4a699a1ea | 41 | uint16_t tlmBeaconTemperatureCallback(uint16_t prevBeaconTemperature) |
andresag | 34:f6d4a699a1ea | 42 | { |
andresag | 34:f6d4a699a1ea | 43 | prevBeaconTemperature++; |
andresag | 34:f6d4a699a1ea | 44 | return prevBeaconTemperature; |
mbedAustin | 30:6c2db8bf5b17 | 45 | } |
mbedAustin | 30:6c2db8bf5b17 | 46 | |
andresag | 34:f6d4a699a1ea | 47 | void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext) |
andresag | 34:f6d4a699a1ea | 48 | { |
andresag | 34:f6d4a699a1ea | 49 | BLE &ble = initContext->ble; |
andresag | 34:f6d4a699a1ea | 50 | ble_error_t error = initContext->error; |
andresag | 34:f6d4a699a1ea | 51 | |
andresag | 34:f6d4a699a1ea | 52 | if (error != BLE_ERROR_NONE) { |
andresag | 34:f6d4a699a1ea | 53 | onBleInitError(initContext); |
andresag | 34:f6d4a699a1ea | 54 | return; |
andresag | 34:f6d4a699a1ea | 55 | } |
andresag | 34:f6d4a699a1ea | 56 | |
andresag | 34:f6d4a699a1ea | 57 | /* Set UID and TLM frame data */ |
rjrahul25 | 38:9bc868ab9c21 | 58 | // const UIDNamespaceID_t uidNamespaceID = {0x87, 0x4c, 0x88, 0xb2, 0x4e, 0xb5, 0x4a, 0xda, 0xb0, 0x52}; |
rjrahul25 | 38:9bc868ab9c21 | 59 | // const UIDInstanceID_t uidInstanceID = {0x33, 0x92, 0xd0, 0x34, 0xaf, 0xdb}; |
rjrahul25 | 38:9bc868ab9c21 | 60 | // 4a69a7bc-d501-11e7-9296-cec278b6b50a |
rjrahul25 | 38:9bc868ab9c21 | 61 | // 05c46e98-d502-11e7-9296-cec278b6b50a |
rjrahul25 | 38:9bc868ab9c21 | 62 | // a06b252c-d502-11e7-9296-cec278b6b50a |
rjrahul25 | 38:9bc868ab9c21 | 63 | // c4253934-d503-11e7-9296-cec278b6b50a |
rjrahul25 | 38:9bc868ab9c21 | 64 | const UIDNamespaceID_t uidNamespaceID = {0xc4, 0x25, 0x39, 0x34, 0xd5, 0x03, 0x11, 0xe7, 0x92, 0x96}; |
rjrahul25 | 38:9bc868ab9c21 | 65 | const UIDInstanceID_t uidInstanceID = {0xce, 0xc2, 0x78, 0xb6, 0xb5, 0x0a}; |
rjrahul25 | 38:9bc868ab9c21 | 66 | |
andresag | 34:f6d4a699a1ea | 67 | uint8_t tlmVersion = 0x00; |
andresag | 34:f6d4a699a1ea | 68 | |
andresag | 34:f6d4a699a1ea | 69 | /* Initialize a EddystoneBeaconConfig service providing config params, default URI, and power levels. */ |
andresag | 34:f6d4a699a1ea | 70 | static const PowerLevels_t defaultAdvPowerLevels = {-47, -33, -21, -13}; // Values for ADV packets related to firmware levels, calibrated based on measured values at 1m |
gagan3g | 37:acd9b4823178 | 71 | static const PowerLevels_t radioPowerLevels = {4, -30, -16, -4}; // Values for radio power levels, provided by manufacturer. |
andresag | 34:f6d4a699a1ea | 72 | |
andresag | 34:f6d4a699a1ea | 73 | /* Set everything to defaults */ |
andresag | 34:f6d4a699a1ea | 74 | eddyServicePtr = new EddystoneService(ble, defaultAdvPowerLevels, radioPowerLevels); |
andresag | 34:f6d4a699a1ea | 75 | |
andresag | 34:f6d4a699a1ea | 76 | /* Set default URL, UID and TLM frame data if not initialized through the config service */ |
gagan3g | 37:acd9b4823178 | 77 | eddyServicePtr->setURLData("https://goo.gl/XPGJj6"); |
andresag | 34:f6d4a699a1ea | 78 | eddyServicePtr->setUIDData(&uidNamespaceID, &uidInstanceID); |
andresag | 34:f6d4a699a1ea | 79 | eddyServicePtr->setTLMData(tlmVersion); |
andresag | 34:f6d4a699a1ea | 80 | |
andresag | 34:f6d4a699a1ea | 81 | /* Set battery voltage and temperature callbacks */ |
andresag | 34:f6d4a699a1ea | 82 | eddyServicePtr->onTLMBatteryVoltageUpdate(tlmBatteryVoltageCallback); |
andresag | 34:f6d4a699a1ea | 83 | eddyServicePtr->onTLMBeaconTemperatureUpdate(tlmBeaconTemperatureCallback); |
andresag | 34:f6d4a699a1ea | 84 | |
andresag | 34:f6d4a699a1ea | 85 | /* Start Eddystone in config mode */ |
rjrahul25 | 38:9bc868ab9c21 | 86 | //eddyServicePtr->startBeaconService(0, 20, 0); |
gagan3g | 37:acd9b4823178 | 87 | eddyServicePtr->startBeaconService(0, 20, 0); |
mbedAustin | 30:6c2db8bf5b17 | 88 | } |
screamer | 0:c04d932e96c9 | 89 | |
screamer | 0:c04d932e96c9 | 90 | int main(void) |
screamer | 0:c04d932e96c9 | 91 | { |
andresag | 34:f6d4a699a1ea | 92 | BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); |
andresag | 34:f6d4a699a1ea | 93 | ble.init(bleInitComplete); |
andresag | 34:f6d4a699a1ea | 94 | |
andresag | 34:f6d4a699a1ea | 95 | /* SpinWait for initialization to complete. This is necessary because the |
andresag | 34:f6d4a699a1ea | 96 | * BLE object is used in the main loop below. */ |
andresag | 34:f6d4a699a1ea | 97 | while (ble.hasInitialized() == false) { /* spin loop */ } |
mbedAustin | 32:41840b78597e | 98 | |
screamer | 0:c04d932e96c9 | 99 | while (true) { |
andresag | 34:f6d4a699a1ea | 100 | ble.waitForEvent(); /* this will return upon any system event (such as an interrupt or a ticker wakeup) */ |
screamer | 0:c04d932e96c9 | 101 | } |
screamer | 0:c04d932e96c9 | 102 | } |