#define ANCS_DEC_CHAR_COUNT 2
#define BYTE_BIT_COUNT 8
+#define ANCS_APP_FILTRATION_PATH "user/userdata/filtration.bin"
+
/* ANCS客户端接口命令id */
typedef enum {
BLE_SAMPLE_ANCS_CLIENT_REGISTER_CBK = 1, /* 1 注册ANCS客户端回调函数 */
static uint8_t g_client_id=0;
/* 命令处理函数接口 */
+#define filtration_data_count 20
+filtration_data filtration_data_T[filtration_data_count]={0};
+//*com.tencent.qqmail
+// com.apple.mobilephone
+// com.apple.MobileSMS
+// com.netease.mailmaster
+// com.tencent.xin
+// com.tencent.mqq
+// com.facebook.Messenger
+// com.atebits.Tweetie2
+// net.whatsapp.WhatsAppSMB
+// com.linkedin.LinkedIn
+// com.burbn.instagram
+// com.facebook.Messenger
+// com.toyopagroup.picaboo
+// jp.naver.line
+// com.iwilab.KakaoTalk
+// com.viber
+// com.skype.skype
+// ph.telegra.Telegraph
+// com.others
+//消息过滤文件保存,在此列的消息未打开,不发消息给手表,不在此列默认开
+void filtration_on_get(char *buf,uint8_t len)
+{
+ for (size_t i = 0; i < len; i++)
+ {
+ if(strlen( filtration_data_T[i].name)!=0 && filtration_data_T[i].on==0)
+ {
+ buf[i]=0;
+ }
+ else
+ {
+ buf[i]=1;
+ }
+ }
+}
+void filtration_file_save(void)
+{
+ FILE *fp=fopen(ANCS_APP_FILTRATION_PATH,"wb+");
+ if(fp==NULL)return;
+ for (size_t i = 0; i < filtration_data_count; i++)
+ {
+ fwrite(&filtration_data_T[i],sizeof(filtration_data),1,fp);
+ }
+ fclose(fp);
+}
+
+void filtration_file_read(void)
+{
+ FILE *fp=fopen(ANCS_APP_FILTRATION_PATH,"rb+");
+ if(fp==NULL)return;
+ for (size_t i = 0; i < filtration_data_count; i++)
+ {
+ int readsize= fread(&filtration_data_T[i],sizeof(filtration_data),1,fp);
+ if(readsize!=1)
+ break;
+ }
+ fclose(fp);
+}
+
+
+void filtration_file_updata(filtration_data *data)
+{
+ for (size_t i = 0; i < filtration_data_count; i++)
+ {
+ if(strlen( filtration_data_T[i].name)==0)
+ {
+ filtration_data_T[i].on=data->on;
+ filtration_data_T[i].len=data->len;
+ memset(filtration_data_T[i].name,0,filtration_data_max_len);
+ memcpy_s(filtration_data_T[i].name,filtration_data_max_len, data->name,strlen( data->name));
+ break;
+ // printf("name:%s on:%d\r\n",data->name,data->on);
+ }
+ else if (strcmp(data->name,filtration_data_T[i].name)==0)
+ {
+ filtration_data_T[i].on=data->on;
+ break;
+ //printf("name:%s on:%d\r\n",data->name,data->on);
+ }
+ }
+}
+
+static uint8_t get_other_filtration()
+{
+ for (size_t i = 0; i < filtration_data_count; i++)
+ {
+ if (strcmp("com.others",filtration_data_T[i].name)==0)
+ {
+ if(filtration_data_T[i].on)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+ return 1;
+
+}
+
+uint8_t is_filtration_data(char *data)
+{
+ for (size_t i = 0; i < filtration_data_count; i++)
+ {
+ if (strcmp(data,filtration_data_T[i].name)==0)
+ {
+ if(filtration_data_T[i].on)
+ {
+ return 1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+ if(get_other_filtration())
+ return 1;
+ else
+ return 0;
+}
+
+
/* 获取通知属性 */
uint16_t att_num = 1;
char title_buf[256]={0};
char msg_buf[256]={0};
- char new_msg_buf[64]={0};
+ char app_buf[32]={0};
while (node != NULL) {
if (node != NULL) {
printf("[ANCSClientNotifyATTRSPCBK]att id:%d length:%lu att_value:%s\r\n",
{
sprintf_s(msg_buf,256,"%s",node->att);
}
- if(node->att_id==5)
+ if(node->att_id==0)
{
- sprintf_s(new_msg_buf,64,"%s",node->att);
+ sprintf_s(app_buf,64,"%s",node->att);
}
}
node = lnext(node);
// 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");
+ if(is_filtration_data(app_buf))
message_data(notify_attr_rsp->notification_uid,0,title_buf,msg_buf,0);
#include "bletest.h"\r
#include "custom_utils.h"\r
#include "custom_runtime.h"\r
+#include "bleANCS.h"\r
\r
#define DEBUG_TEST (0)\r
#define CRC_CHECK_ERR 0 //crc校验失败\r
}\r
}\r
\r
+void SetmsgfiltrationCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//设置久坐设置\r
+{\r
+ uint32_t tmp = 1;\r
+ uint16_t tmp_data = 1;\r
+ uint8_t sendBuf[19];\r
+ memset(sendBuf,0,19);\r
+ sendBuf[0] = 0x72;\r
+ sendBuf[1] = 0x02;\r
+ sendBuf[2] = 0x1E;\r
+ memcpy(sendBuf+3,&tmp,4);\r
+ memcpy(sendBuf+7,&tmp,4);\r
+ memcpy(sendBuf+11,&tmp,4);\r
+ memcpy(sendBuf+15,&tmp_data,2);\r
+\r
+ if(Check_CRC(data,len,crcvalue))\r
+ {\r
+ printf("总长%d\r\n",len);\r
+ uint32_t offset=0;\r
+ while (offset<len)\r
+ {\r
+ filtration_data data_t={0};\r
+ data_t.on=data[offset];\r
+ offset++;\r
+ data_t.len=data[offset];\r
+ offset++;\r
+ memcpy_s(data_t.name,filtration_data_max_len,&data[offset],data_t.len);\r
+ offset+=data_t.len;\r
+ printf("%s\r\n",data_t.name);\r
+ filtration_file_updata(&data_t);\r
+ } \r
+ \r
+ sendBuf[17] = 1;\r
+ sendBuf[18] = Calculate_CRC(sendBuf,18);\r
+ sendBleData(sendBuf,19);\r
+ }\r
+ else\r
+ {\r
+ sendBuf[17] = 0;\r
+ sendBuf[18] = Calculate_CRC(sendBuf,18);\r
+ sendBleData(sendBuf,19);\r
+ }\r
+}\r
+\r
+\r
\r
\r
\r
case SET_SEDENTARINESS_PARAM_CMD:\r
SetsedentarinessSetParamCmd(typeID,data,datalen,totalData,crcvalue);\r
break;\r
+ case SET_ANCS_MSG_FILTRATION_CMD:\r
+ SetmsgfiltrationCmd(typeID,data,datalen,totalData,crcvalue);\r
+ break;\r
case QUERY_DIAL_INSTALLED_PARAM_CMD:\r
query_dial_installed(buffer_handle,typeID,data,datalen,totalData,crcvalue);\r
break;\r
sendBleData(value,19);\r
}\r
}\r
-//è\8e·å\8f\96å¼\80å\85³æ¶\88æ\81¯æ\8e¨é\80\81å\8a\9fè\83½\r
-static void GetSwitchMessCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+//设置å¼\80å\85³//ï¼\88å¼\83ï¼\89\r
+static void SetSwitchMessCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
memset(value,0,19);\r
if(Check_CRC(data,len,crcvalue))\r
{\r
uint8_t switch_on = data[0];//0 关闭 1 开启\r
+ if(switch_on)\r
+ {\r
+ ble_ancs_client_cmd_setup_and_subscribe(g_ble_conn_id);\r
+ }\r
+ else\r
+ {\r
+ ble_ancs_client_subscribe_notify(g_ble_conn_id,0);\r
+ }\r
\r
value[17] = 1;\r
value[18] = Calculate_CRC(value,18);\r
\r
static void GetPasswordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
- uint8_t value[26];\r
- memset(value,0,26);\r
+ uint8_t value[19];\r
+ memset(value,0,19);\r
uint32_t tmp = 1;\r
- uint32_t datalen = 6;\r
- uint16_t tmp_data = 6;\r
+ uint32_t datalen = 1;\r
+ uint16_t tmp_data = 1;\r
value[0] = 0x72;\r
value[1] = 0x01;\r
value[2] = 0x2f;\r
}\r
}\r
\r
+static void GetmsgconfigCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+{\r
+ uint8_t value[36];\r
+ memset(value,0,36);\r
+ uint32_t tmp = 1;\r
+ uint32_t datalen = 18;\r
+ uint16_t tmp_data = 18;\r
+ value[0] = 0x72;\r
+ value[1] = 0x01;\r
+ value[2] = 0x33;\r
+ memcpy(value+3,&tmp,4);\r
+ memcpy(value+7,&datalen,4);\r
+ memcpy(value+11,&tmp,4);\r
+ memcpy(value+15,&tmp_data,2);\r
+ if(1)\r
+ {\r
+ uint8_t data_buf[18]={1};\r
+ \r
+ // memset(data,1,18);\r
+ filtration_on_get((char*)data_buf,18);\r
+ memcpy(&value[17],data_buf,18);//\r
+ \r
+ value[35] = Calculate_CRC(value,35);\r
+ sendBleData(value,36);\r
+ }else\r
+ {\r
+ value[17] = 0;\r
+ value[18] = Calculate_CRC(value,18);\r
+ sendBleData(value,19);\r
+ }\r
+}\r
+\r
+\r
\r
\r
bool get_AI_PATH_and_size(char *path,uint32_t *size)\r
GetBatteryLevelCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
case SWITCH_MESS_CMD://开关消息推送功能 \r
- GetSwitchMessCmd(cmd,data,datalen,totaldata,crcvalue);\r
+ SetSwitchMessCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
case REVOKE_CURR_FILE_TRANS_CMD://撤销文件传输\r
RemoveFileCmd(buffer_handle,cmd,data,datalen,totaldata,crcvalue);\r
case GET_PASSWORD_CMD: //获取手表密码\r
GetPasswordCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
+ case SYN_GET_MSG_CONFIG_CMD: //获取手表消息设置\r
+ GetmsgconfigCmd(cmd,data,datalen,totaldata,crcvalue);\r
+ break;\r
+ \r
case APP_GET_AI_PCM_DATA_CMD:\r
GetAiRecordCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r