From e6d503f2374dc79590f30d16f5e105acfce2aa4d Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Mon, 8 Dec 2025 17:49:54 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E5=9B=9E?= =?utf8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../Service/http_file_download_client.c | 25 ++++++++++++++++++- .../include/http_file_download_client.h | 13 +++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/code/sdk/zhihui/4g/cat1Service/Service/http_file_download_client.c b/code/sdk/zhihui/4g/cat1Service/Service/http_file_download_client.c index 30b5b6c91..0064923d7 100644 --- a/code/sdk/zhihui/4g/cat1Service/Service/http_file_download_client.c +++ b/code/sdk/zhihui/4g/cat1Service/Service/http_file_download_client.c @@ -80,6 +80,7 @@ static int g_download_file_fd = -1; /* 下载文件句柄 */ static char g_download_file_path[512] = {0}; /* 下载文件路径 */ static uint32_t g_total_received_bytes = 0; /* 总接收字节数 */ static uint32_t g_total_received_packets = 0; /* 总接收包数 */ +static http_file_download_data_callback_t g_external_data_callback = NULL; /* 外部数据回调函数 */ /* 前向声明 */ extern void udp_send_msg_toCat1(uint8_t cmd, char *content); @@ -125,6 +126,15 @@ static int http_download_spi_data_callback(const uint8_t *data, uint32_t data_le cat1_print_info("HTTP download: Packet #%u, data_len=%u, total_bytes=%u (file not open)\n", packet_num, data_len, g_total_received_bytes); } + + // 调用外部注册的回调函数(如果已注册) + if (g_external_data_callback != NULL) { + int ret = g_external_data_callback(data, data_len, packet_num); + if (ret != 0) { + cat1_print_err("HTTP download: External callback returned error: %d\n", ret); + return ret; + } + } if(data_len!=SPI_PACKET_DATA_SIZE) { @@ -136,18 +146,30 @@ static int http_download_spi_data_callback(const uint8_t *data, uint32_t data_le /** * @brief 初始化HTTP文件下载服务 + * @param callback 外部数据回调函数指针,NULL表示不使用外部回调 * @return 0成功,-1失败 */ -int http_file_download_init(void) +int http_file_download_init(http_file_download_data_callback_t callback) { cat1_print_info("HTTP file download service: Initializing...\n"); // 检查是否已经初始化 if (g_download_complete_sem != NULL) { cat1_print_warning("HTTP file download service: Already initialized\n"); + // 如果已经初始化,仍然可以更新回调函数 + if (callback != NULL) { + g_external_data_callback = callback; + cat1_print_info("HTTP file download service: External callback updated\n"); + } return 0; } + // 保存外部回调函数 + g_external_data_callback = callback; + if (callback != NULL) { + cat1_print_info("HTTP file download service: External callback registered\n"); + } + // 创建下载完成信号量(初始值为0,用于阻塞等待) g_download_complete_sem = osSemaphoreNew(1, 0, NULL); if (g_download_complete_sem == NULL) { @@ -202,6 +224,7 @@ void http_file_download_deinit(void) g_download_state = HTTP_DOWNLOAD_STATE_IDLE; g_total_received_bytes = 0; g_total_received_packets = 0; + g_external_data_callback = NULL; /* 清除外部回调函数 */ cat1_print_info("HTTP file download service: Deinitialized successfully\n"); } diff --git a/code/sdk/zhihui/4g/cat1Service/include/http_file_download_client.h b/code/sdk/zhihui/4g/cat1Service/include/http_file_download_client.h index 6b720ce5e..0ee420125 100644 --- a/code/sdk/zhihui/4g/cat1Service/include/http_file_download_client.h +++ b/code/sdk/zhihui/4g/cat1Service/include/http_file_download_client.h @@ -23,11 +23,22 @@ typedef enum { HTTP_DOWNLOAD_STATE_ERROR /* 下载错误 */ } http_download_state_t; +/* 外部数据回调函数类型 */ +/** + * @brief HTTP下载数据接收回调函数类型 + * @param data 接收到的数据指针(不包含包头,仅数据部分) + * @param data_len 数据长度(从包头解析得到) + * @param packet_num 包序号(从1开始递增) + * @return 0表示成功,非0表示失败 + */ +typedef int (*http_file_download_data_callback_t)(const uint8_t *data, uint32_t data_len, uint32_t packet_num); + /** * @brief 初始化HTTP文件下载服务 + * @param callback 外部数据回调函数指针,NULL表示不使用外部回调 * @return 0成功,-1失败 */ -int http_file_download_init(void); +int http_file_download_init(http_file_download_data_callback_t callback); /** * @brief 反初始化HTTP文件下载服务 -- 2.17.1