54 lines
2.1 KiB
C++
54 lines
2.1 KiB
C++
#pragma once
|
|||
|
|
|
||
|
|
#include "link_protocol.hpp"
|
||
|
|
#include <cstdint>
|
||
|
|
#include <functional>
|
||
|
|
|
||
|
|
namespace microbu::ble {
|
||
|
|
|
||
|
|
using Receiver = std::function<void(link::Bytes)>;
|
||
|
|
|
||
|
|
/// @brief A set of counters for tracking BLE message traffic.
|
||
|
|
struct Counters {
|
||
|
|
std::uint32_t rx_messages = 0;
|
||
|
|
std::uint32_t tx_messages = 0;
|
||
|
|
std::uint32_t tx_failed = 0;
|
||
|
|
std::uint32_t malformed = 0;
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Starts a simple, bonded BLE GATT peripheral on the NimBLE host.
|
||
|
|
* Uses structured ETSI C-ITS Station Service & Characteristics:
|
||
|
|
* Service: 0000C175-BA5E-4C17-8000-00805F9B34FB
|
||
|
|
* BTP-DATA.request: 0000C176-BA5E-4C17-8000-00805F9B34FB (Write, Authenticated/Encrypted)
|
||
|
|
* BTP-DATA.indication: 0000C177-BA5E-4C17-8000-00805F9B34FB (Notify, Authenticated/Encrypted)
|
||
|
|
* PoTi Fix Update: 0000C178-BA5E-4C17-8000-00805F9B34FB (Write, Authenticated/Encrypted)
|
||
|
|
* Station Status: 0000C179-BA5E-4C17-8000-00805F9B34FB (Read / Notify, Authenticated/Encrypted)
|
||
|
|
* SF-SAP Identity: 0000C17A-BA5E-4C17-8000-00805F9B34FB (Notify, Authenticated/Encrypted)
|
||
|
|
* Station Configure: 0000C17B-BA5E-4C17-8000-00805F9B34FB (Write, Authenticated/Encrypted)
|
||
|
|
* Result: 0000C17C-BA5E-4C17-8000-00805F9B34FB (Notify, Authenticated/Encrypted)
|
||
|
|
*
|
||
|
|
* Fixed passkey bonding: 123456.
|
||
|
|
* Single ATT message transmission/reception up to 512 bytes without fragmentation chunk delays.
|
||
|
|
* @param receiver Invoked with each decoded station-link message written by the phone.
|
||
|
|
* @return false if the NimBLE host or GATT service failed to start.
|
||
|
|
*/
|
||
|
|
bool start(Receiver receiver);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Sends one complete station-link message via GATT notification.
|
||
|
|
* Dispatches immediately without queuing delay.
|
||
|
|
* @param message Encoded station-link message to notify.
|
||
|
|
* @return false if not connected/subscribed or the notification could not be sent.
|
||
|
|
*/
|
||
|
|
bool write(const link::Bytes& message);
|
||
|
|
|
||
|
|
/// @return true if a phone is connected.
|
||
|
|
bool connected();
|
||
|
|
/// @return true if the phone has subscribed to notifications.
|
||
|
|
bool is_subscribed();
|
||
|
|
/// @return Current message/error counters.
|
||
|
|
Counters counters();
|
||
|
|
|
||
|
|
} // namespace microbu::ble
|