uint8_t lrcValue = 0x00;\r
if(crcnum == NULL)\r
{\r
- if(crcvalue == 0x00)\r
- {\r
- return true;\r
- }else{\r
- return false;\r
- }\r
+ return true;\r
+ // if(crcvalue == 0x00)\r
+ // {\r
+ // return true;\r
+ // }else{\r
+ // return false;\r
+ // }\r
}\r
for(uint16_t i = 0; i < len; i++)\r
{\r
cJSON_AddNumberToObject(dataJSON,"di",data->di);\r
cJSON_AddNumberToObject(dataJSON,"stp",data->stp);\r
cJSON_AddNumberToObject(dataJSON,"ti",data->ti);\r
-\r
+ cJSON_AddNumberToObject(dataJSON,"pc",data->pc);\r
char *jsonString = cJSON_PrintUnformatted(dataJSON);\r
\r
uint32_t data_len=strlen(jsonString);\r
sendBleData(value,19);\r
}\r
}\r
-\r
+//APP下发快捷辅助功能参数\r
+void get_auxil_fun_parm(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+{\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
+ uint32_t tmp = 1;\r
+ uint16_t packtmp = 1;\r
+ value[0] =0x72;\r
+ value[1] =0x02;\r
+ value[2] =0x11;\r
+ memcpy(value+3,&tmp,4);\r
+ memcpy(value+7,&tmp,4);\r
+ memcpy(value+11,&tmp,4);\r
+ memcpy(value+15,&packtmp,2);\r
+ \r
+ if(Check_CRC(crcnum,len,crcvalue))\r
+ {\r
+ uint8_t paramCnt = crcnum[0];//快捷辅助功能 按照协议文档要区分\r
+ set_quick_auxiliary_paramters(paramCnt);\r
+ value[17] = 1;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }else{\r
+ value[17] = 0x00;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }\r
+}\r
void getTRAIN_TARGETInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
{\r
\r
case SET_PHONE_INFOR_CMD://app下发的下发的手机信息\r
getPhoneInfo(typeID,data,datalen,totalData,crcvalue);\r
break;\r
+ case SET_WATCH_AUXIL_FUN_PARAM_CMD://app下发快捷辅助功能参数\r
+ get_auxil_fun_parm(typeID,data,datalen,totalData,crcvalue);\r
+ break;\r
case CURR_TIME_CMD:\r
GetUTCtime(typeID,data,datalen,totalData,crcvalue);//获取时间app下发的时间进行解析\r
break;\r
memcpy(value+15,&tmp_data,2);\r
if(Check_CRC(crcnum,len,crcvalue))\r
{\r
- uint8_t paramCmt = crcnum[0];//辅助功能 0\r
- \r
+ uint8_t paramCmt = 0;//辅助功能 0\r
+ paramCmt = get_quick_auxiliary_paramters();\r
+ printf("paramCmt:%d\r\n",paramCmt);\r
value[17] = paramCmt;// \r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
\r
\r
}\r
-void cameraSend(void)\r
+void cameraSend(uint8_t flag)//2进行手势拍照 3退出拍照界面\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
memcpy(value+7,&tmp,4);\r
memcpy(value+11,&tmp,4);\r
memcpy(value+15,&tmp_data,2);\r
- value[17] = 2;// \r
+ value[17] = flag;// \r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
}\r
{\r
uint8_t carmera_on = crcnum[0]; //0退出拍照界面 1进入拍照界面\r
//需要加界面弹窗提示\r
- if(carmera_on == 1)//进入拍照弹窗界面\r
+ if(carmera_on == 1)//进入拍照界面\r
{\r
-\r
+ CustomEventPublish(TOPIC_EVENT_ENTER_CMAERA,NULL,0);\r
}else{//退出拍照弹窗界面\r
-\r
+ CustomEventPublish(TOPIC_EVENT_CANCEL_CMAERA,NULL,0);\r
}\r
value[17] = 1;// \r
value[18] = Calculate_CRC(value,18);\r
cJSON_free(heart_data);\r
\r
}\r
-\r
+//type\r
+void realSyncSportData(uint8_t typeid)\r
+{\r
+ int num;\r
+ num=(ble_nus_max_data_len-18);\r
+ if(num>482)\r
+ {\r
+ num=482;\r
+ }\r
+ Send_json_Data_Cmd(num,typeid);\r
+}\r
\r
//手机app下发读设备数据指令\r
void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)\r
bool creatMessageDir(void)//创建消息文件夹\r
{\r
struct stat info;\r
- if (stat(ANCS_DATA_CONFIG_PATH, &info) != 0)\r
+ if (stat(ANCS_DATA_CONFIG_DIR, &info) != 0)\r
{\r
- if (mkdir(ANCS_DATA_CONFIG_PATH, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)\r
+ if (mkdir(ANCS_DATA_CONFIG_DIR, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0)\r
{\r
return false; // Failed to create folder\r
}\r
}\r
char *get_message_dir_path(void)//获取信息的文件夹路径\r
{\r
- return ANCS_DATA_CONFIG_PATH;\r
+ return ANCS_DATA_CONFIG_DIR;\r
}\r
-void message_data(int uid,int appid,char *title,char *msg,int hasCode)\r
+void 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
- char *path;\r
- path = malloc(100);\r
- if(path == NULL)\r
- {\r
- return;\r
- }\r
- char *str_data = get_message_dir_path();\r
- sprintf(path,"%s/%s",str_data,ANCS_DATA_CJSON);\r
- printf("creat file %s\n",path);\r
- FILE *jsfile = fopen(path, "r");\r
+ FILE *jsfile = fopen(ANCS_DATA_CJSON_PATH, "r");\r
cJSON *data_root;\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
-\r
char *jsonData = (char *)malloc(fileSize + 1);\r
fread(jsonData, 1, fileSize, jsfile);\r
jsonData[fileSize] = '\0';\r
fclose(jsfile);\r
-\r
// 解析JSON数据\r
- printf("jsonData %s",jsonData);\r
+ // printf("jsonData %s",jsonData);\r
data_root= cJSON_Parse(jsonData);\r
// data_root = cJSON_GetObjectItem(modifiedJson,"infor");\r
free(jsonData);\r
}\r
\r
cJSON_AddNumberToObject(itemJSON,"uid",uid);\r
- \r
cJSON_AddNumberToObject(itemJSON,"appid_t",appid);//消息类型 微信 qq 等看结构体或者协议定义\r
- \r
cJSON_AddStringToObject(itemJSON,"title",title);//消息发送者\r
- \r
cJSON_AddStringToObject(itemJSON,"msg",msg);//消息内容\r
- \r
cJSON_AddNumberToObject(itemJSON,"time",timeBuf);//时间戳\r
- \r
cJSON_AddNumberToObject(itemJSON,"hasCode",hasCode);//暂时不需要预留接口\r
- \r
cJSON_AddBoolToObject(itemJSON,"read",false);//是否已读 false未读 1 已读默认存的时候已经未读\r
\r
cJSON *dataList = cJSON_GetObjectItem(data_root, "infor");\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
+ // 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
}\r
}\r
char *jsonString = cJSON_Print(data_root);\r
- printf("ancs %s",jsonString);\r
- FILE *fp = fopen(path, "wb");\r
+ // printf("ancs %s",jsonString);\r
+ FILE *fp = fopen(ANCS_DATA_CJSON_PATH, "wb");\r
if (fp)\r
{\r
fwrite(jsonString, 1, strlen(jsonString), fp);\r
fclose(fp);\r
}\r
free(jsonString);\r
- if(path != NULL)\r
- {\r
- free(path);\r
- }\r
read_message_data();\r
\r
}\r
-\r
+int uft8_check(char *chinese_string,int length)\r
+{\r
+ int i = 0;\r
+ for (i = 0; i < length;) {\r
+ // 判断是否为ASCII字符\r
+ if ((unsigned char)chinese_string[i] < 0x80) {\r
+ printf("ASCII character: %d\n", (int)(unsigned char)chinese_string[i]);\r
+ i++;\r
+ } else {\r
+ // 假设这里我们只处理3字节的UTF-8字符\r
+ // 实际上,中文字符通常是4字节\r
+ if ((unsigned char)chinese_string[i] >= 0xF0) {\r
+ // 这里应处理4字节UTF-8字符的逻辑\r
+ // 例如: return (chinese_string[i] << 24) | (chinese_string[i + 1] << 16) | (chinese_string[i + 2] << 8) | chinese_string[i + 3];\r
+ i += 4; // 跳过4个字节\r
+ } else if ((unsigned char)chinese_string[i] >= 0xE0) {\r
+ // 这里应处理3字节UTF-8字符的逻辑\r
+ // 例如: return (chinese_string[i] << 16) | (chinese_string[i + 1] << 8) | chinese_string[i + 2];\r
+ i += 3; // 跳过3个字节\r
+ } else {\r
+ // 这里应处理2字节UTF-8字符的逻辑\r
+ // 例如: return (chinese_string[i] << 8) | chinese_string[i + 1];\r
+ i += 2; // 跳过2个字节\r
+ }\r
+ }\r
+ if(i+4 > length)\r
+ break;\r
+ }\r
+ return i;\r
+}\r
//安卓消息接收解析数据 //ANCS 2AE1\r
uint8_t jscheck_ancs(uint8_t *data)\r
{\r
cJSON* title_c = cJSON_GetObjectItem(root, "title");\r
if (cJSON_IsString(title_c)) {\r
printf("titleBuf: %s\n", title_c->valuestring);\r
- title_c->valuestring[strlen(title_c->valuestring)]='\0';\r
- memcpy(titleBuf,title_c->valuestring,strlen(title_c->valuestring));\r
+ int len = strlen(title_c->valuestring);\r
+ if(len >= TITLE_BUF_LEN){\r
+ len = uft8_check(title_c->valuestring,TITLE_BUF_LEN-4);\r
+ title_c->valuestring[len++] ='.';\r
+ title_c->valuestring[len++] = '.';\r
+ title_c->valuestring[len++] = '.';\r
+ title_c->valuestring[len++] = 0;\r
+ }\r
+ \r
+ memcpy(titleBuf,(uint8_t *)title_c->valuestring,len);\r
}\r
cJSON* msg = cJSON_GetObjectItem(root, "msg");\r
if (cJSON_IsString(msg)) {\r
- printf("msgBuf: %s\n", msg->valuestring);\r
- // msgBuf = msg->valuestring;\r
- msg->valuestring[strlen(msg->valuestring)]='\0';\r
- memcpy(msgBuf,msg->valuestring,strlen(msg->valuestring));\r
+ int len = strlen(msg->valuestring);\r
+ if(len >= MSG_BUF_LEN-4){\r
+ len = uft8_check(msg->valuestring,MSG_BUF_LEN-4);\r
+ msg->valuestring[len++] ='.';\r
+ msg->valuestring[len++] = '.';\r
+ msg->valuestring[len++] = '.';\r
+ msg->valuestring[len++] = 0;\r
+ }\r
+ memcpy(msgBuf,(uint8_t *)msg->valuestring,len);\r
+ printf("msgBuf: %s\n",msgBuf);\r
}\r
cJSON* time = cJSON_GetObjectItem(root, "time");\r
if (cJSON_IsString(time)) {\r
memcpy(recvData+packdataLen,totalData,event_size); //先copy再加\r
packdataLen = packdataLen+event_size;\r
printf("muilt 133333;%d packdataLen:%d",totalDataLen,packdataLen);\r
- if(totalDataLen >= (packdataLen-18))//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分\r
+ if((packdataLen-18) >= totalDataLen)//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分\r
{\r
bigDataBuf = malloc(totalDataLen);\r
crcvalue = totalData[event_size-1];\r