消息机制重写 494/1
authorhcj <1224667075@qq.com>
Wed, 10 Jul 2024 06:11:16 +0000 (14:11 +0800)
committerhcj <1224667075@qq.com>
Wed, 10 Jul 2024 06:11:16 +0000 (14:11 +0800)
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.h
code/sdk/application/wearable/service/ble_service/bleservice/bleANCS.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h

index 386f031..876e958 100644 (file)
@@ -74,6 +74,9 @@ extern "C" {
 #include <dirent.h>
 #include <ppg_service.h>
 
+
+
+
 void ble_set_ai_Question_str(char *buf)
 {
     OHOS::AiVoiceModel::GetInstance().SetUserQuestionStr(std::string(buf));
@@ -687,9 +690,18 @@ char * ble_sywee_history(uint8_t day,uint16_t *len ,uint8_t type)
 
     if(day==0)
     {
+        time_t currtime;
         uint32_t creationTime=0;
         int ret = uapi_get_timestampe_ss(&creationTime);
+
         uint32_t value=0;
+
+        struct tm *timeinfo;
+        time(&currtime);
+        timeinfo = localtime(&currtime);
+        //printf("localtime %d",timeinfo->tm_min);
+        creationTime-=(timeinfo->tm_min*60);
+
         switch (type)
         {
             case 0x43: //同步步数历史数据
@@ -1777,6 +1789,20 @@ message_infor_t *get_message_info(void)
 {
     return &message_infor_s;
 }
+
+void ble_add_message_index(uint32_t old_index)
+{
+    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
+    old_index++;
+    p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIGMODEL_ITEM_MESSAGE_INDEX,old_index);
+}
+
+uint32_t ble_get_message_index()
+{
+    OHOS::ConfigModel *p_ConfigModel  =  OHOS::ConfigModel::GetInstance();
+    return p_ConfigModel->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_MESSAGE_INDEX);
+}
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 21cc0ef..8d7f209 100644 (file)
@@ -315,6 +315,11 @@ uint8_t ble_get_oxygen_data(void);
 
 cJSON* ble_get_recs_data(void);
 
+////////////////////消息////////////////////////////
+void ble_add_message_index(uint32_t old_index);
+
+uint32_t ble_get_message_index(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index bc1dbcd..d6f9468 100644 (file)
@@ -162,7 +162,7 @@ static void ble_ancs_client_notify_source_cbk(uint8_t client_id, uint16_t conn_i
         uint32_t creationTime=0;
         int ret = uapi_get_timestampe_ss(&creationTime);
         //当前时间戳减去订阅通知时间戳3s以上的通知,才要求数据(过滤ios将所有未查看消息发过来)
-        if(creationTime-subscribe_notify_creationTime>=3)
+        if(creationTime!=subscribe_notify_creationTime)
         ble_ancs_client_at_cmd_get_notify_att(conn_id, notify_src->notification_uid);
        // 
 
@@ -171,7 +171,8 @@ static void ble_ancs_client_notify_source_cbk(uint8_t client_id, uint16_t conn_i
             conn_id, status);
     }
 }
-static  char old_time_buf[64]={0};
+//static  char old_time_buf[64]={0};
+static uint32_t ancs_msg_index =0;
 
 //"20240709T093253"
 /* ANCS服务通知属性响应结果回调 */
@@ -214,17 +215,16 @@ static void ble_ancs_client_notification_attr_rsp_cbk(uint8_t client_id, uint16_
         printf("ble_ancs_client_notification_attr_rsp_cbk test\r\n");
 
 
-        if(strcmp(old_time_buf,new_msg_buf)!=0)
-        {
-            memset(old_time_buf,0,64);
-            memcpy_s(old_time_buf,64,new_msg_buf,64);
-
-            printf("ble_ancs_client_notification_attr_rsp_cbk test 2\r\n");
-            message_data(notify_attr_rsp->notification_uid,0,title_buf,msg_buf,0);
-            //CustomEventPublish_TOPIC_EVENT_MESSAGENOTE();
+        // if(strcmp(old_time_buf,new_msg_buf)!=0)
+        // {
+            // memset(old_time_buf,0,64);
+            // memcpy_s(old_time_buf,64,new_msg_buf,64);
+           // printf("ble_ancs_client_notification_attr_rsp_cbk test 2\r\n");
+            ancs_msg_index = message_data(notify_attr_rsp->notification_uid,0,title_buf,msg_buf,0);
+            CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(ancs_msg_index);
 
             
-        }
+        //}
        
     } else {
         printf("[ANCSClientNotifyATTRSPCBK]conn_id:%d status:0x%x.\r\n",
index 12477ec..ddf095f 100644 (file)
@@ -5079,120 +5079,61 @@ char *get_message_dir_path(void)//获取信息的文件夹路径
 {\r
     return ANCS_DATA_CONFIG_DIR;\r
 }\r
-void message_data(int uid,int appid,char  *title,char  *msg,int hasCode)\r
+\r
+uint32_t message_data(int uid,int appid,char  *title,char  *msg,int hasCode)\r
 {\r
     if(!creatMessageDir())//创建文件夹失败\r
     {\r
-        return;\r
-    }\r
-    uint8_t buf_size = 0;\r
-    FILE *jsfile = fopen(ANCS_DATA_CJSON_PATH, "r");\r
-    cJSON *data_root;\r
-\r
-    if (jsfile != NULL) {\r
-        printf("succes opening file\n");\r
-        fseek(jsfile, 0, SEEK_END);\r
-        long fileSize = ftell(jsfile);\r
-        fseek(jsfile, 0, SEEK_SET);\r
-        char *jsonData = (char *)ym_malloc(fileSize + 1);\r
-        fread(jsonData, 1, fileSize, jsfile);\r
-        jsonData[fileSize] = '\0';\r
-        fclose(jsfile);\r
-        // 解析JSON数据\r
-        // printf("jsonData %s",jsonData);\r
-        data_root= cJSON_Parse(jsonData);\r
-        // data_root = cJSON_GetObjectItem(modifiedJson,"infor");\r
-        ym_free(jsonData);\r
-\r
-    }else{\r
-        data_root = cJSON_Parse("{\\r
-        \"infor\": [\\r
-        ]}");\r
+        return 0;\r
     }\r
+    uint32_t index= ble_get_message_index();\r
 \r
-    cJSON *dataJSON = cJSON_CreateObject();\r
-\r
-    cJSON *detialJSON = cJSON_CreateObject();\r
-\r
-    cJSON* itemJSON = cJSON_CreateObject();\r
 \r
+    uint8_t buf_size = 0;\r
+    char message_data_path[128]={0};\r
     uint32_t timeBuf = 0;\r
     if (uapi_get_timestampe_ss(&timeBuf) != ERRCODE_SUCC)\r
     {\r
         timeBuf = 0;\r
     }\r
+\r
+    sprintf_s(message_data_path,128,ANCS_DATA_MSG_CJSON_PATH,index);\r
     \r
-    cJSON_AddNumberToObject(itemJSON,"uid",uid);\r
-    cJSON_AddNumberToObject(itemJSON,"appid_t",appid);//消息类型 微信 qq 等看结构体或者协议定义\r
-    cJSON_AddStringToObject(itemJSON,"title",title);//消息发送者\r
-    cJSON_AddStringToObject(itemJSON,"msg",msg);//消息内容\r
-    cJSON_AddNumberToObject(itemJSON,"time",timeBuf);//时间戳\r
-    cJSON_AddNumberToObject(itemJSON,"hasCode",hasCode);//暂时不需要预留接口\r
-    cJSON_AddBoolToObject(itemJSON,"read",false);//是否已读 false未读 1 已读默认存的时候已经未读\r
-    \r
-    cJSON *dataList = cJSON_GetObjectItem(data_root, "infor");\r
-    if (dataList != NULL && cJSON_IsArray(dataList))\r
+    FILE *jsfile = fopen(message_data_path, "w+");\r
+    if(jsfile==NULL)\r
     {\r
-        int numData = cJSON_GetArraySize(dataList);\r
-        if(numData >= MAX_MESSAGE_NUM)//大于20条就循环迭代显示并保存数据 \r
-        {\r
-            for (uint8_t i = 0; i < MAX_MESSAGE_NUM-1; i++)//2-1 1 0\r
-            {\r
-                // printf("ancs !!!!!!!!!!!! i:%d\r\n",i);\r
-                cJSON *object = NULL;\r
-                cJSON *uid = NULL;\r
-                cJSON *appid_t = NULL;\r
-                cJSON *title = NULL;\r
-                cJSON *msg = NULL;\r
-                cJSON *time = NULL;\r
-                cJSON *hasCode = NULL;\r
-                cJSON *read = NULL;\r
-                cJSON* deitemJSON = cJSON_CreateObject();\r
-                cJSON *detialJSON = cJSON_CreateObject();\r
-                object = cJSON_GetArrayItem(dataList,i+1);//9 9-18  0+1 9+1\r
-                uid = cJSON_GetObjectItem(object, "uid");\r
-                appid_t = cJSON_GetObjectItem(object, "appid_t");\r
-                title = cJSON_GetObjectItem(object, "title");\r
-                msg = cJSON_GetObjectItem(object, "msg");\r
-                time = cJSON_GetObjectItem(object, "time");\r
-                hasCode = cJSON_GetObjectItem(object, "hasCode");\r
-                read = cJSON_GetObjectItem(object, "read");\r
-                // printf("ancs title->valuestring:%s msg->valuestring:%s\r\n",title->valuestring,msg->valuestring);\r
-                cJSON_AddNumberToObject(deitemJSON,"uid",uid->valueint);\r
-                cJSON_AddNumberToObject(deitemJSON,"appid_t",appid_t->valueint);//消息类型 微信 qq 等看结构体或者协议定义\r
-                cJSON_AddStringToObject(deitemJSON,"title",title->valuestring);//消息发送者\r
-                cJSON_AddStringToObject(deitemJSON,"msg",msg->valuestring);//消息内容\r
-                cJSON_AddNumberToObject(deitemJSON,"time",time->valueint);//时间戳\r
-                cJSON_AddNumberToObject(deitemJSON,"hasCode",hasCode->valueint);//暂时不需要预留接口\r
-                cJSON_AddBoolToObject(deitemJSON,"read",read->valueint);//是否已读 false未读 1 已读默认存的时候已经未读\r
-                cJSON_ReplaceItemInArray(dataList, i, deitemJSON);// \r
-            }\r
-            cJSON_ReplaceItemInArray(dataList,MAX_MESSAGE_NUM-1, itemJSON);\r
-        }else{\r
-            cJSON_AddItemToArray(dataList, itemJSON);\r
-        }\r
+        printf("message_data open %s fail\r\n",message_data_path);\r
     }\r
-    char *jsonString = cJSON_Print(data_root);\r
-    // printf("ancs %s",jsonString);\r
-    FILE *fp = fopen(ANCS_DATA_CJSON_PATH, "wb");\r
-    if (fp)\r
-    {\r
-        int ret=fwrite(jsonString, 1, strlen(jsonString), fp);\r
 \r
-        if(ret!=strlen(jsonString))\r
-        printf("message_data write fail\r\n");\r
 \r
-        fclose(fp);\r
-    }\r
+    cJSON* dataJSON = cJSON_CreateObject();\r
+\r
+    cJSON_AddNumberToObject(dataJSON,"uid",uid);\r
+    cJSON_AddNumberToObject(dataJSON,"appid_t",appid);//消息类型 微信 qq 等看结构体或者协议定义\r
+    cJSON_AddStringToObject(dataJSON,"title",title);//消息发送者\r
+    cJSON_AddStringToObject(dataJSON,"msg",msg);//消息内容\r
+    cJSON_AddNumberToObject(dataJSON,"time",timeBuf);//时间戳\r
+    cJSON_AddNumberToObject(dataJSON,"hasCode",hasCode);//暂时不需要预留接口\r
+    cJSON_AddBoolToObject(dataJSON,"read",false);//是否已读 false未读 1 已读默认存的时候已经未读\r
+\r
+    char *json_format = cJSON_PrintUnformatted(dataJSON);\r
+    cJSON_Delete(dataJSON);\r
+\r
+    if(json_format==NULL)\r
+    return 0;\r
     else\r
+    printf("message_data json:%s\r\n",json_format);\r
+\r
+    if( strlen(json_format)!=fwrite(json_format,1,strlen(json_format),jsfile))\r
     {\r
-        printf("fopen fail\r\n");\r
+        printf("message_data fwrite fail\r\n");\r
     }\r
-    cJSON_free(jsonString);\r
-    cJSON_Delete(data_root);\r
-    read_message_data();\r
-\r
-\r
+    \r
+    fclose(jsfile);\r
+    cJSON_free(json_format);\r
+    ble_add_message_index(index);\r
+    return index;\r
+    //read_message_data();\r
 }\r
 int uft8_check(char *chinese_string,int length)\r
 {\r
@@ -5224,6 +5165,7 @@ int uft8_check(char *chinese_string,int length)
     }\r
     return i;\r
 }\r
+static uint32_t ancs_msg_index =0;\r
 //安卓消息接收解析数据 //ANCS 2AE1\r
 uint8_t jscheck_ancs(uint8_t *data)\r
 {\r
@@ -5295,7 +5237,7 @@ uint8_t jscheck_ancs(uint8_t *data)
         hasCode_t = hasCode->valueint;\r
     }\r
     cJSON_Delete(root);\r
-    message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
+    ancs_msg_index= message_data(uid_t,appid_t,titleBuf,msgBuf,hasCode_t);\r
     if(titleBuf != NULL){\r
         ym_free(titleBuf);\r
         titleBuf = NULL;\r
@@ -5306,6 +5248,7 @@ uint8_t jscheck_ancs(uint8_t *data)
     }\r
     return 1;\r
 }\r
+\r
 void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
 {\r
     uint8_t value[19];\r
@@ -5327,7 +5270,8 @@ void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,
         value[17] = 1;\r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
-        CustomEventPublish(TOPIC_EVENT_MESSAGENOTE,&data,1);\r
+\r
+        CustomEventPublish(TOPIC_EVENT_MESSAGENOTE,&ancs_msg_index,4);\r
     }else{\r
         value[17] = 0;\r
         value[18] = Calculate_CRC(value,18);\r
@@ -5335,9 +5279,9 @@ void ancsDataShowCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,
     }\r
 }\r
 \r
-void CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(void)\r
+void CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(uint32_t index)\r
 {\r
-     CustomEventPublish(TOPIC_EVENT_MESSAGENOTE,NULL,0);\r
+     CustomEventPublish(TOPIC_EVENT_MESSAGENOTE,&index,4);\r
 }\r
 \r
 void type2AE1Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
index 6097743..1395f98 100644 (file)
@@ -17,6 +17,8 @@ extern "C" {
 
 #define ANCS_DATA_CJSON_PATH "/user/userdata/message/ancs.json" //消息文件可以任意更改
 
+#define ANCS_DATA_MSG_CJSON_PATH "/user/userdata/message/%d.json" //消息文件可以任意更改
+
 #define READ_FLASH_DATA 0x01 //读flash数据
 #define WRITE_FLASH_DATA 0x02 //写flash数据
 bool creatMessageDir(void);//创建消息文件夹
@@ -769,9 +771,9 @@ uint8_t get_crc_from_lrc(uint8_t lrcValue);
 
 uint8_t  calculate_lrc_file(char *file_path);
 
-void message_data(int uid,int appid,char  *title,char  *msg,int hasCode);
+uint32_t message_data(int uid,int appid,char  *title,char  *msg,int hasCode);
 
-void CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(void);
+void CustomEventPublish_TOPIC_EVENT_MESSAGENOTE(uint32_t index);
 
 void send_AI_is_ready(uint8_t type);