GraphicService::GetInstance()->PostGraphicEvent(SetZeroAlarm);\r
}\r
\r
+static void on_time_CallBackProc(void)\r
+{\r
+ AlarmClockEventData unuse;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "on_time_CallBackProc");\r
+ GraphicService::GetInstance()->PostGraphicEvent(\r
+ std::bind(AlarmTimerEventPublish, TOPIC_EVENT_ON_TIME, unuse));\r
+}\r
+\r
+\r
void AlarmScan(void *arg)\r
{\r
struct tm curTime;\r
g_alarmCtrB.state = ALARM_STATUS_CREATED;\r
}\r
}\r
+ if(curTime.tm_min==0 && curTime.tm_sec==0)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time: %d : %d",curTime.tm_hour,curTime.tm_min);\r
+ on_time_CallBackProc();\r
+ }\r
}\r
\r
static int32_t AlarmCreate(AlarmCtrl *alarmCtrl, AlarmCallBack callback)\r
}
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "read_addressbook_bin_file!!!!!!");
char* buf = (char *)malloc(512);
+ memset(buf,0,512);
int ret=fread(buf,1,512,fp);
if(ret==0)
free(buf);
return;
}
-
+
int offset_f=512;
while (ret==512)
{
TryAgainLaterButton->SetVisible(false);
TryAgainLaterLabel->SetVisible(false);
- NEWMSGLabel->SetVisible(false);
- NEWVersionIdLabel->SetVisible(false);
+ NEWMSGLabel->SetVisible(true);
+ NEWVersionIdLabel->SetVisible(true);
//VersionIdLabel->SetText("OTA V4.0.0");
updatasider->SetVisible(true);
#include "bleService.h"
#include "bletest.h"
+
+#define CWM_HISTORY_DATA_PATH "/system/"
+
+char * ble_step_history(uint8_t day)
+{
+ char path_[64]={0};
+ char timeday[12] = {0};
+ uapi_get_YYMMDD_Time(timeday, '_');
+ sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_PATH,timeday);
+
+ FILE * fp = fopen(path_,"rb+");
+ if(fp==NULL)
+ {
+ return NULL;
+ }
+ uint32_t size;
+ if (fp != NULL)
+ {
+ fseek(fp, 0, SEEK_END); // 将文件指针移动到文件末尾
+ size = ftell(fp); // 获取当前文件指针位置,即文件大小
+ fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+ }
+
+ char * buf=(char *)malloc(size);
+ uint32_t ret= fread(buf,1,size,fp);
+ printf("fread %d \r\n",ret);
+
+ return buf;
+
+}
void ble_set_sleep_remind(msg_get_sleep_param_info_t data)
{
OHOS::ConfigModel *p_ConfigModel = OHOS::ConfigModel::GetInstance();
printf("睡前提醒 %d\r\n",data.bedtime_alarm);
p_ConfigModel->set_condigData_Int(OHOS::ConfigModel::CONFIFMOFEL_ITEM_SLEEP_REMIND,data.bedtime_alarm);
-
-
}
return;
}
void ble_get_sleep_remind(msg_get_sleep_param_info_t *data);
void ble_set_sleep_remind(msg_get_sleep_param_info_t data);
+
+char * ble_step_history(uint8_t day);
#ifdef __cplusplus
#if __cplusplus
}
return crcbuf;\r
}\r
\r
+#define USE_DEMO\r
static bool Check_CRC(uint8_t *data,uint16_t len,uint8_t crcvalue)//计算20byte的的校验位\r
{\r
uint8_t crcbuf = 0;\r
if(uapi_dev_runtime_get_android_connection_status()==1)\r
return true;\r
else\r
+ #ifndef USE_DEMO\r
return false;\r
+ #else\r
+ return true;\r
+ #endif\r
}\r
\r
}\r
\r
\r
\r
-void Read_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)\r
+void Read_JSON_file_buf_send_bin_Data(uint8_t num,uint16_t id,char *data_item)\r
{\r
sendbigDataBufState = true;//分包同步数据不允许打断\r
char *buf=NULL;\r
\r
}\r
\r
+void Read_BIN_file_buf_send_bin_Data(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
+ switch (id)\r
+ {\r
+ case 0x43: //同步步数历史数据\r
+ data=ble_step_history(0);\r
+ dataBit = 4;//心率数据字节4个字节 uint32_t\r
+ break;\r
+ case 0x44://同步燃脂时间数据\r
+ data=NULL;\r
+ break;\r
+ case 0x45://同步站立历史数据\r
+ data=NULL;\r
+ break;\r
+ case 0x46://同步卡路里历史数据\r
+ data=NULL; \r
+ break;\r
+ case 0x47://同步距离历史数据\r
+ data=NULL; \r
+ break;\r
+ case 0x49://同步基础训练历史数据\r
+ data=NULL; \r
+ break;\r
+ case 0x4b://睡眠历史数据\r
+ data=NULL;\r
+ break;\r
+ }\r
+\r
+ if(data==NULL)\r
+ {\r
+ send_big_data(1,NULL,0,0,1,1,id,1);\r
+ sendbigDataBufState = false;//分包同步数据不允许打断\r
+ return;\r
+ }\r
+ \r
+ uint32_t data_len = strlen(data);\r
+\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
+ 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
+ \r
+ printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+ send_big_data(1,data+offset,surplus_len,data_len,pack_id,pack,id,1);\r
+ break;\r
+ }\r
+ pack_id++;\r
+ }\r
+ free(data);\r
+ sendbigDataBufState = false;\r
+ \r
+}\r
+\r
//手机app下发读设备数据指令\r
void readDevDataBle(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
num=96;\r
}\r
printf("同步心率数据,每包最多:%d 条数据 data:%d\r\n",num,data[0]);\r
- Read_file_buf_send_bin_Data(num,0x40,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x40,"heart_data_list");\r
break;\r
case 0x41://同步血氧历史数据\r
printf("同步血氧数据\r\n");\r
EACH_DATA_LEN = SPO2_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x41,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x41,"heart_data_list");\r
break;\r
case 0x43: //同步步数历史数据\r
- EACH_DATA_LEN = STEP_DATA_LEN;\r
- num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x43,"heart_data_list");\r
+ \r
+ num=(ble_nus_max_data_len-18);\r
+ if(num>482)\r
+ {\r
+ num=482;\r
+ }\r
+ Read_BIN_file_buf_send_bin_Data(num,0x43);\r
\r
break;\r
case 0x44://同步燃脂时间数据\r
EACH_DATA_LEN = FATTIME_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x44,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x44,"heart_data_list");\r
break;\r
case 0x45://同步站立历史数据\r
EACH_DATA_LEN = STAND_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x45,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x45,"heart_data_list");\r
break;\r
case 0x46://同步卡路里历史数据\r
EACH_DATA_LEN = KCAL_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x46,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x46,"heart_data_list");\r
break;\r
case 0x47://同步距离历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x47,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x47,"heart_data_list");\r
break;\r
case 0x49://同步基础训练历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
case 0x4b://睡眠历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x4b,"heart_data_list");\r
+ Read_JSON_file_buf_send_bin_Data(num,0x4b,"heart_data_list");\r
\r
break;\r
default:\r
TOPIC_DEMO_ACORE_MSG = TOPIC_START_NUM,
TOPIC_DEMO_ALL_MSG,
TOPIC_EVENT_ALARM_RING,
+ TOPIC_EVENT_ON_TIME,
TOPIC_EVENT_UTCTIME_UPDATE,
TOPIC_EVENT_NEXTDAY_UPDATE,
TOPIC_EVENT_WEARSTATE_UPDATE,
{TOPIC_DEMO_ACORE_MSG, A_CORE_MASK, 1},
{TOPIC_DEMO_ALL_MSG, A_CORE_MASK, 1},
{TOPIC_EVENT_ALARM_RING, A_CORE_MASK, 1},
+ {TOPIC_EVENT_ON_TIME, A_CORE_MASK, 1},
{TOPIC_EVENT_UTCTIME_UPDATE, A_CORE_MASK, 1},
{TOPIC_EVENT_NEXTDAY_UPDATE, A_CORE_MASK, 1},
{TOPIC_EVENT_WEARSTATE_UPDATE, A_CORE_MASK, 1},
/* 订阅事件设定优先级 */
const PriorityMapper g_pri_mapper[] = {
{TOPIC_EVENT_ALARM_RING, PRIORITY_TWO},
+ {TOPIC_EVENT_ON_TIME,PRIORITY_TWO},
{TOPIC_EVENT_NEXTDAY_UPDATE, PRIORITY_TWO},
{TOPIC_EVENT_ACTIVITY_UPDATE,PRIORITY_TWO},
{TOPIC_EVENT_INACTIVITY_UPDATE,PRIORITY_TWO},
void MsgCenterSubscribe()
{
MsgCenterSubscribeTopic(TOPIC_EVENT_ALARM_RING);
+ MsgCenterSubscribeTopic(TOPIC_EVENT_ON_TIME);
MsgCenterSubscribeTopic(TOPIC_EVENT_NEXTDAY_UPDATE);
MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_INCOMMING);
MsgCenterSubscribeTopic(TOPIC_EVENT_HFP_PHONE_ACTIVE);
AlarmPopUpPresenter::GetInstance()->DelayAlarmRing();
}
}
+
+
+void MsgCenterNotifyONtimeProc(const Topic topic, Request* req)
+{
+ unused(req);
+ // The alarm notification is not displayed if the incoming call notification is already being processed
+ // cywee_save_data();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "保存每小时步数");
+ step_history_save();
+}
+
+
#ifdef FD230
#ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
/*充电器已插上*/
/* 订阅事件通知逻辑可定制 */
static msg_center_notify_table_t g_msg_center_notify_table[] = {
{TOPIC_EVENT_ALARM_RING, MsgCenterNotifyAlarmProc},
+ {TOPIC_EVENT_ON_TIME, MsgCenterNotifyONtimeProc},//增加整点保存数据
{TOPIC_EVENT_NEXTDAY_UPDATE, MsgCenterNotifyNextDayProc},
{TOPIC_EVENT_HFP_INCOMMING, MsgCenterNotifyHfpIncomingProc},
{TOPIC_EVENT_HFP_PHONE_ACTIVE, MsgCenterNotifyHfpPhoneProc},
#include "stdint.h"
#include "errcode.h"
+
extern uint64_t CWM_OS_GetTimeNs(void);
extern int CWM_OS_dbgOutput(const char * format);
extern int CWM_OS_dbgPrintf(const char * format,...);
extern void* CWM_OS_malloc(int size);
extern void CWM_OS_free(void *ptr);
extern void CWM_OS_saveData(int* data, uint32_t len);
+extern void CWM_OS_saveData_history(int* new_data,int *history ,uint32_t len);
extern void CWM_OS_restoreData(int* data, uint32_t len);
/********************CYWEE LIB*************************/
void cywee_hand_updown_switch(int cmd);
void cywee_ar_alert_switch(int cmd);
void cywee_save_data(void);
+void step_history_save(void);
extern uint8_t hrs_mode_state;
#pragma pack()
}
fclose(fp);
}
+
+
+#define CWM_HISTORY_DATA_PATH "/system/"
+
+void CWM_OS_saveData_history(int* new_data,int *history ,uint32_t len){
+ char path_[64]={0};
+ char timeday[12] = {0};
+ uapi_get_YYMMDD_Time(timeday, '_');
+
+ sprintf_s(path_,64,"%s%s.bin",CWM_HISTORY_DATA_PATH,timeday);
+ CWM_OS_dbgPrintf(" save path %s \n",path_);
+
+ FILE * fp = fopen(path_,"ab+");
+ if(fp==NULL)
+ {
+ CWM_OS_dbgPrintf("open fail\n");
+ return;
+ }
+ uint32_t creationTime;
+ int ret =uapi_get_timestampe_ss(&creationTime);
+
+ CWM_OS_dbgPrintf("uapi_get_timestampe_ss %d\n",ret);
+
+ ret =fwrite(&creationTime,1,len,fp);
+ if(ret==0)
+ {
+ CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+ }
+
+ //新数据减去旧数据,作为这一个小时的步数值
+
+ int data= *new_data-*history;
+ ret =fwrite(&data,1,len,fp);
+ if(ret==0)
+ {
+ CWM_OS_dbgPrintf("fwrite failed %d\n",ret);
+ }
+
+ *history=*new_data;
+
+ fclose(fp);
+}
+
+
+
void CWM_OS_restoreData(int* data, uint32_t len){
FILE * fp = fopen(CWM_DATA_PATH,"rb");
if(fp==NULL)
int history_step = 0;
int stepcount = 0;
+int history_step_=0;//存一个小时前的步数数据,每次保存步数时会更新改数据
+
void cywee_save_data(void)
{
CWM_OS_saveData(&stepcount,sizeof(int));
+
+}
+
+void step_history_save(void)
+{
+ CWM_OS_saveData_history(&stepcount,&history_step_,sizeof(int));
}
void cywee_ar_alert_switch(int cmd)
//CWM_Sensor_Enable(IDX_ALGO_ABSOLUTE_STATIC);
//CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
CWM_OS_restoreData(&history_step,sizeof(int));
+ history_step_=history_step;
cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);