解决阿里乘车码获取不到问题 1744/1
authorluozheng <1732036298@qq.com>
Fri, 25 Apr 2025 10:56:03 +0000 (18:56 +0800)
committerluozheng <1732036298@qq.com>
Tue, 6 May 2025 06:39:10 +0000 (14:39 +0800)
code/sdk/application/wearable/fd230app/nativeui/alipay/include/AlipayModel.h
code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayMainView.cpp
code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayModel.cpp
code/sdk/application/wearable/service/ble_service/transspecard/transspecard.c
code/sdk/application/wearable/service/factorytest_service/factorytestService.c

index 8f47146..b6cc00c 100644 (file)
@@ -93,6 +93,7 @@ public:
     char* AlipayGetCardTitle(void);\r
 \r
     void AlipayScreenControl(bool turnOnFlag);\r
+    void delete_all_files_in_folder(const char *folder_path);\r
 private:\r
     osTimerId_t bindTimerId = nullptr;\r
     osTimerId_t ble_disconnect_bindTimerId = nullptr;\r
index 0cb5195..6a1cef5 100644 (file)
@@ -814,6 +814,12 @@ void AlipayMainView::DestroyTempView(int16 hideView)
         }\r
     }\r
     if (hideView == ALIPAY_TRANS_TIPS_VIEW) {\r
+\r
+        if(AlipayModel::GetInstance()->AlipayGetSwitchIndex() == ALIPAY_TRANS_TIPS_LIST_UNKNOW)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlipayMainView::DestroyTempView ALIPAY_TRANS_TIPS_UNKNOW");\r
+            AlipayModel::GetInstance()->delete_all_files_in_folder("/user/alipay/");\r
+        }\r
         delete alipayTransTips;\r
         alipayTransTips = nullptr;\r
     } else if (hideView == ALIPAY_TRANS_RES_VIEW) {\r
index ad81517..d7f70e5 100644 (file)
@@ -716,4 +716,45 @@ void AlipayModel::AlipayScreenControl(bool turnOnFlag)
         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
index 7c90840..6386281 100644 (file)
@@ -14,6 +14,7 @@
 #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},
@@ -107,6 +108,20 @@ static uint8_t set_alipay_transspecard_type_Id(uint8_t type)
     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;
@@ -166,8 +181,8 @@ static uint8_t *assemble_packet(uint8_t type_id, uint8_t packet_id, uint8_t send
     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
@@ -186,7 +201,7 @@ static uint8_t *assemble_packet(uint8_t type_id, uint8_t packet_id, uint8_t send
 // 发送指定范围的数据包
 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)
@@ -214,7 +229,7 @@ static uint8_t send_packets_range(uint8_t type_id, void *data, uint16_t datalen,
 // 发送数据的函数,支持分包发送
 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)
@@ -236,7 +251,7 @@ uint8_t send_transspecard_data(uint8_t type_id, void *data, uint16_t datalen)
 
         // 发送数据
         ble_factorytest_server_send_ota_report(buf, 17 + current_datalen + 1);
-        printf("发送第 1 个分包(总 1 包)\n");
+        // printf("发送第 1 个分包(总 1 包)\n");
         msleep(PACKET_DELTA_TIMEOUT); // 增加延时,确保可以成功发送成功
 
         // 释放内存
@@ -694,7 +709,7 @@ uint8_t parse_transspecard_data(void *buf, uint16_t event_size)
 #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;
 
     // 停止当前定时器(如果存在)
index 5c69e4f..cb7c7f0 100644 (file)
@@ -172,12 +172,12 @@ errcode_t ble_factorytest_server_send_ota_report(const uint8_t *data, uint16_t l
         return ERRCODE_BT_FAIL;\r
     }\r
 \r
-    printf("发送到app:");\r
-    for(int i=0;i<len;i++)\r
-    {\r
-        printf("%02x ",param.value[i]);\r
-    }\r
-    printf("\r\n");\r
+    // printf("发送到app:");\r
+    // for(int i=0;i<len;i++)\r
+    // {\r
+    //     printf("%02x ",param.value[i]);\r
+    // }\r
+    // printf("\r\n");\r
 \r
     errcode_t ret = 0;\r
     ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &param);\r