Define the BLE ACK wire channel and fixed flight budget
This commit is contained in:
1 parent
e194535b25
commit
be0dff7b2c
2 files changed
+13
-4
No files matched your search
@@ -1,6 +1,6 @@
|
||||
/* Внутренний платформенный контракт. Все вызовы/события в uasync, send/close не вызывают события синхронно.
|
||||
* ACCEPTED send копирует значение и даёт ровно один sent, либо closed отменяет все операции соединения.
|
||||
* DATA sent означает локальное завершение без ATT ACK, INVITE сохраняет Request/Indication.
|
||||
* DATA sent означает локальное завершение; INVITE/ACK используют Request/Indication.
|
||||
* close/destroy отменяют callbacks; transport создаёт идентификаторы, backend не хранит указатели core-link.
|
||||
* Реализации не создают неограниченных очередей: максимум одна операция send на link. */
|
||||
#ifndef VIBECHAT_BLE_BACKEND_H
|
||||
@@ -13,14 +13,17 @@ extern "C" {
|
||||
#define BLE_RX_UUID "f61a9021-4abc-45ac-98e1-761df4c13811"
|
||||
#define BLE_TX_UUID "f61a9022-4abc-45ac-98e1-761df4c13811"
|
||||
#define BLE_INVITE_UUID "f61a9023-4abc-45ac-98e1-761df4c13811"
|
||||
#define BLE_ACK_UUID "f61a9024-4abc-45ac-98e1-761df4c13811"
|
||||
#define BLE_VALUE_MAX 512
|
||||
/* Wire-каналы backend; ACK не является прикладным каналом ble_channel. */
|
||||
enum ble_wire_channel { BLE_WIRE_DATA, BLE_WIRE_INVITE, BLE_WIRE_ACK, BLE_WIRE_COUNT };
|
||||
struct ble_backend;
|
||||
struct ble_backend* ble_backend_create(struct ble_transport* owner, struct UASYNC* ua, const struct ble_config* config);
|
||||
void ble_backend_destroy(struct ble_backend* backend);
|
||||
int ble_backend_advertise(struct ble_backend* backend, const uint8_t* data, size_t len);
|
||||
int ble_backend_connect(struct ble_backend* backend, ble_link_id id, const struct ble_endpoint* endpoint);
|
||||
void ble_backend_close(struct ble_backend* backend, ble_link_id id);
|
||||
int ble_backend_send(struct ble_backend* backend, ble_link_id id, enum ble_channel channel, const uint8_t* data, size_t len);
|
||||
int ble_backend_send(struct ble_backend* backend, ble_link_id id, enum ble_wire_channel channel, const uint8_t* data, size_t len);
|
||||
/* События backend. incoming вызывается до любых других событий нового входящего link; 0 = лимит/отказ. */
|
||||
ble_link_id ble_backend_incoming(struct ble_transport* owner, const struct ble_endpoint* endpoint);
|
||||
void ble_backend_status(struct ble_transport* owner, int ready, const char* reason);
|
||||
@@ -28,7 +31,7 @@ void ble_backend_advertising(struct ble_transport* owner, enum ble_state state,
|
||||
void ble_backend_broadcast(struct ble_transport* owner, const struct ble_endpoint* endpoint,
|
||||
const uint8_t* data, size_t len, int rssi);
|
||||
void ble_backend_opened(struct ble_transport* owner, ble_link_id id, unsigned int mtu);
|
||||
void ble_backend_received(struct ble_transport* owner, ble_link_id id, enum ble_channel channel, const uint8_t* data, size_t len);
|
||||
void ble_backend_received(struct ble_transport* owner, ble_link_id id, enum ble_wire_channel channel, const uint8_t* data, size_t len);
|
||||
void ble_backend_sent(struct ble_transport* owner, ble_link_id id, int success);
|
||||
void ble_backend_closed(struct ble_transport* owner, ble_link_id id, const char* reason);
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
* Объявление — повторяемые ОС байты, не надёжная датаграмма. node_id в HELLO не аутентифицирован.
|
||||
* Один сервис обслуживает независимые соединения; данные — непрозрачные кадры 1..1500 байт.
|
||||
* Целые кадры находятся в ll_queue. DATA: Write Without Response/Notification; INVITE: Request/Indication.
|
||||
* Собственных ретрансляций нет; доставка DATA подтверждается потребителем (ETCP).
|
||||
* DATA имеет накопительный ACK GATT-фрагментов: ограничивает очередь ОС, без собственных ретрансляций.
|
||||
* Доставку целых DATA подтверждает потребитель (ETCP); ACK не является подтверждением приложения.
|
||||
* Диагностика: discovery (BLE-префикс). NULL validate разрешает запрос, как и начальная политика GUI. */
|
||||
#ifndef VIBECHAT_BLE_TRANSPORT_H
|
||||
#define VIBECHAT_BLE_TRANSPORT_H
|
||||
@@ -18,6 +19,11 @@ extern "C" {
|
||||
#define BLE_ENDPOINT_MAX 256
|
||||
#define BLE_LINKS_MAX 16
|
||||
#define BLE_QUEUE_MAX 64
|
||||
/* Расчётная скорость фиксирована; окно включает DATA GATT-values с заголовками. */
|
||||
#define BLE_TX_RATE_BITS 2000000u
|
||||
#define BLE_TX_WINDOW_MS 50u
|
||||
#define BLE_TX_WINDOW_BYTES (BLE_TX_RATE_BITS / 8u * BLE_TX_WINDOW_MS / 1000u)
|
||||
#define BLE_ACK_INTERVAL_US 15000u
|
||||
struct ble_transport;
|
||||
struct UASYNC;
|
||||
typedef uint64_t ble_link_id;
|
||||
|
||||
Reference in new issue
Block a user