/** * @file app_ble_proto.h * @brief BLE frame protocol frontend (over the rdtss write/notify * characteristics): frame reassembly, CLI request/response transport, * device info query and OTA frame dispatch (see docs/ble_protocol.md). * * Frame format (little endian): * [0] SOF = 0xCA * [1] TYPE * [2] SEQ * [3:4] LEN (payload length, LE) * [5..] PAYLOAD * [end-2..end] CRC16-CCITT (init 0xFFFF, poly 0x1021), LE, over TYPE..PAYLOAD * * All functions run in the BLE schedule task context only. */ #ifndef __APP_BLE_PROTO_H__ #define __APP_BLE_PROTO_H__ #ifdef __cplusplus extern "C" { #endif #include /* Frame type / OTA status constants moved to the shared wire header * (Boot/src/ota_wire.h, also compiled into the bootloader download mode) */ #include "ota_wire.h" /** * @brief Reset the protocol state machine. */ void app_ble_proto_init(void); /** * @brief Build one frame and push it into the ble_up uplink ring. * Used by the CLI frontend and by the OTA/INFO handlers to answer. * @return 0 on success, -1 when the frame exceeds the max frame size. */ int app_ble_proto_send_frame(uint8_t type, uint8_t seq, const uint8_t* payload, uint16_t len); /** * @brief Feed a received BLE write chunk into the frame reassembler. * Called from the rdtss write indication handler (BLE task context). */ void app_ble_proto_rx_bytes(const uint8_t* data, uint16_t len); /** * @brief BLE disconnect hook: drop half-received frame and uplink buffer. */ void app_ble_proto_on_disconnect(void); /** * @brief BLE traffic log switch (default off). When on, every complete * RX/TX frame is hex-dumped to the UART via printf, and BLE * connect/disconnect events are printed too. */ void app_ble_proto_log_set(uint8_t on); uint8_t app_ble_proto_log_get(void); /** * @brief Execute one raw CLI command line written to the CLI read/write * characteristic (no frame, no notify). The command output text is * captured into an internal buffer for app_ble_proto_cli_rsp(). * Called from the rdtss write indication handler (BLE task context). */ void app_ble_proto_cli_exec(const uint8_t* cmd, uint16_t len); /** * @brief Serve the next chunk of the last app_ble_proto_cli_exec() output * (one call per ATT read of the CLI read/write characteristic). * Chunks are <= att_mtu-2; a 0-length return marks end of response. */ const uint8_t* app_ble_proto_cli_rsp(uint16_t* out_len); #ifdef __cplusplus } #endif #endif /* __APP_BLE_PROTO_H__ */