Test program for magnetometer
Dependencies: mbed AES BLE_API nRF51822 smallAES
Diff: ButtonAService.h
- Revision:
- 2:4871b5ad7938
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ButtonAService.h Mon Sep 30 10:38:33 2019 +0000 @@ -0,0 +1,51 @@ +#ifndef __BUTTONA_SERVICE_H__ +#define __BUTTONA_SERVICE_H__ +// Button A is on P0 bit 17 +volatile uint32_t * P0OUT = (uint32_t *)0x50000504; +volatile uint32_t * P0DIR = (uint32_t *)0x50000514; +volatile uint32_t * P0IN = (uint32_t *)0x50000510; +volatile uint32_t * P0CONF = (uint32_t *)(0x50000700); +int8_t initialValue=0; +class ButtonAService { +public: + const static uint16_t BUTTONA_SERVICE_UUID = 0x1eee; + const static uint16_t BUTTONA_STATE_CHARACTERISTIC_UUID = 0x2019; + + ButtonAService(BLEDevice &_ble) : + ble(_ble), ButtonState(BUTTONA_STATE_CHARACTERISTIC_UUID,&initialValue,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) + { + GattCharacteristic *charTable[] = {&ButtonState}; + GattService btnService(BUTTONA_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); + ble.addService(btnService); + P0CONF[17] = 0; // On power up, input buffer is not connected so must do this + PreviousButtonState = -1; + } + + GattAttribute::Handle_t getValueHandle() const { + return ButtonState.getValueHandle(); + } + void poll() { + uint8_t newValue = GetButtonAState(); + if (newValue != PreviousButtonState) + { + // only send an update if the button state has changed (reduces traffic) + ble.gattServer().write(this->getValueHandle(), (uint8_t *)&newValue, sizeof(uint8_t)); + PreviousButtonState = newValue; + } + } + uint8_t GetButtonAState() + { + if ((*P0IN & (1 << 17))==0) + return 1; + else + return 0; + } + +private: + BLEDevice &ble; + ReadOnlyGattCharacteristic<int8_t> ButtonState; + uint8_t PreviousButtonState; + +}; + +#endif