mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			BLE - Devirtualize ble::generic::GattClient
GenericGattClient is parametized by two types: - The template of the PalGattClient - The SigningMonitorEventHandler Note that the PalGattClient template must be of the form PalGattClient<EventHandler>. The event handler being the GenericGattClient.pull/9727/head
							parent
							
								
									39e938bf8e
								
							
						
					
					
						commit
						b135074821
					
				| 
						 | 
				
			
			@ -32,33 +32,29 @@ namespace generic {
 | 
			
		|||
 * It requires a pal::GattClient injected at construction site.
 | 
			
		||||
 * @attention: Not part of the public interface of BLE API.
 | 
			
		||||
 */
 | 
			
		||||
class GenericGattClient : public GattClient,
 | 
			
		||||
                          public pal::SigningEventMonitor,
 | 
			
		||||
                          public pal::GattClient::EventHandler {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
class GenericGattClient :
 | 
			
		||||
    public interface::GattClient<GenericGattClient<TPalGattClient, SigningMonitorEventHandler> >,
 | 
			
		||||
    public pal::SigningEventMonitor<GenericGattClient<TPalGattClient, SigningMonitorEventHandler>, SigningMonitorEventHandler>,
 | 
			
		||||
    public pal::GattClientEventHandler<GenericGattClient<TPalGattClient, SigningMonitorEventHandler> > {
 | 
			
		||||
 | 
			
		||||
    using interface::GattClient<GenericGattClient<TPalGattClient, SigningMonitorEventHandler> >::eventHandler;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @see pal::GattClient::EventHandler::on_att_mtu_change
 | 
			
		||||
     */
 | 
			
		||||
    virtual void on_att_mtu_change(
 | 
			
		||||
        ble::connection_handle_t connection_handle,
 | 
			
		||||
        uint16_t att_mtu_size
 | 
			
		||||
    )
 | 
			
		||||
    {
 | 
			
		||||
        if (eventHandler) {
 | 
			
		||||
            eventHandler->onAttMtuChange(connection_handle, att_mtu_size);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    typedef interface::GattClient<GenericGattClient<TPalGattClient, SigningMonitorEventHandler> > Base;
 | 
			
		||||
    typedef TPalGattClient<GenericGattClient> PalGattClient;
 | 
			
		||||
    typedef typename Base::WriteOp_t WriteOp_t;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a GenericGattClient from a pal::GattClient
 | 
			
		||||
     */
 | 
			
		||||
    GenericGattClient(pal::GattClient* pal_client);
 | 
			
		||||
    GenericGattClient(PalGattClient* pal_client);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @see GattClient::launchServiceDiscovery
 | 
			
		||||
     */
 | 
			
		||||
    virtual ble_error_t launchServiceDiscovery(
 | 
			
		||||
    ble_error_t launchServiceDiscovery_(
 | 
			
		||||
        connection_handle_t connection_handle,
 | 
			
		||||
        ServiceDiscovery::ServiceCallback_t service_callback,
 | 
			
		||||
        ServiceDiscovery::CharacteristicCallback_t characteristic_callback,
 | 
			
		||||
| 
						 | 
				
			
			@ -69,17 +65,17 @@ public:
 | 
			
		|||
	/**
 | 
			
		||||
	 * @see GattClient::isServiceDiscoveryActive
 | 
			
		||||
	 */
 | 
			
		||||
    virtual bool isServiceDiscoveryActive() const;
 | 
			
		||||
    bool isServiceDiscoveryActive_() const;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @see GattClient::terminateServiceDiscovery
 | 
			
		||||
	 */
 | 
			
		||||
    virtual void terminateServiceDiscovery();
 | 
			
		||||
    void terminateServiceDiscovery_();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @see GattClient::read
 | 
			
		||||
	 */
 | 
			
		||||
    virtual ble_error_t read(
 | 
			
		||||
    ble_error_t read_(
 | 
			
		||||
        connection_handle_t connection_handle,
 | 
			
		||||
        GattAttribute::Handle_t attribute_handle,
 | 
			
		||||
        uint16_t offset
 | 
			
		||||
| 
						 | 
				
			
			@ -88,8 +84,8 @@ public:
 | 
			
		|||
	/**
 | 
			
		||||
	 * @see GattClient::write
 | 
			
		||||
	 */
 | 
			
		||||
    virtual ble_error_t write(
 | 
			
		||||
        GattClient::WriteOp_t cmd,
 | 
			
		||||
    ble_error_t write_(
 | 
			
		||||
        WriteOp_t cmd,
 | 
			
		||||
        connection_handle_t connection_handle,
 | 
			
		||||
        GattAttribute::Handle_t attribute_handle,
 | 
			
		||||
        size_t length,
 | 
			
		||||
| 
						 | 
				
			
			@ -99,14 +95,14 @@ public:
 | 
			
		|||
	/**
 | 
			
		||||
	 * @see GattClient::onServiceDiscoveryTermination
 | 
			
		||||
	 */
 | 
			
		||||
    virtual void onServiceDiscoveryTermination(
 | 
			
		||||
    void onServiceDiscoveryTermination_(
 | 
			
		||||
        ServiceDiscovery::TerminationCallback_t callback
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @see GattClient::discoverCharacteristicDescriptors
 | 
			
		||||
	 */
 | 
			
		||||
    virtual ble_error_t discoverCharacteristicDescriptors(
 | 
			
		||||
    ble_error_t discoverCharacteristicDescriptors_(
 | 
			
		||||
        const DiscoveredCharacteristic& characteristic,
 | 
			
		||||
        const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
 | 
			
		||||
        const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback
 | 
			
		||||
| 
						 | 
				
			
			@ -115,41 +111,41 @@ public:
 | 
			
		|||
	/**
 | 
			
		||||
	 * @see GattClient::isCharacteristicDescriptorDiscoveryActive
 | 
			
		||||
	 */
 | 
			
		||||
    virtual bool isCharacteristicDescriptorDiscoveryActive(
 | 
			
		||||
    bool isCharacteristicDescriptorDiscoveryActive_(
 | 
			
		||||
        const DiscoveredCharacteristic& characteristic
 | 
			
		||||
    ) const;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @see GattClient::terminateCharacteristicDescriptorDiscovery
 | 
			
		||||
	 */
 | 
			
		||||
    virtual void terminateCharacteristicDescriptorDiscovery(
 | 
			
		||||
    void terminateCharacteristicDescriptorDiscovery_(
 | 
			
		||||
        const DiscoveredCharacteristic& characteristic
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @see GattClient::negotiateAttMtu
 | 
			
		||||
     */
 | 
			
		||||
    virtual ble_error_t negotiateAttMtu(
 | 
			
		||||
    ble_error_t negotiateAttMtu_(
 | 
			
		||||
        connection_handle_t connection
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @see GattClient::reset
 | 
			
		||||
	 */
 | 
			
		||||
    virtual ble_error_t reset(void);
 | 
			
		||||
    ble_error_t reset_(void);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @see ble::pal::SigningEventMonitor::set_signing_event_handler
 | 
			
		||||
     */
 | 
			
		||||
    virtual void set_signing_event_handler(pal::SigningEventMonitor::EventHandler *signing_event_handler);
 | 
			
		||||
    void set_signing_event_handler_(SigningMonitorEventHandler *signing_event_handler);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  Return the user registered event handler.
 | 
			
		||||
     * @return User registered event handler or NULL if none is present.
 | 
			
		||||
     * @see pal::GattClient::EventHandler::on_att_mtu_change
 | 
			
		||||
     */
 | 
			
		||||
    ::GattClient::EventHandler* getEventHandler() {
 | 
			
		||||
        return eventHandler;
 | 
			
		||||
    }
 | 
			
		||||
    void on_att_mtu_change_(
 | 
			
		||||
        ble::connection_handle_t connection_handle,
 | 
			
		||||
        uint16_t att_mtu_size
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    struct ProcedureControlBlock;
 | 
			
		||||
| 
						 | 
				
			
			@ -171,14 +167,14 @@ private:
 | 
			
		|||
 | 
			
		||||
    uint16_t get_mtu(connection_handle_t connection) const;
 | 
			
		||||
 | 
			
		||||
    pal::GattClient* const _pal_client;
 | 
			
		||||
    PalGattClient* const _pal_client;
 | 
			
		||||
    ServiceDiscovery::TerminationCallback_t _termination_callback;
 | 
			
		||||
    pal::SigningEventMonitor::EventHandler* _signing_event_handler;
 | 
			
		||||
    SigningMonitorEventHandler* _signing_event_handler;
 | 
			
		||||
    mutable ProcedureControlBlock* control_blocks;
 | 
			
		||||
    bool _is_reseting;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
} // generic
 | 
			
		||||
} // ble
 | 
			
		||||
 | 
			
		||||
#endif /* MBED_BLE_GENERIC_GATT_CLIENT */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,12 +17,13 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "ble/pal/AttServerMessage.h"
 | 
			
		||||
#include "ble/GattClient.h"
 | 
			
		||||
#include <ble/DiscoveredService.h>
 | 
			
		||||
#include <ble/DiscoveredCharacteristic.h>
 | 
			
		||||
#include "ble/generic/GenericGattClient.h"
 | 
			
		||||
#include "ble/blecommon.h"
 | 
			
		||||
#include "ble/BLEInstanceBase.h"
 | 
			
		||||
#include "ble/generic/GenericSecurityManager.h"
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
 | 
			
		||||
using ble::pal::AttServerMessage;
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +63,8 @@ enum procedure_type_t {
 | 
			
		|||
/*
 | 
			
		||||
 * Base class for a procedure control block
 | 
			
		||||
 */
 | 
			
		||||
struct GenericGattClient::ProcedureControlBlock {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
struct GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::ProcedureControlBlock {
 | 
			
		||||
	/*
 | 
			
		||||
	 * Base constructor for procedure control block.
 | 
			
		||||
	 */
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +97,10 @@ struct GenericGattClient::ProcedureControlBlock {
 | 
			
		|||
/*
 | 
			
		||||
 * Procedure control block for the discovery process.
 | 
			
		||||
 */
 | 
			
		||||
struct GenericGattClient::DiscoveryControlBlock : public ProcedureControlBlock {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
struct GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::DiscoveryControlBlock : public ProcedureControlBlock {
 | 
			
		||||
	using ProcedureControlBlock::connection_handle;
 | 
			
		||||
 | 
			
		||||
	DiscoveryControlBlock(
 | 
			
		||||
		connection_handle_t handle,
 | 
			
		||||
		ServiceDiscovery::ServiceCallback_t service_callback,
 | 
			
		||||
| 
						 | 
				
			
			@ -426,7 +431,10 @@ struct GenericGattClient::DiscoveryControlBlock : public ProcedureControlBlock {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct GenericGattClient::ReadControlBlock : public ProcedureControlBlock {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
struct GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::ReadControlBlock : public ProcedureControlBlock {
 | 
			
		||||
	using ProcedureControlBlock::connection_handle;
 | 
			
		||||
 | 
			
		||||
	ReadControlBlock(
 | 
			
		||||
		connection_handle_t connection_handle, uint16_t attribute_handle, uint16_t offset
 | 
			
		||||
	) : ProcedureControlBlock(READ_PROCEDURE, connection_handle),
 | 
			
		||||
| 
						 | 
				
			
			@ -623,7 +631,10 @@ struct GenericGattClient::ReadControlBlock : public ProcedureControlBlock {
 | 
			
		|||
/*
 | 
			
		||||
 * Control block for the write process
 | 
			
		||||
 */
 | 
			
		||||
struct GenericGattClient::WriteControlBlock : public ProcedureControlBlock {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
struct GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::WriteControlBlock : public ProcedureControlBlock {
 | 
			
		||||
	using ProcedureControlBlock::connection_handle;
 | 
			
		||||
 | 
			
		||||
	WriteControlBlock(
 | 
			
		||||
		connection_handle_t connection_handle, uint16_t attribute_handle,
 | 
			
		||||
		uint8_t* data, uint16_t len
 | 
			
		||||
| 
						 | 
				
			
			@ -826,7 +837,10 @@ struct GenericGattClient::WriteControlBlock : public ProcedureControlBlock {
 | 
			
		|||
/*
 | 
			
		||||
 * Control block for the descriptor discovery process
 | 
			
		||||
 */
 | 
			
		||||
struct GenericGattClient::DescriptorDiscoveryControlBlock : public ProcedureControlBlock {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
struct GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::DescriptorDiscoveryControlBlock : public ProcedureControlBlock {
 | 
			
		||||
	using ProcedureControlBlock::connection_handle;
 | 
			
		||||
 | 
			
		||||
	DescriptorDiscoveryControlBlock(
 | 
			
		||||
		const DiscoveredCharacteristic& characteristic,
 | 
			
		||||
		const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
 | 
			
		||||
| 
						 | 
				
			
			@ -933,12 +947,12 @@ struct GenericGattClient::DescriptorDiscoveryControlBlock : public ProcedureCont
 | 
			
		|||
	bool done;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GenericGattClient::GenericGattClient(pal::GattClient* pal_client) :
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::GenericGattClient(PalGattClient* pal_client) :
 | 
			
		||||
	_pal_client(pal_client),
 | 
			
		||||
	_termination_callback(),
 | 
			
		||||
	_signing_event_handler(NULL),
 | 
			
		||||
	 control_blocks(NULL),
 | 
			
		||||
	control_blocks(NULL),
 | 
			
		||||
	_is_reseting(false) {
 | 
			
		||||
	_pal_client->when_server_message_received(
 | 
			
		||||
		mbed::callback(this, &GenericGattClient::on_server_message_received)
 | 
			
		||||
| 
						 | 
				
			
			@ -948,7 +962,8 @@ GenericGattClient::GenericGattClient(pal::GattClient* pal_client) :
 | 
			
		|||
	);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::launchServiceDiscovery(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::launchServiceDiscovery_(
 | 
			
		||||
	connection_handle_t connection_handle,
 | 
			
		||||
	ServiceDiscovery::ServiceCallback_t service_callback,
 | 
			
		||||
	ServiceDiscovery::CharacteristicCallback_t characteristic_callback,
 | 
			
		||||
| 
						 | 
				
			
			@ -1005,7 +1020,8 @@ ble_error_t GenericGattClient::launchServiceDiscovery(
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool GenericGattClient::isServiceDiscoveryActive() const {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
bool GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::isServiceDiscoveryActive_() const {
 | 
			
		||||
	ProcedureControlBlock* pcb = control_blocks;
 | 
			
		||||
 | 
			
		||||
	while (pcb) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1018,7 +1034,8 @@ bool GenericGattClient::isServiceDiscoveryActive() const {
 | 
			
		|||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::terminateServiceDiscovery()
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::terminateServiceDiscovery_()
 | 
			
		||||
{
 | 
			
		||||
	ProcedureControlBlock* pcb = control_blocks;
 | 
			
		||||
	while (pcb) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1029,7 +1046,8 @@ void GenericGattClient::terminateServiceDiscovery()
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::read(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::read_(
 | 
			
		||||
	connection_handle_t connection_handle,
 | 
			
		||||
	GattAttribute::Handle_t attribute_handle,
 | 
			
		||||
	uint16_t offset) const
 | 
			
		||||
| 
						 | 
				
			
			@ -1071,8 +1089,9 @@ ble_error_t GenericGattClient::read(
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::write(
 | 
			
		||||
	GattClient::WriteOp_t cmd,
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::write_(
 | 
			
		||||
	WriteOp_t cmd,
 | 
			
		||||
	connection_handle_t connection_handle,
 | 
			
		||||
	GattAttribute::Handle_t attribute_handle,
 | 
			
		||||
	size_t length,
 | 
			
		||||
| 
						 | 
				
			
			@ -1086,8 +1105,9 @@ ble_error_t GenericGattClient::write(
 | 
			
		|||
    uint16_t mtu = get_mtu(connection_handle);
 | 
			
		||||
 | 
			
		||||
    /* if link is encrypted signed writes should be normal writes */
 | 
			
		||||
    if (cmd == GattClient::GATT_OP_SIGNED_WRITE_CMD) {
 | 
			
		||||
    if (cmd == Base::GATT_OP_SIGNED_WRITE_CMD) {
 | 
			
		||||
        ble::link_encryption_t encryption(ble::link_encryption_t::NOT_ENCRYPTED);
 | 
			
		||||
		// FIXME: use security manager or a template if applicable
 | 
			
		||||
        SecurityManager &sm = createBLEInstance()->getSecurityManager();
 | 
			
		||||
        ble_error_t status = sm.getLinkEncryption(connection_handle, &encryption);
 | 
			
		||||
        if (status == BLE_ERROR_NONE &&
 | 
			
		||||
| 
						 | 
				
			
			@ -1095,11 +1115,11 @@ ble_error_t GenericGattClient::write(
 | 
			
		|||
             encryption == link_encryption_t::ENCRYPTED_WITH_MITM ||
 | 
			
		||||
             encryption == link_encryption_t::ENCRYPTED_WITH_SC_AND_MITM)
 | 
			
		||||
        ) {
 | 
			
		||||
            cmd = GattClient::GATT_OP_WRITE_CMD;
 | 
			
		||||
			cmd = Base::GATT_OP_WRITE_CMD;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (cmd == GattClient::GATT_OP_WRITE_CMD) {
 | 
			
		||||
	if (cmd == Base::GATT_OP_WRITE_CMD) {
 | 
			
		||||
        if (length > (uint16_t) (mtu - WRITE_HEADER_LENGTH)) {
 | 
			
		||||
            return BLE_ERROR_PARAM_OUT_OF_RANGE;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,7 +1128,7 @@ ble_error_t GenericGattClient::write(
 | 
			
		|||
            attribute_handle,
 | 
			
		||||
            make_const_ArrayView(value, length)
 | 
			
		||||
        );
 | 
			
		||||
    } else if (cmd == GattClient::GATT_OP_SIGNED_WRITE_CMD) {
 | 
			
		||||
	} else if (cmd == Base::GATT_OP_SIGNED_WRITE_CMD) {
 | 
			
		||||
        if (length > (uint16_t) (mtu - WRITE_HEADER_LENGTH - CMAC_LENGTH - MAC_COUNTER_LENGTH)) {
 | 
			
		||||
            return BLE_ERROR_PARAM_OUT_OF_RANGE;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1173,13 +1193,15 @@ ble_error_t GenericGattClient::write(
 | 
			
		|||
    return BLE_ERROR_NOT_IMPLEMENTED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::onServiceDiscoveryTermination(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::onServiceDiscoveryTermination_(
 | 
			
		||||
	ServiceDiscovery::TerminationCallback_t callback
 | 
			
		||||
) {
 | 
			
		||||
	_termination_callback = callback;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::discoverCharacteristicDescriptors(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::discoverCharacteristicDescriptors_(
 | 
			
		||||
	const DiscoveredCharacteristic& characteristic,
 | 
			
		||||
	const CharacteristicDescriptorDiscovery::DiscoveryCallback_t& discoveryCallback,
 | 
			
		||||
	const CharacteristicDescriptorDiscovery::TerminationCallback_t& terminationCallback
 | 
			
		||||
| 
						 | 
				
			
			@ -1223,7 +1245,8 @@ ble_error_t GenericGattClient::discoverCharacteristicDescriptors(
 | 
			
		|||
	return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool GenericGattClient::isCharacteristicDescriptorDiscoveryActive(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
bool GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::isCharacteristicDescriptorDiscoveryActive_(
 | 
			
		||||
	const DiscoveredCharacteristic& characteristic
 | 
			
		||||
) const {
 | 
			
		||||
	ProcedureControlBlock* pcb = control_blocks;
 | 
			
		||||
| 
						 | 
				
			
			@ -1239,7 +1262,8 @@ bool GenericGattClient::isCharacteristicDescriptorDiscoveryActive(
 | 
			
		|||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::terminateCharacteristicDescriptorDiscovery(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::terminateCharacteristicDescriptorDiscovery_(
 | 
			
		||||
	const DiscoveredCharacteristic& characteristic
 | 
			
		||||
) {
 | 
			
		||||
	ProcedureControlBlock* pcb = control_blocks;
 | 
			
		||||
| 
						 | 
				
			
			@ -1259,13 +1283,17 @@ void GenericGattClient::terminateCharacteristicDescriptorDiscovery(
 | 
			
		|||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::negotiateAttMtu(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::negotiateAttMtu_(
 | 
			
		||||
    connection_handle_t connection
 | 
			
		||||
) {
 | 
			
		||||
    return _pal_client->exchange_mtu(connection);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ble_error_t GenericGattClient::reset(void) {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
ble_error_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::reset_(void) {
 | 
			
		||||
 | 
			
		||||
	Base::reset_();
 | 
			
		||||
 | 
			
		||||
	// _is_reseting prevent executions of new procedure while the instance resets.
 | 
			
		||||
	// otherwise new procedures can be launched from callbacks generated by the
 | 
			
		||||
| 
						 | 
				
			
			@ -1279,19 +1307,33 @@ ble_error_t GenericGattClient::reset(void) {
 | 
			
		|||
	return BLE_ERROR_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::set_signing_event_handler(
 | 
			
		||||
    pal::SigningEventMonitor::EventHandler *signing_event_handler
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::set_signing_event_handler_(
 | 
			
		||||
	SigningMonitorEventHandler *signing_event_handler
 | 
			
		||||
) {
 | 
			
		||||
    _signing_event_handler = signing_event_handler;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::on_termination(connection_handle_t connection_handle) {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_att_mtu_change_(
 | 
			
		||||
	ble::connection_handle_t connection_handle,
 | 
			
		||||
	uint16_t att_mtu_size
 | 
			
		||||
)
 | 
			
		||||
{
 | 
			
		||||
	if (eventHandler) {
 | 
			
		||||
		eventHandler->onAttMtuChange(connection_handle, att_mtu_size);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_termination(connection_handle_t connection_handle) {
 | 
			
		||||
	if (_termination_callback) {
 | 
			
		||||
		_termination_callback(connection_handle);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::on_server_message_received(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_server_message_received(
 | 
			
		||||
	connection_handle_t connection_handle,
 | 
			
		||||
	const AttServerMessage& message
 | 
			
		||||
) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1322,7 +1364,8 @@ void GenericGattClient::on_server_message_received(
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::on_server_response(
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_server_response(
 | 
			
		||||
	connection_handle_t connection,
 | 
			
		||||
	const AttServerMessage& message
 | 
			
		||||
) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1334,7 +1377,8 @@ void GenericGattClient::on_server_response(
 | 
			
		|||
	pcb->handle(this, message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::on_server_event(connection_handle_t connection, const AttServerMessage& message) {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_server_event(connection_handle_t connection, const AttServerMessage& message) {
 | 
			
		||||
	GattHVXCallbackParams callbacks_params = {
 | 
			
		||||
		(connection_handle_t) connection, 0
 | 
			
		||||
	};
 | 
			
		||||
| 
						 | 
				
			
			@ -1362,10 +1406,11 @@ void GenericGattClient::on_server_event(connection_handle_t connection, const At
 | 
			
		|||
			return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	processHVXEvent(&callbacks_params);
 | 
			
		||||
	Base::processHVXEvent(&callbacks_params);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::on_transaction_timeout(connection_handle_t connection) {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::on_transaction_timeout(connection_handle_t connection) {
 | 
			
		||||
	ProcedureControlBlock* pcb = get_control_block(connection);
 | 
			
		||||
	if (pcb == NULL) {
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -1374,7 +1419,9 @@ void GenericGattClient::on_transaction_timeout(connection_handle_t connection) {
 | 
			
		|||
	pcb->handle_timeout_error(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GenericGattClient::ProcedureControlBlock* GenericGattClient::get_control_block(connection_handle_t connection) {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
typename GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::ProcedureControlBlock*
 | 
			
		||||
GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::get_control_block(connection_handle_t connection) {
 | 
			
		||||
	ProcedureControlBlock* it = control_blocks;
 | 
			
		||||
	while (it && it->connection_handle != connection) {
 | 
			
		||||
		it = it->next;
 | 
			
		||||
| 
						 | 
				
			
			@ -1382,7 +1429,9 @@ GenericGattClient::ProcedureControlBlock* GenericGattClient::get_control_block(c
 | 
			
		|||
	return it;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const GenericGattClient::ProcedureControlBlock* GenericGattClient::get_control_block(connection_handle_t connection) const {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
const typename GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::ProcedureControlBlock*
 | 
			
		||||
GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::get_control_block(connection_handle_t connection) const {
 | 
			
		||||
	ProcedureControlBlock* it = control_blocks;
 | 
			
		||||
	while (it && it->connection_handle != connection) {
 | 
			
		||||
		it = it->next;
 | 
			
		||||
| 
						 | 
				
			
			@ -1390,7 +1439,8 @@ const GenericGattClient::ProcedureControlBlock* GenericGattClient::get_control_b
 | 
			
		|||
	return it;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::insert_control_block(ProcedureControlBlock* cb) const {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::insert_control_block(ProcedureControlBlock* cb) const {
 | 
			
		||||
	if (control_blocks == NULL) {
 | 
			
		||||
		control_blocks = cb;
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -1403,7 +1453,8 @@ void GenericGattClient::insert_control_block(ProcedureControlBlock* cb) const {
 | 
			
		|||
	current->next = cb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GenericGattClient::remove_control_block(ProcedureControlBlock* cb) const {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
void GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::remove_control_block(ProcedureControlBlock* cb) const {
 | 
			
		||||
	if (control_blocks == NULL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1426,7 +1477,8 @@ void GenericGattClient::remove_control_block(ProcedureControlBlock* cb) const {
 | 
			
		|||
	cb->next = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t GenericGattClient::get_mtu(connection_handle_t connection) const {
 | 
			
		||||
template<template<class> class TPalGattClient, class SigningMonitorEventHandler>
 | 
			
		||||
uint16_t GenericGattClient<TPalGattClient, SigningMonitorEventHandler>::get_mtu(connection_handle_t connection) const {
 | 
			
		||||
	uint16_t result = 23;
 | 
			
		||||
	if(_pal_client->get_mtu_size((connection_handle_t) connection, result) != BLE_ERROR_NONE) {
 | 
			
		||||
		result = 23;
 | 
			
		||||
| 
						 | 
				
			
			@ -1435,4 +1487,4 @@ uint16_t GenericGattClient::get_mtu(connection_handle_t connection) const {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
} // namespace pal
 | 
			
		||||
} // namespace ble
 | 
			
		||||
} // namespace ble
 | 
			
		||||
		Loading…
	
		Reference in New Issue