BLE-Gamepad-Client 0.3.2
Loading...
Searching...
No Matches
BLEIncomingSignal.h
1#pragma once
2
3#include <NimBLEDevice.h>
4#include <functional>
5#include "BLEBatteryEvent.h"
6#include "BLEControlsEvent.h"
7#include "BLEIncomingSignalAdapter.h"
8
9template <typename T>
10using OnUpdate = std::function<void(T& value)>;
11
12template <typename T>
13class BLEIncomingSignal {
14 public:
15 struct Store {
16 T event;
17 };
18 BLEIncomingSignal();
19 ~BLEIncomingSignal() = default;
20 bool init(NimBLEAddress address, BLEIncomingSignalAdapter<T>& adapter);
21 bool deinit(bool disconnected);
22 bool isInitialized() const;
23 void read(T& out);
24 void onUpdate(const OnUpdate<T>& onUpdate);
25
26 private:
27 static void _callConsumerFn(void* pvParameters);
28 void _handleNotify(NimBLERemoteCharacteristic* pChar, uint8_t* pData, size_t length, bool isNotify);
29 bool _initialized;
30 OnUpdate<T> _onUpdate;
31 bool _onUpdateSet;
32 BLESignalDecoder<T> _decoder;
33 NimBLEAddress _address;
34 NimBLERemoteCharacteristic* _pChar;
35 TaskHandle_t _callOnUpdateTask;
36 SemaphoreHandle_t _storeMutex;
37 Store _store;
38};
39
42
43using BLEControlsSignal = BLEIncomingSignal<BLEControlsEvent>;
44using BLEBatterySignal = BLEIncomingSignal<BLEBatteryEvent>;
Definition BLEIncomingSignal.h:13
Definition BLEIncomingSignalAdapter.h:12
Definition BLEIncomingSignal.h:15