实际情况下,有两种情况:
- Master主动发起传输请求
- Slave主动发起传输请求,类似于文件下载流程
文件传输流程设计(文件传输)
字段定义
#define FILE_MODULE_MAX_LEN 16
typedef struct {uint8_t file_module[FILE_MODULE_MAX_LEN]; // 文件模块标识uint32_t file_size; // 文件长度uint16_t max_chunk_size; // 单次传输最大数据长度
} file_handshake_req_t;typedef struct {uint8_t error; // 错误编码uint16_t max_chunk_size; // 单次传输最大数据长度
} file_handshake_resp_t;typedef struct {uint32_t offset; // 当前包数据偏移uint32_t length; // 当前包数据长度uint8_t data[0]; // 当前包数据内容
} file_transmit_req_t;typedef struct {uint8_t error; // 错误编码uint32_t offset; // 当前包数据偏移uint16_t length; // 当前包数据长度
} file_transmit_resp_t;#define VERIFY_DATA_MAX_SIZE 16
typedef struct {uint8_t verify_data[VERIFY_DATA_MAX_SIZE]; // 校验数据(MD5或者其它)
} file_verify_req_t;typedef struct {uint8_t error; // 错误编码
} file_verify_resp_t;
流程图
文件传输流程设计(文件下载)
字段定义
#define FILE_MODULE_MAX_LEN 16
typedef struct {uint8_t file_module[FILE_MODULE_MAX_LEN]; // 文件模块标识uint16_t max_chunk_size; // 单次传输最大数据长度
} file_handshake_req_t;typedef struct {uint8_t error; // 错误编码uint32_t file_size; // 文件长度uint16_t max_chunk_size; // 单次传输最大数据长度
} file_handshake_resp_t;typedef struct {uint32_t offset; // 当前包数据偏移uint32_t length; // 当前包数据长度
} file_transmit_req_t;typedef struct {uint8_t error; // 错误编码uint32_t offset; // 当前包数据偏移uint16_t length; // 当前包数据长度uint8_t data[0]; // 当前包数据内容
} file_transmit_resp_t;#define VERIFY_DATA_MAX_SIZE 16
typedef struct {uint8_t verify_data[VERIFY_DATA_MAX_SIZE]; // 校验数据(MD5或者其它)
} file_verify_req_t;typedef struct {uint8_t error; // 错误编码
} file_verify_resp_t;