Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE_BatteryLevel by
Revision 4:5b64235d1b85, committed 2014-06-12
- Comitter:
- Rohit Grover
- Date:
- Thu Jun 12 13:56:06 2014 +0100
- Parent:
- 3:288b2baffd14
- Child:
- 5:77ad8d8dc9c5
- Commit message:
- updating the batteryLevel example with new API
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Thu Jan 16 22:31:47 2014 +0000
+++ b/main.cpp Thu Jun 12 13:56:06 2014 +0100
@@ -1,31 +1,91 @@
-#include "mbed.h"
-#include "blecommon.h"
-#include "hw/nRF51822s/nRF51822s.h"
-
-nRF51822s nrf ( p9, p10, p30, p29 ); /* (tx, rx, rts, cts) */
-GattService battService ( 0x180F );
-GattCharacteristic battLevel ( 0x2A19, 1, 1,
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
-
-int main(void)
-{
- /* Make sure we get a clean start */
- nrf.reset();
-
- /* Add the characteristic to our service */
- battService.addCharacteristic(battLevel);
-
- /* Pass the service into the radio */
- nrf.getGattServer().addService(battService);
-
- /* Configure the radio and start advertising with default values */
- /* Make sure you've added all of your services before calling this function! */
- nrf.getGap().startAdvertising();
-
- /* Now that we're live, update the battery level characteristic */
- uint8_t batt = 72;
- nrf.getGattServer().updateValue(battLevel.handle, (uint8_t*)&batt, sizeof(batt));
-
- while(1);
-}
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed.h"
+#include "BLEDevice.h"
+
+BLEDevice ble;
+
+DigitalOut led1(LED1);
+
+#define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
+ * it will have an impact on code-size and power
+ * consumption. */
+
+#if NEED_CONSOLE_OUTPUT
+Serial pc(USBTX, USBRX);
+#define DEBUG(...) { pc.printf(__VA_ARGS__); }
+#else
+#define DEBUG(...) /* nothing */
+#endif /* #if NEED_CONSOLE_OUTPUT */
+
+/* Battery Level Service */
+uint8_t batt = 72; /* Battery level */
+GattCharacteristic battLevel (GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, &batt, sizeof(batt), sizeof(batt),
+ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
+GattCharacteristic *battChars[] = {
+ &battLevel,
+};
+GattService battService (GattService::UUID_BATTERY_SERVICE, battChars, sizeof(battChars) / sizeof(GattCharacteristic *));
+
+
+void disconnectionCallback(void)
+{
+ DEBUG("Disconnected!\n\r");
+ DEBUG("Restarting the advertising process\n\r");
+ ble.startAdvertising();
+}
+
+/**
+ * Runs once a second in interrupt context triggered by the 'ticker'; updates
+ * battery level if there is a connection.
+ */
+void periodicCallback(void)
+{
+ led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
+
+ if (ble.getGapState().connected) {
+ /* Update battery level */
+ batt++;
+ if (batt > 100) {
+ batt = 72;
+ }
+ ble.updateCharacteristicValue(battLevel.getHandle(), (uint8_t *)&batt, sizeof(batt));
+ }
+}
+
+int main(void)
+{
+ led1 = 1;
+ Ticker ticker;
+ ticker.attach(periodicCallback, 1);
+
+ DEBUG("Initialising the nRF51822\n\r");
+ ble.init();
+ ble.onDisconnection(disconnectionCallback);
+
+ /* setup advertising */
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+ ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+ ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
+ ble.startAdvertising();
+
+ ble.addService(battService);
+
+ while (true) {
+ ble.waitForEvent();
+ }
+}
