diff --git a/inc/MicroBit.h b/inc/MicroBit.h index b218210..64e8488 100644 --- a/inc/MicroBit.h +++ b/inc/MicroBit.h @@ -37,6 +37,7 @@ #include "MicroBitEventService.h" #include "MicroBitLEDService.h" #include "MicroBitAccelerometerService.h" +#include "MicroBitMagnetometerService.h" #include "ExternalEvents.h" // MicroBit::flags values @@ -111,6 +112,7 @@ class MicroBit MicroBitEventService *ble_event_service; MicroBitLEDService *ble_led_service; MicroBitAccelerometerService *ble_accelerometer_service; + MicroBitMagnetometerService *ble_magnetometer_service; /** * Constructor. diff --git a/inc/MicroBitConfig.h b/inc/MicroBitConfig.h index 79cea2d..99d37c3 100644 --- a/inc/MicroBitConfig.h +++ b/inc/MicroBitConfig.h @@ -167,6 +167,13 @@ #define MICROBIT_BLE_ACCELEROMETER_SERVICE 1 #endif +// Enable/Disable BLE Service: MicroBitMagnetometerService +// This enables live access to the on board 3 axis magnetometer. +// Set '1' to enable. +#ifndef MICROBIT_BLE_MAGNETOMETER_SERVICE +#define MICROBIT_BLE_MAGNETOMETER_SERVICE 1 +#endif + // Defines the maximum length strong that can be written to the // display over BLE. #ifndef MICROBIT_BLE_MAXIMUM_SCROLLTEXT diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6f3cc60..abaaf36 100755 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -32,6 +32,7 @@ set(YOTTA_AUTO_MICROBIT-DAL_CPP_FILES "ble-services/MicroBitEventService.cpp" "ble-services/MicroBitLEDService.cpp" "ble-services/MicroBitAccelerometerService.cpp" + "ble-services/MicroBitMagnetometerService.cpp" ) if (YOTTA_CFG_MICROBIT_CONFIGFILE) diff --git a/source/MicroBit.cpp b/source/MicroBit.cpp index 66a0e75..b35dacd 100644 --- a/source/MicroBit.cpp +++ b/source/MicroBit.cpp @@ -125,6 +125,10 @@ void MicroBit::init() ble_accelerometer_service = new MicroBitAccelerometerService(*ble); #endif +#if CONFIG_ENABLED(MICROBIT_BLE_MAGNETOMETER_SERVICE) + ble_magnetometer_service = new MicroBitMagnetometerService(*ble); +#endif + // Setup advertising. ble->accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble->accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)MICROBIT_BLE_DEVICE_NAME, sizeof(MICROBIT_BLE_DEVICE_NAME)); diff --git a/source/ble-services/MicroBitMagnetometerService.cpp b/source/ble-services/MicroBitMagnetometerService.cpp index df14341..ca3d7f0 100644 --- a/source/ble-services/MicroBitMagnetometerService.cpp +++ b/source/ble-services/MicroBitMagnetometerService.cpp @@ -71,7 +71,7 @@ void MicroBitMagnetometerService::magnetometerUpdate(MicroBitEvent e) magnetometerDataCharacteristicBuffer[0] = uBit.compass.getX(); magnetometerDataCharacteristicBuffer[1] = uBit.compass.getY(); magnetometerDataCharacteristicBuffer[2] = uBit.compass.getZ(); - magnetometerBearingCharacteristicBuffer = (uint16_t) uBit.compass.bearing(); + magnetometerBearingCharacteristicBuffer = (uint16_t) uBit.compass.heading(); ble.gattServer().notify(magnetometerDataCharacteristicHandle,(uint8_t *)magnetometerDataCharacteristicBuffer, sizeof(magnetometerDataCharacteristicBuffer)); ble.gattServer().notify(magnetometerDataCharacteristicHandle,(uint8_t *)magnetometerBearingCharacteristicBuffer, sizeof(magnetometerDataCharacteristicBuffer));