#include "SetDialModel.h"
-
+#include "SleepModel.h"
//#include "AlarmClockModel.h"
#ifdef __cplusplus
#if __cplusplus
#include <dirent.h>
+uint8_t ble_AT_add_nap_data(uint16_t time)
+{
+ OHOS::NAP_T data;
+ data.duration=time;
+ uint32_t creationTime;
+ int ret =uapi_get_timestampe_ss(&creationTime);
+ data.fall_asleep_timestamp=creationTime-60*60;
+ data.wake_up_timestamp=creationTime;
+ set_nap_data(&data);
+}
+
+uint8_t ble_get_sleep_data(uint32_t file_size,uint8_t day_,uint8_t *data)
+{
+ char dir_path[64]={0};
+ char day[12]={0};
+ uapi_get_YYMMDD_Time_extend(day,'\0', day_);
+ sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+
+ struct DIR *dir;
+ struct dirent *ent;
+
+ std::string fileName = ent->d_name;
+ uint32_t offset=0;
+ uint8_t sleep_count=1;
+
+ if ((dir = opendir(dir_path)) != NULL)
+ {
+ while ((ent = readdir(dir)) != NULL)
+ {
+ if (fileName != "." && fileName != "..")
+ {
+
+ if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件
+ {
+
+ char file_path[128]={0};
+ sprintf_s(file_path,128,"%s/%s",dir_path,ent->d_name);
+
+ FILE * fp = fopen(file_path,"rb+");
+ if(fp==NULL)
+ {
+ printf(" fopen fail %s\r\n",file_path);
+ return 1 ;
+ }
+
+ uint16_t sleep_file_size=0;
+ if (fp != NULL)
+ {
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ sleep_file_size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ sleep_file_size++;
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+ memcpy(data+offset,&sleep_file_size,2);
+ *(data+offset+2)=sleep_count;
+ sleep_count++;
+ offset+=3;
+ uint16_t read_size =fread(data+offset,1,sleep_file_size,fp);
+
+ if((read_size+1)==sleep_file_size)
+ offset+=read_size;
+ else
+ printf(" fread fail read_size:%d!= sleep_file_size:%d \r\n",read_size,sleep_file_size);
+
+ fclose(fp);
+ }
+ }
+ }
+ else if (ent->d_type == DT_DIR) // 目录
+ {
+ continue;
+ }
+ }
+ }
+ closedir(dir);
+
+ return offset;
+}
+
+
+
+
+uint8_t ble_get_sleep_data_dir(uint32_t *file_size,uint8_t day_)
+{
+ char dir_path[64]={0};
+ char day[12]={0};
+ uapi_get_YYMMDD_Time_extend(day,'\0', day_);
+ sprintf_s(dir_path,64,SLEEP_DIR_PATH,day);
+
+ struct DIR *dir;
+ struct dirent *ent;
+
+ std::string fileName = ent->d_name;
+ uint8_t file_count=0;
+
+ if ((dir = opendir(dir_path)) != NULL)
+ {
+ while ((ent = readdir(dir)) != NULL)
+ {
+ if (fileName != "." && fileName != "..")
+ {
+
+ if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN ) // 普通文件
+ {
+
+ char file_path[128]={0};
+ sprintf_s(file_path,128,"%s/%s",dir_path,ent->d_name);
+
+ FILE * fp = fopen(file_path,"rb+");
+ if(fp==NULL)
+ {
+ printf(" fopen fail %s\r\n",file_path);
+ return file_count;
+ }
+
+ if (fp != NULL)
+ {
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ *file_size += ftell(fp)+3; // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+ fclose(fp);
+ }
+ file_count++;
+ }
+ }
+ else if (ent->d_type == DT_DIR) // 目录
+ {
+ continue;
+ }
+ }
+ }
+ else
+ {
+ printf(" opendir fail %s\r\n",dir_path);
+ return file_count;
+ }
+ closedir(dir);
+ return file_count;
+}
void ble_set_password(uint8_t falg, char * data)
{
struct DIR *dir;
struct dirent *ent;
-
if ((dir = opendir(dir_path)) != NULL)
{
while ((ent = readdir(dir)) != NULL)
{
std::string fileName = ent->d_name;
- char file_path[128]={0};
- sprintf_s(file_path,128,"%s/%s",TAR_PATH,ent->d_name);
-
- FILE * fp = fopen(file_path,"rb+");
- if(fp==NULL)
- {
- printf(" fopen fail %s\r\n",file_path);
- return NULL;
- }
- if (fp != NULL)
- {
- fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
- *file_size = ftell(fp); // 获取当前文件指针位置,即文件大小
- fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
- }
- fclose(fp);
-
if (fileName != "." && fileName != "..")
{
//std::string filePath = directory + fileName;
{
//*file_size=ent->d_reclen;
+ char file_path[128]={0};
+ sprintf_s(file_path,128,"%s/%s",TAR_PATH,ent->d_name);
+
+ FILE * fp = fopen(file_path,"rb+");
+ if(fp==NULL)
+ {
+ printf(" fopen fail %s\r\n",file_path);
+ return NULL;
+ }
+ if (fp != NULL)
+ {
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ *file_size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+ }
+ fclose(fp);
+
+
memcpy(file_name,file_path,strlen(file_path));
uint8_t crc= Calculate_CRC_file(file_name);
}else if(type == 1)//只改变铃声音量参数 其他还是保持不变 按照原来的参数\r
{\r
int ring_volume = 0;\r
+\r
ring_volume = data[1];\r
+\r
Set_CallVolume(ring_volume);\r
\r
}else if(type == 2)//只改变媒体音量\r
{\r
uint16_t cmd = cmd_buf[1]*256+cmd_buf[2];\r
#ifdef BLE_LOG\r
- printf("typeHexOneData:0x%04X\r\n",cmd);\r
+ \r
#endif\r
+ printf("typeHexOneData:0x%04X\r\n",cmd);\r
// uint8_t typeID = cmd_buf[2];\r
switch (cmd)\r
{\r
uint32_t EACH_DATA_LEN=0;//每种数据类型的的长度\r
\r
\r
+void Send_Sleep_Bin_Data(uint8_t day, uint8_t num)\r
+{\r
+ \r
+ char *data=NULL;\r
+ uint32_t file_size=1;\r
+ uint8_t sleep_count = ble_get_sleep_data_dir(&file_size,day);\r
+\r
+ printf("Send_Sleep_Bin_Data file_size : %d \r\n",file_size);\r
+\r
+ data=(char *)malloc(file_size);\r
+ data[0]=sleep_count;\r
+\r
+ if(data==NULL)\r
+ {\r
+ #ifdef BLE_LOG\r
+ printf("malloc\r\n");\r
+ #endif\r
+\r
+ return;\r
+ }\r
+ ble_get_sleep_data(file_size,day,(uint8_t*)data+1);\r
+\r
+\r
+ if(data==NULL || file_size==1)\r
+ {\r
+ send_big_data(1,NULL,0,0,1,1,0x4b,1);\r
+ sendbigDataBufState = false;//分包同步数据不允许打断\r
+ return;\r
+ }\r
+ \r
+ uint32_t surplus_len=file_size;\r
+ uint32_t pack;\r
+ if(file_size%num==0)\r
+ {\r
+ pack=file_size/num;\r
+ }\r
+ else\r
+ { \r
+ pack=file_size/num+1;\r
+ }\r
+ //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+ uint32_t pack_id=1;\r
+ uint32_t offset=0;\r
+ while (surplus_len!=0)\r
+ {\r
+ if(surplus_len>=num)\r
+ {\r
+ surplus_len=surplus_len-num;\r
+ printf("%d %d %d %d\r\n",num,file_size,pack_id,pack);\r
+ send_big_data(1,data+offset,num,file_size,pack_id,pack,0x4b,1);\r
+ offset+=num;\r
+ }\r
+ else\r
+ {\r
+ //#ifdef BLE_LOG\r
+ printf("%d %d %d %d\r\n",surplus_len,file_size,pack_id,pack);\r
+ //#endif\r
+ send_big_data(1,data+offset,surplus_len,file_size,pack_id,pack,0x4b,1);\r
+ break;\r
+ }\r
+ pack_id++;\r
+ }\r
+ free(data);\r
+ \r
+}\r
+\r
\r
-void Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char *data_item)\r
+bool Read_JSON_file_buf_send_bin_Data(uint8_t day, uint8_t num,uint16_t id,char *data_item)\r
{\r
\r
+ // send_big_data(1,NULL,0,0,1,1,id,1);\r
+ // return;\r
+\r
char *buf=NULL;\r
const char *path=NULL;\r
uint8_t timeBit = 4;//默认是4个字节的时间戳\r
path=get_health_OXYGEN_data_path(day);\r
dataBit = 1;//血氧数据字节1个字节 uint8_t\r
break;\r
- case 0x4b://睡眠历史数据\r
- path=NULL;\r
- break;\r
}\r
if(path==NULL)\r
{\r
- send_big_data(1,NULL,0,0,1,1,id,1);\r
- sendbigDataBufState = false;//分包同步数据不允许打断\r
- return;\r
+ return false;\r
}\r
- \r
FILE *fp= fopen(path,"r+");\r
if(fp==NULL)\r
{\r
- send_big_data(1,NULL,0,0,1,1,id,1);\r
#ifdef BLE_LOG\r
printf("打开文件失败 %s \r\n",path);\r
#endif\r
ym_free(path);\r
path = NULL;\r
}\r
- \r
- sendbigDataBufState = false;//分包同步数据不允许打断\r
- return;\r
+ return false;\r
}\r
+\r
buf = (char *)ym_malloc(sizeof(char)*512);\r
+ if(buf==NULL)\r
+ {\r
+ return false;\r
+ }\r
int ret=fread(buf,1,512,fp);\r
uint8_t count=1;\r
while (ret==512)\r
ret=fread(buf+512*count,1,512,fp);\r
count++;\r
}\r
+\r
fclose(fp);\r
+\r
if(path)\r
{\r
ym_free(path);\r
path = NULL;\r
}\r
+\r
cJSON *heart_data=cJSON_Parse(buf);\r
+\r
+ if(buf)\r
+ free(buf);\r
+ \r
#ifdef BLE_LOG\r
printf("读文件\r\n");\r
#endif\r
if(heart_data==NULL)\r
- {\r
- #ifdef BLE_LOG\r
- printf("解析失败\r\n");\r
- #endif\r
- send_big_data(1,NULL,0,0,1,1,id,1);\r
- sendbigDataBufState = false;//分包同步数据不允许打断\r
- return;\r
- }\r
+ return false; \r
cJSON * heart_data_list=cJSON_GetObjectItem(heart_data,data_item);\r
+ if(heart_data_list==NULL)\r
+ return false;\r
int item_num=cJSON_GetArraySize(heart_data_list);\r
+ if(item_num==0)\r
+ return false;\r
+\r
char *send_buf=(char *)ym_malloc(sizeof(char)*HEART_DATA_LEN);\r
+ if(send_buf==NULL)\r
+ {\r
+ cJSON_Delete(heart_data);\r
+ return false;\r
+ }\r
+ \r
int send_len=0;\r
uint32_t Packet_id=1;\r
uint16_t packet_total;\r
ym_free(send_buf);\r
send_buf = NULL;\r
}\r
- sendbigDataBufState=false;\r
\r
}else\r
{\r
ym_free(send_buf);\r
send_buf = NULL;\r
}\r
-\r
- sendbigDataBufState=false;\r
-\r
cJSON_Delete(heart_data);\r
- \r
+ return true;\r
}\r
\r
void Read_BIN_file_buf_send_bin_Data(uint8_t day,uint32_t pack_size,uint16_t id)\r
{\r
sendbigDataBufState = true;//分包同步数据不允许打断\r
- char *buf=NULL;\r
const char *data=NULL;\r
- uint8_t timeBit = 4;//默认是4个字节的时间戳\r
- uint8_t dataBit = 1;//默认是1个字节的数据\r
uint32_t data_len = 0;\r
\r
data=ble_sywee_history(day,&data_len,id);\r
sendbigDataBufState = false;//分包同步数据不允许打断\r
return;\r
}\r
- \r
- \r
\r
- uint32_t surplus_len=data_len;\r
- uint32_t pack;\r
- if(data_len%pack_size==0)\r
+ uint32_t surplus_len=data_len;\r
+ uint32_t pack;\r
+ if(data_len%pack_size==0)\r
+ {\r
+ pack=data_len/pack_size;\r
+ }\r
+ else\r
+ { \r
+ pack=data_len/pack_size+1;\r
+ }\r
+ //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+ uint32_t pack_id=1;\r
+ uint32_t offset=0;\r
+ while (surplus_len!=0)\r
+ {\r
+ if(surplus_len>=pack_size)\r
{\r
- pack=data_len/pack_size;\r
+ surplus_len=surplus_len-pack_size;\r
+ send_big_data(1,data+offset,pack_size,data_len,pack_id,pack,id,1);\r
+ offset+=pack_size;\r
}\r
else\r
- { \r
- pack=data_len/pack_size+1;\r
- }\r
- //printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
- uint32_t pack_id=1;\r
- uint32_t offset=0;\r
- while (surplus_len!=0)\r
{\r
- if(surplus_len>=pack_size)\r
- {\r
- surplus_len=surplus_len-pack_size;\r
- send_big_data(1,data+offset,pack_size,data_len,pack_id,pack,id,1);\r
- offset+=pack_size;\r
- }\r
- else\r
- {\r
- #ifdef BLE_LOG\r
- printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
- #endif\r
- send_big_data(1,data+offset,surplus_len,data_len,pack_id,pack,id,1);\r
- break;\r
- }\r
- pack_id++;\r
+ #ifdef BLE_LOG\r
+ printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+ #endif\r
+ send_big_data(1,data+offset,surplus_len,data_len,pack_id,pack,id,1);\r
+ break;\r
}\r
- free(data);\r
- sendbigDataBufState = false;\r
+ pack_id++;\r
+ }\r
+ free(data);\r
\r
}\r
\r
switch (bleSendTypeID)\r
{\r
case 0x40://同步心率历史数据\r
+ \r
+\r
EACH_DATA_LEN = HEART_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/HEART_DATA_LEN;\r
- if(num>96)\r
- {\r
- num=96;\r
- }\r
+ if(num>96)num=96;\r
#ifdef BLE_LOG\r
printf("同步心率数据,每包最多:%d 条数据 data:%d %d\r\n",num,data[0],len);\r
#endif\r
- Read_JSON_file_buf_send_bin_Data(data[0],num,0x40,"heart_data_list");\r
+ if(!Read_JSON_file_buf_send_bin_Data(data[0],num,0x40,"heart_data_list"))\r
+ send_big_data(1,NULL,0,0,1,1,0x40,1);\r
+\r
break;\r
case 0x41://同步血氧历史数据\r
EACH_DATA_LEN = SPO2_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_JSON_file_buf_send_bin_Data(data[0],num,0x41,"spo2_data_list");\r
+ if(num>96)num=96;\r
+ if(!Read_JSON_file_buf_send_bin_Data(data[0],num,0x41,"spo2_data_list"))\r
+ send_big_data(1,NULL,0,0,1,1,0x41,1);\r
+\r
break;\r
case 0x43: //同步步数历史数据\r
\r
break;\r
case 0x4b://睡眠历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
- num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_JSON_file_buf_send_bin_Data(data[0],num,0x4b,"heart_data_list");\r
+ num=(ble_nus_max_data_len-18);\r
+ if(num>482)num=482;\r
+ Send_Sleep_Bin_Data(data[0],num);\r
break;\r
case 0x21://文件目录\r
EACH_DATA_LEN = DIS_DATA_LEN;\r