ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);\r
}\r
}\r
+\r
+#include <string.h>\r
+#include <dirent.h>\r
+#include <sys/stat.h>\r
+#include <unistd.h>\r
+\r
+// 删除指定文件夹下的所有文件\r
+void AlipayModel::delete_all_files_in_folder(const char *folder_path) {\r
+ DIR *dir;\r
+ struct dirent *entry;\r
+ struct stat statbuf;\r
+ char path[1024];\r
+\r
+ if ((dir = opendir(folder_path)) == NULL) {\r
+ printf("无法打开文件夹");\r
+ return;\r
+ }\r
+\r
+ while ((entry = readdir(dir)) != NULL) {\r
+ if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {\r
+ continue;\r
+ }\r
+\r
+ snprintf(path, sizeof(path), "%s/%s", folder_path, entry->d_name);\r
+\r
+ if (stat(path, &statbuf) == -1) {\r
+ printf("无法获取文件状态");\r
+ continue;\r
+ }\r
+\r
+ if (S_ISREG(statbuf.st_mode)) {\r
+ if (unlink(path) == -1) {\r
+ printf("无法删除文件");\r
+ }\r
+ }\r
+ }\r
+\r
+ closedir(dir);\r
+ printf("文件夹 %s 下的所有文件已成功删除。\n", folder_path);\r
+}\r
+\r
}
\ No newline at end of file
#define MAX_RETRY_TIMES 3 // 重传次数
#define PACKET_INTERVAL_TIMEOUT 1000 // 数据包间隔超时时间,单位:ms
#define PACKET_DELTA_TIMEOUT 70 // 数据包时间差超时时间,单位:ms
+#define PACKET_HEAD_AND_TAIL_LEN 18 // 数据包头部和尾部的长度
static const transspecard_pkt_recv_info_t g_transspecard_alipay_sec_tbl[] = {
{ALIPAY_TRANSSPECARD, TRANSSPECARD_TYPE_ID_ALIPAY_NETWORK_STATUS, msg_center_alipay_network_status},
return type_id;
}
+// 获取阿里的ble_nus最大数据长度
+static uint16_t get_alipay_ble_nus_max_data_len(void)
+{
+ uint16_t alipay_ble_nus_max_data_len = 0;
+ if (ble_nus_max_data_len > 512)
+ {
+ alipay_ble_nus_max_data_len = 512;
+ }
+ else
+ {
+ alipay_ble_nus_max_data_len = ble_nus_max_data_len;
+ }
+ return alipay_ble_nus_max_data_len;
+}
static uint8_t ble_transspecard_receive_ack_id = 0xff;
static osSemaphoreId_t g_transspecard_ack_sem = NULL; // 全局信号量
static uint8_t send_retry_count = 0;
else
{
// 数据不为空
- memcpy(buf + 17, data + (packet_id - 1) * (ble_nus_max_data_len - 20), current_datalen); // 拷贝当前段数据到buf+17的位置
- buf[17 + current_datalen] = calculate_CRC_transspecard(buf, 17 + current_datalen); // 计算CRC校验码
+ memcpy(buf + 17, data + (packet_id - 1) * (get_alipay_ble_nus_max_data_len() - PACKET_HEAD_AND_TAIL_LEN), current_datalen); // 拷贝当前段数据到buf+17的位置
+ buf[17 + current_datalen] = calculate_CRC_transspecard(buf, 17 + current_datalen); // 计算CRC校验码
}
#if alipay_transspecard_log
// 发送指定范围的数据包
static uint8_t send_packets_range(uint8_t type_id, void *data, uint16_t datalen, uint8_t start_packet, uint8_t send_packet_total)
{
- uint32_t singlebuflen = ble_nus_max_data_len - 20;
+ uint32_t singlebuflen = (get_alipay_ble_nus_max_data_len() - PACKET_HEAD_AND_TAIL_LEN);
uint8_t current_packet = start_packet;
while (current_packet <= send_packet_total)
// 发送数据的函数,支持分包发送
uint8_t send_transspecard_data(uint8_t type_id, void *data, uint16_t datalen)
{
- uint32_t singlebuflen = ble_nus_max_data_len - 20;
+ uint32_t singlebuflen = (get_alipay_ble_nus_max_data_len() - PACKET_HEAD_AND_TAIL_LEN);
// 计算分包数量,即总包数
uint8_t send_packet_total = datalen / singlebuflen;
if (datalen % singlebuflen != 0)
// 发送数据
ble_factorytest_server_send_ota_report(buf, 17 + current_datalen + 1);
- printf("发送第 1 个分包(总 1 包)\n");
+ // printf("发送第 1 个分包(总 1 包)\n");
msleep(PACKET_DELTA_TIMEOUT); // 增加延时,确保可以成功发送成功
// 释放内存
#endif
// 拷贝数据到接收缓冲区
- memcpy(receive_buffer + (current_packet_id - 1) * (ble_nus_max_data_len - 20), buf + 17, current_datalen);
+ memcpy(receive_buffer + (current_packet_id - 1) * (get_alipay_ble_nus_max_data_len() - PACKET_HEAD_AND_TAIL_LEN), buf + 17, current_datalen);
packet_received_flags[current_packet_id - 1] = 1;
// 停止当前定时器(如果存在)