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.
Dependencies: BLE_API_Native_blog TMP102 mbed
Revision 2:f11df1469db2, committed 2014-02-23
- Comitter:
- donalm
- Date:
- Sun Feb 23 14:39:55 2014 +0000
- Parent:
- 1:0b759b99a902
- Commit message:
- Some tidy up while writing the blog.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 0b759b99a902 -r f11df1469db2 main.cpp
--- a/main.cpp Sun Feb 23 12:53:35 2014 +0000
+++ b/main.cpp Sun Feb 23 14:39:55 2014 +0000
@@ -21,18 +21,10 @@
nRF51822n nrf; /* BLE radio driver */
TMP102 healthThemometer(p22, p20, 0x90); /* The TMP102 connected to our board */
-/* LEDs and serial output for debug: */
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-Serial pc(USBTX,USBRX);
-
+/* LEDs for indication: */
+DigitalOut oneSecondLed(LED1); /* LED1 is toggled every second. */
+DigitalOut advertisingStateLed(LED2); /* LED2 is on when we are advertising, otherwise off. */
-/* Device Information service */
-uint8_t manufacturerName[4] = { 'm', 'b', 'e', 'd' };
-GattService deviceInformationService ( GattService::UUID_DEVICE_INFORMATION_SERVICE );
-GattCharacteristic deviceManufacturer ( GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR,
- sizeof(manufacturerName), sizeof(manufacturerName),
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
/* Health Thermometer Service */
uint8_t thermTempPayload[5] = { 0, 0, 0, 0, 0 };
@@ -53,6 +45,7 @@
GapAdvertisingData advData;
GapAdvertisingData scanResponse;
GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
+
uint16_t uuid16_list[] = {GattService::UUID_HEALTH_THERMOMETER_SERVICE,
GattService::UUID_BATTERY_SERVICE};
@@ -67,59 +60,18 @@
/**************************************************************************/
class GapEventHandler : public GapEvents
{
- virtual void onTimeout(void)
- {
- pc.printf("Advertising Timeout!\n\r");
- // Restart the advertising process with a much slower interval,
- // only start advertising again after a button press, etc.
- }
-
+ //virtual void onTimeout(void) {}
+
virtual void onConnected(void)
{
- pc.printf("Connected!\n\r");
+ advertisingStateLed = 0;
}
+ /* When a client device disconnects we need to start advertising again. */
virtual void onDisconnected(void)
{
- pc.printf("Disconnected!\n\r");
- pc.printf("Restarting the advertising process\n\r");
nrf.getGap().startAdvertising(advParams);
- }
-};
-
-/**************************************************************************/
-/*!
- @brief This custom class can be used to override any GattServerEvents
- that you are interested in handling on an application level.
-*/
-/**************************************************************************/
-class GattServerEventHandler : public GattServerEvents
-{
- //virtual void onDataSent(void) {}
- //virtual void onDataWritten(void) {}
-
- virtual void onUpdatesEnabled(uint16_t charHandle)
- {
- if (charHandle == thermTemp.handle)
- {
- pc.printf("Temperature indication enabled\n\r");
- }
- }
-
- virtual void onUpdatesDisabled(uint16_t charHandle)
- {
- if (charHandle == thermTemp.handle)
- {
- pc.printf("Temperature indication disabled\n\r");
- }
- }
-
- virtual void onConfirmationReceived(uint16_t charHandle)
- {
- if (charHandle == thermTemp.handle)
- {
- pc.printf("Temperature indication received\n\r");
- }
+ advertisingStateLed = 1;
}
};
@@ -130,18 +82,14 @@
/**************************************************************************/
int main(void)
{
- pc.baud(115200);
+
+ /* Setup blinky led */
+ oneSecondLed=1;
- /* Setup blinky: led1 is toggled in main, led2 is toggled via Ticker */
- led1=1;
- led2=0;
-
- /* Setup the local GAP/GATT event handlers */
+ /* Setup an event handler for GAP events i.e. Client/Server connection events. */
nrf.getGap().setEventHandler(new GapEventHandler());
- nrf.getGattServer().setEventHandler(new GattServerEventHandler());
-
+
/* Initialise the nRF51822 */
- pc.printf("Initialising the nRF51822\n\r");
nrf.init();
/* Make sure we get a clean start */
@@ -164,41 +112,36 @@
/* Start advertising (make sure you've added all your data first) */
nrf.getGap().startAdvertising(advParams);
-
- /* Now that we're live, update the battery level characteristic, and */
- /* change the device manufacturer characteristic to 'mbed' */
- nrf.getGattServer().updateValue(battLevel.handle, (uint8_t*)&batt, sizeof(batt));
- nrf.getGattServer().updateValue(deviceManufacturer.handle, manufacturerName, sizeof(manufacturerName));
- nrf.getGattServer().updateValue(thermTemp.handle, thermTempPayload, sizeof(thermTempPayload));
-
+ advertisingStateLed = 1;
for (;;)
{
+ /* Now that we're live, update the battery level & temperature characteristics */
+ updateServiceValues();
wait(1);
- updateServiceValues();
}
}
/**************************************************************************/
/*!
- @brief Ticker callback to switch led2 state
+ @brief Ticker callback to switch advertisingStateLed state
*/
/**************************************************************************/
void updateServiceValues(void)
{
- /* Toggle the LEDs */
- led1 = !led1;
- led2 = !led2;
+ /* Toggle the one second LEDs */
+ oneSecondLed = !oneSecondLed;
/* Update battery level */
nrf.getGattServer().updateValue(battLevel.handle, (uint8_t*)&batt, sizeof(batt));
+ /* Decrement the battery level. */
+ batt <=50 ? batt=100 : batt--;;
- /* Update the temperature */
+ /* Update the temperature. Note that we need to convert to an ieee11073 format float. */
float temperature = healthThemometer.read();
uint32_t temp_ieee11073 = quick_ieee11073_from_float(temperature);
memcpy(thermTempPayload+1, &temp_ieee11073, 4);
nrf.getGattServer().updateValue(thermTemp.handle, thermTempPayload, sizeof(thermTempPayload));
- printf("Temperature: %f Celsius\r\n", temperature);
}
/**
@@ -212,4 +155,5 @@
uint32_t mantissa = (uint32_t)(temperature*10);
return ( ((uint32_t)exponent) << 24) | mantissa;
-}
\ No newline at end of file
+}
+