phyphox BLE
Plot your Arduino's data in the phyphox app and control the board from the phone
Loading...
Searching...
No Matches
Transport.h
Go to the documentation of this file.
1// The transport interface: everything the core needs from a BLE stack, and nothing more.
2//
3// One implementation per BLE *library* (not per chip or stack): ArduinoBLE (covers
4// STM32duinoBLE), the ESP32 core BLE library (covers Bluedroid and NimBLE variants), and the
5// NINA-B31 serial AT protocol. The core never includes a BLE header; a transport never
6// generates XML or interprets channel values. Keeping this boundary thin is what stops the 1.x
7// backend drift from coming back.
8#ifndef PHYPHOX_BLE_TRANSPORT_H
9#define PHYPHOX_BLE_TRANSPORT_H
10
11#include <stdint.h>
12#include <stddef.h>
13#include "../core/Config.h"
14
15namespace phyphox {
16
22
23struct CharId {
25 uint8_t index;
26};
27
29struct GattLayout {
30 const char* deviceName;
31 uint8_t inputChannels;
33 uint8_t sensors;
34 const uint8_t* sensorValueSize;
36 uint16_t dataValueSize;
37};
38
41public:
42 virtual ~TransportListener() {}
43 virtual void onConnect() = 0;
44 virtual void onDisconnect() = 0;
47 virtual void onSubscribe(CharId id, bool enabled) = 0;
49 virtual void onWrite(CharId id, const uint8_t* data, uint16_t len) = 0;
52 virtual void onNotifyStatus(CharId id, bool accepted) = 0;
56 virtual void pump() = 0;
57};
58
59class Transport {
60public:
61 virtual ~Transport() {}
63 virtual bool begin(const GattLayout& layout, TransportListener& listener) = 0;
68 virtual bool notify(CharId id, const uint8_t* data, uint16_t len) = 0;
71 virtual bool asyncNotifyStatus() const { return false; }
73 virtual void setValue(CharId id, const uint8_t* data, uint16_t len) = 0;
74 virtual bool connected() const = 0;
76 virtual uint16_t mtuPayload() const = 0;
78 virtual void requestMtu(uint16_t payload) { (void)payload; }
82 virtual void requestConnectionParameters(uint16_t minInterval, uint16_t maxInterval,
83 uint16_t latency, uint16_t timeout) {
84 (void)minInterval; (void)maxInterval; (void)latency; (void)timeout;
85 }
88 virtual void poll() = 0;
92 virtual bool drivesTransfer() const { return false; }
93 virtual void restartAdvertising() = 0;
94 virtual const char* name() const = 0;
95};
96
97} // namespace phyphox
98
99#endif
Callbacks from the transport into the core (implemented by Server).
Definition Transport.h:40
virtual void pump()=0
Drive the transfer: send what is due.
virtual void onConnect()=0
virtual void onSubscribe(CharId id, bool enabled)=0
The central enabled/disabled notifications on id (only CH_EXPERIMENT and CH_DATA are notifiable).
virtual void onDisconnect()=0
virtual ~TransportListener()
Definition Transport.h:42
virtual void onWrite(CharId id, const uint8_t *data, uint16_t len)=0
The central wrote len bytes to id.
virtual void onNotifyStatus(CharId id, bool accepted)=0
Asynchronous verdict on the last notify() for stacks that report it later.
Definition Transport.h:59
virtual bool asyncNotifyStatus() const
True if the verdict on notify() arrives later through onNotifyStatus() (ESP32); false if notify()'s r...
Definition Transport.h:71
virtual bool connected() const =0
virtual bool drivesTransfer() const
True if the transport calls listener.pump() from a task of its own, so the core must not also pump fr...
Definition Transport.h:92
virtual const char * name() const =0
"ArduinoBLE", "ESP32", "NINA-B31" — for printXML/debug
virtual uint16_t mtuPayload() const =0
The negotiated MTU payload (ATT_MTU − 3), or PHYPHOX_BLE_DEFAULT_MTU.
virtual bool notify(CharId id, const uint8_t *data, uint16_t len)=0
Send a notification.
virtual void poll()=0
Give the stack CPU time.
virtual void setValue(CharId id, const uint8_t *data, uint16_t len)=0
Set a characteristic's value without notifying (initial values, the legacy config).
virtual void requestMtu(uint16_t payload)
Ask the stack for an MTU before connecting (ESP32 only today; others ignore).
Definition Transport.h:78
virtual void requestConnectionParameters(uint16_t minInterval, uint16_t maxInterval, uint16_t latency, uint16_t timeout)
Ask the central for connection parameters (units of 1.25 ms / 10 ms).
Definition Transport.h:82
virtual bool begin(const GattLayout &layout, TransportListener &listener)=0
Create services and characteristics, start advertising the experiment service.
virtual void restartAdvertising()=0
virtual ~Transport()
Definition Transport.h:61
Definition ChannelStore.h:11
CharKind
The characteristics a phyphox device exposes.
Definition Transport.h:21
@ CH_SENSOR
Definition Transport.h:21
@ CH_INPUT
Definition Transport.h:21
@ CH_EVENT
Definition Transport.h:21
@ CH_DATA
Definition Transport.h:21
@ CH_CONTROL
Definition Transport.h:21
@ CH_EXPERIMENT
Definition Transport.h:21
@ CH_LEGACY_CONFIG
Definition Transport.h:21
Definition Transport.h:23
uint8_t index
channel or sensor number for CH_INPUT / CH_SENSOR, else 0
Definition Transport.h:25
CharKind kind
Definition Transport.h:24
What the core asks the transport to create at begin().
Definition Transport.h:29
uint8_t inputChannels
highest input channel (0 in user-XML mode)
Definition Transport.h:31
uint32_t inputChannelMask
bit k set: create characteristic cddf20kk (sensor-fed channels have none)
Definition Transport.h:32
const uint8_t * sensorValueSize
bytes each sensor characteristic holds (sensors entries)
Definition Transport.h:34
const char * deviceName
Definition Transport.h:30
uint16_t dataValueSize
bytes of the data characteristic value (MTU payload)
Definition Transport.h:36
uint8_t sensors
characteristics cddf3001 … cddf30ss
Definition Transport.h:33
bool legacyConfig
also create cddf1003 (20 bytes) — user-XML mode
Definition Transport.h:35