73 lines
2.5 KiB
C
73 lines
2.5 KiB
C
/**
|
|
* @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 <stdint.h>
|
|
|
|
/* Frame types */
|
|
#define BLE_FRAME_CLI_REQ 0x01 /* phone -> device: one command line */
|
|
#define BLE_FRAME_CLI_RSP 0x02 /* device -> phone: response text chunk */
|
|
#define BLE_FRAME_CLI_RSP_END 0x03 /* device -> phone: {status u8} */
|
|
#define BLE_FRAME_OTA_BEGIN 0x10 /* phone -> device: {size, crc32, version} */
|
|
#define BLE_FRAME_OTA_DATA 0x11 /* phone -> device: {offset, data...} */
|
|
#define BLE_FRAME_OTA_END 0x12 /* phone -> device: {crc32} */
|
|
#define BLE_FRAME_OTA_RSP 0x1F /* device -> phone: {cmd, status, offset} */
|
|
#define BLE_FRAME_INFO_QUERY 0x20 /* phone -> device: {item_id}*n (empty/0xFF = all) */
|
|
#define BLE_FRAME_INFO_RSP 0x21 /* device -> phone: TLV {id, len, value}*n */
|
|
|
|
/* OTA_RSP / generic status codes */
|
|
#define BLE_OTA_ST_OK 0
|
|
#define BLE_OTA_ST_BAD_FRAME 1
|
|
#define BLE_OTA_ST_BAD_STATE 2 /* bad state / bad offset sequence */
|
|
#define BLE_OTA_ST_SIZE_TOO_BIG 3
|
|
#define BLE_OTA_ST_CRC_FAIL 4
|
|
#define BLE_OTA_ST_FLASH_FAIL 5
|
|
|
|
/**
|
|
* @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);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __APP_BLE_PROTO_H__ */
|