diff --git a/ble/DiscoveredCharacteristic.h b/ble/DiscoveredCharacteristic.h index eeb0936..faccde9 100644 --- a/ble/DiscoveredCharacteristic.h +++ b/ble/DiscoveredCharacteristic.h @@ -135,14 +135,6 @@ class DiscoveredCharacteristic { */ ble_error_t write(uint16_t length, const uint8_t *value) const; - static void setupOnDataRead(GattClient::ReadCallback_t callback) { - onDataReadCallback = callback; - } - - static void setupOnDataWrite(GattClient::WriteCallback_t callback) { - onDataWriteCallback = callback; - } - void setupLongUUID(UUID::LongUUIDBytes_t longUUID) { uuid.setupLong(longUUID); } @@ -182,10 +174,6 @@ class DiscoveredCharacteristic { GattAttribute::Handle_t valueHandle; Gap::Handle_t connHandle; - -public: - static GattClient::ReadCallback_t onDataReadCallback; - static GattClient::WriteCallback_t onDataWriteCallback; }; #endif /*__DISCOVERED_CHARACTERISTIC_H__*/ diff --git a/ble/Gap.h b/ble/Gap.h index e18fa75..27304ed 100644 --- a/ble/Gap.h +++ b/ble/Gap.h @@ -154,7 +154,7 @@ class Gap { * @return BLE_ERROR_NONE on success. */ virtual ble_error_t setAddress(AddressType_t type, const Address_t address) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -163,7 +163,7 @@ class Gap { * @return BLE_ERROR_NONE on success. */ virtual ble_error_t getAddress(AddressType_t *typeP, Address_t address) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -188,7 +188,7 @@ class Gap { } virtual ble_error_t stopAdvertising(void) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -197,7 +197,7 @@ class Gap { * @retval BLE_ERROR_NONE if successfully stopped scanning procedure. */ virtual ble_error_t stopScan() { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -219,7 +219,7 @@ class Gap { Gap::AddressType_t peerAddrType, const ConnectionParams_t *connectionParams, const GapScanningParams *scanParams) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -231,7 +231,7 @@ class Gap { * The reason for disconnection to be sent back to the peer. */ virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -248,7 +248,7 @@ class Gap { * altertive which takes a connection handle. It will be dropped in the future. */ virtual ble_error_t disconnect(DisconnectionReason_t reason) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -264,7 +264,7 @@ class Gap { * the given structure pointed to by params. */ virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -276,7 +276,7 @@ class Gap { * The structure containing the desired parameters. */ virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -290,7 +290,7 @@ class Gap { * the parameters in the PPCP characteristic of the GAP service will be used instead. */ virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -299,7 +299,7 @@ class Gap { * The new value for the device-name. This is a UTF-8 encoded, NULL-terminated string. */ virtual ble_error_t setDeviceName(const uint8_t *deviceName) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -321,7 +321,7 @@ class Gap { * use this information to retry with a suitable buffer size. */ virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -330,7 +330,7 @@ class Gap { * The new value for the device-appearance. */ virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -339,7 +339,7 @@ class Gap { * The new value for the device-appearance. */ virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -347,7 +347,7 @@ class Gap { * @param[in] txPower Radio transmit power in dBm. */ virtual ble_error_t setTxPower(int8_t txPower) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -365,7 +365,7 @@ class Gap { protected: /* Override the following in the underlying adaptation layer to provide the functionality of scanning. */ virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /* diff --git a/ble/GattClient.h b/ble/GattClient.h index ca36c19..8d3885f 100644 --- a/ble/GattClient.h +++ b/ble/GattClient.h @@ -28,8 +28,8 @@ class GattClient { typedef void (*ReadCallback_t)(const GattReadCallbackParams *params); enum WriteOp_t { - GATT_OP_WRITE_REQ = 0x01, /**< Write Request. */ - GATT_OP_WRITE_CMD = 0x02, /**< Write Command. */ + GATT_OP_WRITE_REQ = 0x01, /**< Write Request. */ + GATT_OP_WRITE_CMD = 0x02, /**< Write Command. */ }; typedef void (*WriteCallback_t)(const GattWriteCallbackParams *params); @@ -39,12 +39,11 @@ class GattClient { */ public: /** - * Launch service discovery. Once launched, service discovery will remain - * active with callbacks being issued back into the application for matching - * services/characteristics. isServiceDiscoveryActive() can be used to - * determine status; and a termination callback (if setup) will be invoked - * at the end. Service discovery can be terminated prematurely if needed - * using terminateServiceDiscovery(). + * Launch service discovery. Once launched, application callbacks will be + * invoked for matching services/characteristics. isServiceDiscoveryActive() + * can be used to determine status; and a termination callback (if setup) + * will be invoked at the end. Service discovery can be terminated prematurely + * if needed using terminateServiceDiscovery(). * * @param connectionHandle * Handle for the connection with the peer. @@ -98,7 +97,7 @@ class GattClient { ServiceDiscovery::CharacteristicCallback_t cc = NULL, const UUID &matchingServiceUUID = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN), const UUID &matchingCharacteristicUUIDIn = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -130,7 +129,7 @@ class GattClient { virtual ble_error_t discoverServices(Gap::Handle_t connectionHandle, ServiceDiscovery::ServiceCallback_t callback, const UUID &matchingServiceUUID = UUID::ShortUUIDBytes_t(BLE_UUID_UNKNOWN)) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -161,7 +160,7 @@ class GattClient { ServiceDiscovery::ServiceCallback_t callback, GattAttribute::Handle_t startHandle, GattAttribute::Handle_t endHandle) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -181,7 +180,7 @@ class GattClient { /* Initiate a Gatt Client read procedure by attribute-handle. */ virtual ble_error_t read(Gap::Handle_t connHandle, GattAttribute::Handle_t attributeHandle, uint16_t offset) const { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -205,7 +204,24 @@ class GattClient { GattAttribute::Handle_t attributeHandle, size_t length, const uint8_t *value) const { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ + } + + /* Event callback handlers. */ +public: + /** + * Setup a callback for read response events. + */ + void onDataRead(ReadCallback_t callback) { + onDataReadCallback = callback; + } + + /** + * Setup a callback for write response events. + * @Note: write commands (issued using writeWoResponse) don't generate a response. + */ + void onDataWrite(WriteCallback_t callback) { + onDataWriteCallback = callback; } /** @@ -220,6 +236,24 @@ class GattClient { /* empty */ } + /* Entry points for the underlying stack to report events back to the user. */ +public: + void processReadResponse(const GattReadCallbackParams *params) { + if (onDataReadCallback) { + onDataReadCallback(params); + } + } + + void processWriteResponse(const GattWriteCallbackParams *params) { + if (onDataWriteCallback) { + onDataWriteCallback(params); + } + } + +protected: + ReadCallback_t onDataReadCallback; + WriteCallback_t onDataWriteCallback; + private: /* disallow copy and assignment */ GattClient(const GattClient &); diff --git a/ble/GattServer.h b/ble/GattServer.h index 101f5f9..0f60a1e 100644 --- a/ble/GattServer.h +++ b/ble/GattServer.h @@ -53,7 +53,7 @@ class GattServer { * characteristics contained within. */ virtual ble_error_t addService(GattService &) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -72,7 +72,7 @@ class GattServer { * @return BLE_ERROR_NONE if a value was read successfully into the buffer. */ virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -97,7 +97,7 @@ class GattServer { * attribtues (such as the CCCDs). */ virtual ble_error_t read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t *buffer, uint16_t *lengthP) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -119,7 +119,7 @@ class GattServer { * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. */ virtual ble_error_t write(GattAttribute::Handle_t, const uint8_t *, uint16_t, bool localOnly = false) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -145,7 +145,38 @@ class GattServer { * @return BLE_ERROR_NONE if we have successfully set the value of the attribute. */ virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t *, uint16_t, bool localOnly = false) { - return BLE_ERROR_NOT_IMPLEMENTED; /* default implementation; override this API if this capability is supported. */ + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ + } + + /** + * Determine the updates-enabled status (notification/indication) for the current connection from a characteristic's CCCD. + * + * @param characteristic + * The characteristic + * @param[out] enabledP + * Upon return, *enabledP is true if updates are enabled, else false. + * + * @return BLE_ERROR_NONE if the connection and handle are found. false otherwise. + */ + virtual ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP) { + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ + } + + /** + * Determine the connection-specific updates-enabled status (notification/indication) from a characteristic's CCCD. + * + * @param connectionHandle + * The connection handle + * @param[out] enabledP + * Upon return, *enabledP is true if updates are enabled, else false. + * + * @param characteristic + * The characteristic + * + * @return BLE_ERROR_NONE if the connection and handle are found. false otherwise. + */ + virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP) { + return BLE_ERROR_NOT_IMPLEMENTED; /* Requesting action from porter(s): override this API if this capability is supported. */ } /** @@ -267,21 +298,21 @@ class GattServer { } } - void handleEvent(GattServerEvents::gattEvent_e type, GattAttribute::Handle_t charHandle) { + void handleEvent(GattServerEvents::gattEvent_e type, GattAttribute::Handle_t attributeHandle) { switch (type) { case GattServerEvents::GATT_EVENT_UPDATES_ENABLED: if (updatesEnabledCallback) { - updatesEnabledCallback(charHandle); + updatesEnabledCallback(attributeHandle); } break; case GattServerEvents::GATT_EVENT_UPDATES_DISABLED: if (updatesDisabledCallback) { - updatesDisabledCallback(charHandle); + updatesDisabledCallback(attributeHandle); } break; case GattServerEvents::GATT_EVENT_CONFIRMATION_RECEIVED: if (confirmationReceivedCallback) { - confirmationReceivedCallback(charHandle); + confirmationReceivedCallback(attributeHandle); } break; default: diff --git a/ble/blecommon.h b/ble/blecommon.h index 1de64eb..b572f08 100644 --- a/ble/blecommon.h +++ b/ble/blecommon.h @@ -126,6 +126,9 @@ enum ble_error_t { BLE_ERROR_UNSPECIFIED = 9, /**< Unknown error. */ }; +/** @brief Default MTU size. */ +static const unsigned BLE_GATT_MTU_SIZE_DEFAULT = 23; + #ifdef __cplusplus } #endif diff --git a/ble/services/BatteryService.h b/ble/services/BatteryService.h index 6bc0723..b8ef8ec 100644 --- a/ble/services/BatteryService.h +++ b/ble/services/BatteryService.h @@ -53,7 +53,7 @@ class BatteryService { */ void updateBatteryLevel(uint8_t newLevel) { batteryLevel = newLevel; - ble.updateCharacteristicValue(batteryLevelCharacteristic.getValueAttribute().getHandle(), &batteryLevel, 1); + ble.gattServer().write(batteryLevelCharacteristic.getValueHandle(), &batteryLevel, 1); } protected: diff --git a/ble/services/HealthThermometerService.h b/ble/services/HealthThermometerService.h index 2afa1e5..063d5fc 100644 --- a/ble/services/HealthThermometerService.h +++ b/ble/services/HealthThermometerService.h @@ -73,7 +73,7 @@ class HealthThermometerService { void updateTemperature(float temperature) { if (ble.getGapState().connected) { valueBytes.updateTemperature(temperature); - ble.updateCharacteristicValue(tempMeasurement.getValueAttribute().getHandle(), valueBytes.getPointer(), sizeof(TemperatureValueBytes)); + ble.gattServer().write(tempMeasurement.getValueHandle(), valueBytes.getPointer(), sizeof(TemperatureValueBytes)); } } @@ -83,7 +83,7 @@ class HealthThermometerService { * new location value. */ void updateLocation(SensorLocation_t loc) { - ble.updateCharacteristicValue(tempLocation.getValueHandle(), reinterpret_cast(&loc), sizeof(uint8_t)); + ble.gattServer().write(tempLocation.getValueHandle(), reinterpret_cast(&loc), sizeof(uint8_t)); } private: @@ -140,7 +140,7 @@ class HealthThermometerService { uint8_t bytes[SIZEOF_VALUE_BYTES]; }; -private: +protected: BLE &ble; TemperatureValueBytes valueBytes; ReadOnlyGattCharacteristic tempMeasurement; diff --git a/ble/services/HeartRateService.h b/ble/services/HeartRateService.h index 606dc9f..14479c1 100644 --- a/ble/services/HeartRateService.h +++ b/ble/services/HeartRateService.h @@ -93,7 +93,7 @@ class HeartRateService { */ void updateHeartRate(uint8_t hrmCounter) { valueBytes.updateHeartRate(hrmCounter); - ble.updateCharacteristicValue(hrmRate.getValueAttribute().getHandle(), valueBytes.getPointer(), valueBytes.getNumValueBytes()); + ble.gattServer().write(hrmRate.getValueHandle(), valueBytes.getPointer(), valueBytes.getNumValueBytes()); } /** @@ -104,7 +104,7 @@ class HeartRateService { */ void updateHeartRate(uint16_t hrmCounter) { valueBytes.updateHeartRate(hrmCounter); - ble.updateCharacteristicValue(hrmRate.getValueAttribute().getHandle(), valueBytes.getPointer(), valueBytes.getNumValueBytes()); + ble.gattServer().write(hrmRate.getValueHandle(), valueBytes.getPointer(), valueBytes.getNumValueBytes()); } /** diff --git a/ble/services/LinkLossService.h b/ble/services/LinkLossService.h index 88a0e04..66a1ac2 100644 --- a/ble/services/LinkLossService.h +++ b/ble/services/LinkLossService.h @@ -73,7 +73,7 @@ class LinkLossService { alertLevel = newLevel; } -private: +protected: /** * This callback allows receiving updates to the AlertLevel Characteristic. * @@ -81,7 +81,7 @@ class LinkLossService { * Information about the characterisitc being updated. */ virtual void onDataWritten(const GattWriteCallbackParams *params) { - if (params->charHandle == alertLevelChar.getValueHandle()) { + if (params->handle == alertLevelChar.getValueHandle()) { alertLevel = *reinterpret_cast(params->data); } } diff --git a/ble/services/UARTService.h b/ble/services/UARTService.h index 64676fe..ef9914e 100644 --- a/ble/services/UARTService.h +++ b/ble/services/UARTService.h @@ -41,8 +41,7 @@ extern const uint8_t UARTServiceRXCharacteristicUUID[UUID::LENGTH_OF_LONG_UUID] class UARTService { public: /**< Maximum length of data (in bytes) that can be transmitted by the UART service module to the peer. */ - static const unsigned GATT_MTU_SIZE_DEFAULT = 23; - static const unsigned BLE_UART_SERVICE_MAX_DATA_LEN = (GATT_MTU_SIZE_DEFAULT - 3); + static const unsigned BLE_UART_SERVICE_MAX_DATA_LEN = (BLE_GATT_MTU_SIZE_DEFAULT - 3); public: @@ -118,7 +117,7 @@ class UARTService { if ((sendBufferIndex == BLE_UART_SERVICE_MAX_DATA_LEN) || // (sendBuffer[sendBufferIndex - 1] == '\r') || (sendBuffer[sendBufferIndex - 1] == '\n')) { - ble.updateCharacteristicValue(getRXCharacteristicHandle(), static_cast(sendBuffer), sendBufferIndex); + ble.gattServer().write(getRXCharacteristicHandle(), static_cast(sendBuffer), sendBufferIndex); sendBufferIndex = 0; } } @@ -160,7 +159,7 @@ class UARTService { return receiveBuffer[receiveBufferIndex++]; } -private: +protected: /** * This callback allows the UART service to receive updates to the * txCharacteristic. The application should forward the call to this @@ -178,7 +177,7 @@ class UARTService { } } -private: +protected: BLE &ble; uint8_t receiveBuffer[BLE_UART_SERVICE_MAX_DATA_LEN]; /**< The local buffer into which we receive diff --git a/ble/services/URIBeaconConfigService.h b/ble/services/URIBeaconConfigService.h index 4ceaa05..a7f82fe 100644 --- a/ble/services/URIBeaconConfigService.h +++ b/ble/services/URIBeaconConfigService.h @@ -267,7 +267,7 @@ class URIBeaconConfigService { paramsUpdated = true; } if (paramsUpdated) { - ble.updateCharacteristicValue(beaconPeriodChar.getValueHandle(), reinterpret_cast(¶ms.beaconPeriod), sizeof(uint16_t)); + ble.gattServer().write(beaconPeriodChar.getValueHandle(), reinterpret_cast(¶ms.beaconPeriod), sizeof(uint16_t)); } } } else if (handle == resetChar.getValueHandle()) { @@ -295,17 +295,17 @@ class URIBeaconConfigService { * change to the internal state of the service object. */ void updateCharacteristicValues(void) { - ble.updateCharacteristicValue(lockedStateChar.getValueHandle(), &lockedState, 1); - ble.updateCharacteristicValue(uriDataChar.getValueHandle(), params.uriData, params.uriDataLength); - ble.updateCharacteristicValue(flagsChar.getValueHandle(), ¶ms.flags, 1); - ble.updateCharacteristicValue(beaconPeriodChar.getValueHandle(), + ble.gattServer().write(lockedStateChar.getValueHandle(), &lockedState, 1); + ble.gattServer().write(uriDataChar.getValueHandle(), params.uriData, params.uriDataLength); + ble.gattServer().write(flagsChar.getValueHandle(), ¶ms.flags, 1); + ble.gattServer().write(beaconPeriodChar.getValueHandle(), reinterpret_cast(¶ms.beaconPeriod), sizeof(uint16_t)); - ble.updateCharacteristicValue(txPowerModeChar.getValueHandle(), ¶ms.txPowerMode, 1); - ble.updateCharacteristicValue(advPowerLevelsChar.getValueHandle(), + ble.gattServer().write(txPowerModeChar.getValueHandle(), ¶ms.txPowerMode, 1); + ble.gattServer().write(advPowerLevelsChar.getValueHandle(), reinterpret_cast(params.advPowerLevels), sizeof(PowerLevels_t)); } -private: +protected: void lockAuthorizationCallback(GattWriteAuthCallbackParams *authParams) { if (lockedState) { authParams->authorizationReply = AUTH_CALLBACK_REPLY_ATTERR_INSUF_AUTHORIZATION; diff --git a/ble/services/iBeaconService.h b/ble/services/iBeaconService.h index a3f6af7..6072575 100644 --- a/ble/services/iBeaconService.h +++ b/ble/services/iBeaconService.h @@ -66,7 +66,7 @@ class iBeaconService ble.setAdvertisingType(GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED); } -private: +protected: BLE &ble; Payload data; }; diff --git a/source/DiscoveredCharacteristic.cpp b/source/DiscoveredCharacteristic.cpp index 3991421..5d0133d 100644 --- a/source/DiscoveredCharacteristic.cpp +++ b/source/DiscoveredCharacteristic.cpp @@ -17,9 +17,6 @@ #include "ble/DiscoveredCharacteristic.h" #include "ble/GattClient.h" -GattClient::ReadCallback_t DiscoveredCharacteristic::onDataReadCallback; -GattClient::WriteCallback_t DiscoveredCharacteristic::onDataWriteCallback; - ble_error_t DiscoveredCharacteristic::read(uint16_t offset) const {