BLE EddystoneService example

This example is a fork of the following mbed-os example:

https://developer.mbed.org/teams/mbed-os-examples/code/mbed-os-example-ble-EddystoneService/

Please read the documentation in this page.

Committer:
mbed_official
Date:
Thu Jul 28 23:14:36 2016 +0100
Revision:
1:9db4d46bb63f
Parent:
0:4c8f8bf32a99
Child:
2:9ee673e0b86a
Merge branch 'master' of https://github.com/ARMmbed/mbed-os-example-ble


Commit copied from ./src/github.com/ARMmbed/mbed-os-example-ble

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 1:9db4d46bb63f 1 /* mbed Microcontroller Library
mbed_official 1:9db4d46bb63f 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 1:9db4d46bb63f 3 *
mbed_official 1:9db4d46bb63f 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 1:9db4d46bb63f 5 * you may not use this file except in compliance with the License.
mbed_official 1:9db4d46bb63f 6 * You may obtain a copy of the License at
mbed_official 1:9db4d46bb63f 7 *
mbed_official 1:9db4d46bb63f 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 1:9db4d46bb63f 9 *
mbed_official 1:9db4d46bb63f 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 1:9db4d46bb63f 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 1:9db4d46bb63f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 1:9db4d46bb63f 13 * See the License for the specific language governing permissions and
mbed_official 1:9db4d46bb63f 14 * limitations under the License.
mbed_official 1:9db4d46bb63f 15 */
mbed_official 1:9db4d46bb63f 16
mbed_official 1:9db4d46bb63f 17 #include "TLMFrame.h"
mbed_official 1:9db4d46bb63f 18
mbed_official 1:9db4d46bb63f 19 TLMFrame::TLMFrame(uint8_t tlmVersionIn,
mbed_official 1:9db4d46bb63f 20 uint16_t tlmBatteryVoltageIn,
mbed_official 1:9db4d46bb63f 21 uint16_t tlmBeaconTemperatureIn,
mbed_official 1:9db4d46bb63f 22 uint32_t tlmPduCountIn,
mbed_official 1:9db4d46bb63f 23 uint32_t tlmTimeSinceBootIn) :
mbed_official 1:9db4d46bb63f 24 tlmVersion(tlmVersionIn),
mbed_official 1:9db4d46bb63f 25 lastTimeSinceBootRead(0),
mbed_official 1:9db4d46bb63f 26 tlmBatteryVoltage(tlmBatteryVoltageIn),
mbed_official 1:9db4d46bb63f 27 tlmBeaconTemperature(tlmBeaconTemperatureIn),
mbed_official 1:9db4d46bb63f 28 tlmPduCount(tlmPduCountIn),
mbed_official 1:9db4d46bb63f 29 tlmTimeSinceBoot(tlmTimeSinceBootIn)
mbed_official 1:9db4d46bb63f 30 {
mbed_official 1:9db4d46bb63f 31 }
mbed_official 1:9db4d46bb63f 32
mbed_official 1:9db4d46bb63f 33 void TLMFrame::setTLMData(uint8_t tlmVersionIn)
mbed_official 1:9db4d46bb63f 34 {
mbed_official 1:9db4d46bb63f 35 /* According to the Eddystone spec BatteryVoltage is 0 and
mbed_official 1:9db4d46bb63f 36 * BeaconTemperature is 0x8000 if not supported
mbed_official 1:9db4d46bb63f 37 */
mbed_official 1:9db4d46bb63f 38 tlmVersion = tlmVersionIn;
mbed_official 1:9db4d46bb63f 39 tlmBatteryVoltage = 0;
mbed_official 1:9db4d46bb63f 40 tlmBeaconTemperature = 0x8000;
mbed_official 1:9db4d46bb63f 41 tlmPduCount = 0;
mbed_official 1:9db4d46bb63f 42 tlmTimeSinceBoot = 0;
mbed_official 1:9db4d46bb63f 43 }
mbed_official 1:9db4d46bb63f 44
mbed_official 1:9db4d46bb63f 45 void TLMFrame::constructTLMFrame(uint8_t *rawFrame)
mbed_official 1:9db4d46bb63f 46 {
mbed_official 1:9db4d46bb63f 47 size_t index = 0;
mbed_official 1:9db4d46bb63f 48 rawFrame[index++] = EDDYSTONE_UUID[0]; // 16-bit Eddystone UUID
mbed_official 1:9db4d46bb63f 49 rawFrame[index++] = EDDYSTONE_UUID[1];
mbed_official 1:9db4d46bb63f 50 rawFrame[index++] = FRAME_TYPE_TLM; // Eddystone frame type = Telemetry
mbed_official 1:9db4d46bb63f 51 rawFrame[index++] = tlmVersion; // TLM Version Number
mbed_official 1:9db4d46bb63f 52 rawFrame[index++] = (uint8_t)(tlmBatteryVoltage >> 8); // Battery Voltage[0]
mbed_official 1:9db4d46bb63f 53 rawFrame[index++] = (uint8_t)(tlmBatteryVoltage >> 0); // Battery Voltage[1]
mbed_official 1:9db4d46bb63f 54 rawFrame[index++] = (uint8_t)(tlmBeaconTemperature >> 8); // Beacon Temp[0]
mbed_official 1:9db4d46bb63f 55 rawFrame[index++] = (uint8_t)(tlmBeaconTemperature >> 0); // Beacon Temp[1]
mbed_official 1:9db4d46bb63f 56 rawFrame[index++] = (uint8_t)(tlmPduCount >> 24); // PDU Count [0]
mbed_official 1:9db4d46bb63f 57 rawFrame[index++] = (uint8_t)(tlmPduCount >> 16); // PDU Count [1]
mbed_official 1:9db4d46bb63f 58 rawFrame[index++] = (uint8_t)(tlmPduCount >> 8); // PDU Count [2]
mbed_official 1:9db4d46bb63f 59 rawFrame[index++] = (uint8_t)(tlmPduCount >> 0); // PDU Count [3]
mbed_official 1:9db4d46bb63f 60 rawFrame[index++] = (uint8_t)(tlmTimeSinceBoot >> 24); // Time Since Boot [0]
mbed_official 1:9db4d46bb63f 61 rawFrame[index++] = (uint8_t)(tlmTimeSinceBoot >> 16); // Time Since Boot [1]
mbed_official 1:9db4d46bb63f 62 rawFrame[index++] = (uint8_t)(tlmTimeSinceBoot >> 8); // Time Since Boot [2]
mbed_official 1:9db4d46bb63f 63 rawFrame[index++] = (uint8_t)(tlmTimeSinceBoot >> 0); // Time Since Boot [3]
mbed_official 1:9db4d46bb63f 64 }
mbed_official 1:9db4d46bb63f 65
mbed_official 1:9db4d46bb63f 66 size_t TLMFrame::getRawFrameSize(void) const
mbed_official 1:9db4d46bb63f 67 {
mbed_official 1:9db4d46bb63f 68 return FRAME_SIZE_TLM + EDDYSTONE_UUID_SIZE;
mbed_official 1:9db4d46bb63f 69 }
mbed_official 1:9db4d46bb63f 70
mbed_official 1:9db4d46bb63f 71 void TLMFrame::updateTimeSinceBoot(uint32_t nowInMillis)
mbed_official 1:9db4d46bb63f 72 {
mbed_official 1:9db4d46bb63f 73 tlmTimeSinceBoot += (nowInMillis - lastTimeSinceBootRead) / 100;
mbed_official 1:9db4d46bb63f 74 lastTimeSinceBootRead = nowInMillis;
mbed_official 1:9db4d46bb63f 75 }
mbed_official 1:9db4d46bb63f 76
mbed_official 1:9db4d46bb63f 77 void TLMFrame::updateBatteryVoltage(uint16_t tlmBatteryVoltageIn)
mbed_official 1:9db4d46bb63f 78 {
mbed_official 1:9db4d46bb63f 79 tlmBatteryVoltage = tlmBatteryVoltageIn;
mbed_official 1:9db4d46bb63f 80 }
mbed_official 1:9db4d46bb63f 81
mbed_official 1:9db4d46bb63f 82 void TLMFrame::updateBeaconTemperature(uint16_t tlmBeaconTemperatureIn)
mbed_official 1:9db4d46bb63f 83 {
mbed_official 1:9db4d46bb63f 84 tlmBeaconTemperature = tlmBeaconTemperatureIn;
mbed_official 1:9db4d46bb63f 85 }
mbed_official 1:9db4d46bb63f 86
mbed_official 1:9db4d46bb63f 87 void TLMFrame::updatePduCount(void)
mbed_official 1:9db4d46bb63f 88 {
mbed_official 1:9db4d46bb63f 89 tlmPduCount++;
mbed_official 1:9db4d46bb63f 90 }
mbed_official 1:9db4d46bb63f 91
mbed_official 1:9db4d46bb63f 92 uint16_t TLMFrame::getBatteryVoltage(void) const
mbed_official 1:9db4d46bb63f 93 {
mbed_official 1:9db4d46bb63f 94 return tlmBatteryVoltage;
mbed_official 1:9db4d46bb63f 95 }
mbed_official 1:9db4d46bb63f 96
mbed_official 1:9db4d46bb63f 97 uint16_t TLMFrame::getBeaconTemperature(void) const
mbed_official 1:9db4d46bb63f 98 {
mbed_official 1:9db4d46bb63f 99 return tlmBeaconTemperature;
mbed_official 1:9db4d46bb63f 100 }
mbed_official 1:9db4d46bb63f 101
mbed_official 1:9db4d46bb63f 102 uint8_t TLMFrame::getTLMVersion(void) const
mbed_official 1:9db4d46bb63f 103 {
mbed_official 1:9db4d46bb63f 104 return tlmVersion;
mbed_official 1:9db4d46bb63f 105 }