// #include "TraingCardPresenter.h"
#include "TraingModel.h"
+#include "AlmmgrAlarmClockManage.h"
+#include "AlarmClockManage.h"
+
+
+//#include "AlarmClockModel.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#include "bleService.h"
#include "bletest.h"
+// 闹钟数据:
+// {
+// //"code":1,
+// "alarms":
+// [
+// {
+// "id":0,
+// "repeat":[0],
+// "hour":10,
+// "minute":0,
+// "enable":1
+static const char *alarmName[6] = {"clock1", "clock2", "clock3", "clock4", "clock5", "clock6"}; // 闹钟名字的最大个数为6
+
+void ble_delet_all_AlarmInfo(void)
+{
+ AlarmClockManagement data;
+ if( 0==AlmmgrGetManagement(&data))
+ {
+
+ for(int i=0;i<data.eventAlarmCnt;i++)
+ {
+ AlmmgrDeleteAlarmClock(&data.eventAlarmInfo[i]);
+ }
+ }
+}
+
+void ble_SetAlarmInfo(uint32_t time_hour, uint32_t time_min, uint8_t week,uint8_t id,uint8_t enable)
+{
+ AlarmClockInfo eventAlarmInfo;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::SetAlarmInfo!");
+
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "hour = %u, minute = %u", time_hour, time_min);
+ eventAlarmInfo.alarmTime = ((time_hour << 16) | time_min); // 闹钟时间数据的小时位右边16位
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::NewAlarmTime eventAlarmInfo.alarm_time = %u",
+ eventAlarmInfo.alarmTime);
+ eventAlarmInfo.alarmClockId = id;
+ eventAlarmInfo.alarmClockEnable = enable;
+ eventAlarmInfo.alarmType = 1;
+ eventAlarmInfo.delayNum = 0;
+ eventAlarmInfo.nameLen = strlen(alarmName[id]);
+ eventAlarmInfo.index = id;
+ eventAlarmInfo.repeatPeriod = week;
+ if (strcpy_s(eventAlarmInfo.alarmClockName, strlen(alarmName[id]) + 1,
+ alarmName[id]) != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::SetAlarmInfo copy alarmname error!");
+ return;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::NewAlarmTime clock name = %s, id = %u",
+ eventAlarmInfo.alarmClockName, eventAlarmInfo.alarmClockId);
+
+ if ( id+1 >= AlmmgrGetEventAlarmCnt()) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::SetAlarmWeek new time!");
+ int ret = AlmmgrAddAlarmClock(&eventAlarmInfo);
+ } else {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmClockModel::SetAlarmWeek modify time!");
+ AlmmgrUpdataAlarmClock(&eventAlarmInfo);
+ }
+}
+
+
+char * struct_to_json_buf_malloc_Alarm(void)
+{
+ AlarmClockManagement data;
+ cJSON *dataJSON = cJSON_CreateObject();
+ cJSON* data_arryJSON = cJSON_CreateArray();
+
+ if( 0==AlmmgrGetManagement(&data))
+ {
+
+ for(int i=0;i<data.eventAlarmCnt;i++)
+ {
+ cJSON* itemJSON = cJSON_CreateObject();
+ printf("闹钟数据:%d\r\n",data.eventAlarmInfo[i].alarmClockId);
+ cJSON_AddNumberToObject(itemJSON,"id",data.eventAlarmInfo[i].alarmClockId);
+
+ printf("闹钟使能:%d\r\n",data.eventAlarmInfo[i].alarmClockEnable);
+ cJSON_AddNumberToObject(itemJSON,"enable",data.eventAlarmInfo[i].alarmClockEnable);
+
+ printf("闹钟重复:%d\r\n",data.eventAlarmInfo[i].repeatPeriod);
+ int anNum[7] = {0};
+ int repeatPeriod_num=0;
+ for(int j=0 ; j<7;j++)
+ {
+ if(data.eventAlarmInfo[i].repeatPeriod & 0b00000001<<j)
+ {
+ if(j==0)
+ {
+ anNum[repeatPeriod_num]=7;
+ }
+ else
+ {
+ anNum[repeatPeriod_num]=j;
+ }
+
+
+ repeatPeriod_num++;
+ }
+ }
+ if(repeatPeriod_num==0)
+ {
+ repeatPeriod_num=1;
+ }
+ cJSON* repeatPeriod= cJSON_CreateIntArray(anNum,repeatPeriod_num);
+
+ cJSON_AddItemToObject(itemJSON,"repeat",repeatPeriod);
+
+
+ uint8_t refreshHour = data.eventAlarmInfo[i].alarmTime >> 16; // 闹钟存储小时位需要右移16位
+
+ uint8_t refreshMin = data.eventAlarmInfo[i].alarmTime & 0x00FF; // 得出闹钟时间的分钟位需要将左置位16位清零
+
+ cJSON_AddNumberToObject(itemJSON,"hour",refreshHour);
+
+ cJSON_AddNumberToObject(itemJSON,"minute",refreshMin);
+
+ cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
+
+ //cJSON_AddNumberToObject(itemJSON,"src",data->src);
+ }
+
+ // printf("闹钟数据:%d\r\n",data.alarmTime);
+ // printf("闹钟数据:%d\r\n",data.repeatPeriod);
+ // printf("闹钟数据:%d\r\n",data.alarmClockEnable);
+ // i++;
+ }
+ else
+ {
+
+ printf("获取闹钟失败\r\n");
+ }
+
+ cJSON_AddItemToObject(dataJSON,"alarms",data_arryJSON);
+
+ char *json_format = cJSON_PrintUnformatted(dataJSON);
+ cJSON_Delete(dataJSON);
+ int pSize = cJSON_GetArraySize(dataJSON);
+ printf("闹钟数据 :%s\r\n",json_format);
+ return json_format;
+
+}
char * struct_to_json_buf_malloc_(void)
{
cJSON_AddNumberToObject(itemJSON,"stp",data->stp);
cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
free(data);
+ data=NULL;
}
else{
break;
uint8_t *json;\r
json = buf;\r
cJSON* root = cJSON_Parse((const char *)json);\r
+\r
if (root == NULL) {\r
printf("闹钟 JSON解析错误\n");\r
return;\r
}\r
+ else\r
+ {\r
+ printf("闹钟 %s\r\n",json);\r
+ }\r
+ ble_delet_all_AlarmInfo();\r
+\r
cJSON* alarms = cJSON_GetObjectItem(root, "alarms");\r
int alarmCount = cJSON_GetArraySize(alarms);\r
+ \r
+ for(int i=0;i<alarmCount;i++)\r
+ {\r
+ uint8_t week=0;\r
+ cJSON *data=cJSON_GetArrayItem(alarms,i);\r
+\r
+ int id=cJSON_GetObjectItem(data,"id")->valueint;\r
+ cJSON* repeat=cJSON_GetObjectItem(data,"repeat");\r
+ int array_size = cJSON_GetArraySize(repeat);\r
+ for(int j=0;j<array_size;j++)\r
+ {\r
+ int day = cJSON_GetArrayItem(repeat,j)->valueint;\r
+ if(day==7)\r
+ {\r
+ week|=0b00000001;\r
+ }\r
+ else\r
+ {\r
+ week|=0b00000001<<(day);\r
+ }\r
+ \r
+ }\r
+ int hour=cJSON_GetObjectItem(data,"hour")->valueint;\r
+ int minute=cJSON_GetObjectItem(data,"minute")->valueint;\r
+ int enable=cJSON_GetObjectItem(data,"enable")->valueint;\r
+ ble_SetAlarmInfo(hour, minute,week,i,enable);\r
+\r
+ }\r
+ cJSON_Delete(root);\r
printf("alarmCount %d\n",alarmCount);\r
+ \r
}\r
\r
-void GetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
+void SetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的屏幕参数\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
int tempMin=cJSON_GetObjectItem(data,"tempMin")->valueint;\r
int iconDay=cJSON_GetObjectItem(data,"iconDay")->valueint;\r
int fxDate=cJSON_GetObjectItem(data,"fxDate")->valueint;\r
- char * textDay=cJSON_GetObjectItem(data,"textDay")->valueint;\r
+ char * textDay=cJSON_GetObjectItem(data,"textDay")->valuestring;\r
int tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint;\r
set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i);\r
}\r
getAPPaddressbook(typeID,data,datalen,totalData,crcvalue);\r
break;\r
case SET_ALARM_DATA_CMD:\r
- GetAlarmDataCmd(typeID,data,datalen,totalData,crcvalue);\r
+ SetAlarmDataCmd(typeID,data,datalen,totalData,crcvalue);\r
printf("alarm infor !!!!!!!!!!\r\n");\r
break;\r
case DELETE_FILE_CMD:\r
}\r
\r
//获取闹钟数据\r
-static void SetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
+static void GetAlarmDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
\r
uint32_t tmp = 1;\r
}\r
}\r
//同步基础训练历史数据 training history data\r
-static void trainiHistoryDataCmd(uint16_t pack_size)\r
+static void Send_json_Data_Cmd(uint16_t pack_size,uint8_t id)\r
{\r
\r
\r
- char *json_format = struct_to_json_buf_malloc_();\r
+ char *json_format = NULL;\r
+ switch (id)\r
+ {\r
+ case 0x49:\r
+ json_format=struct_to_json_buf_malloc_();\r
+ break;\r
+ case 0x01:\r
+ json_format=struct_to_json_buf_malloc_Alarm();\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ \r
+\r
uint32_t data_len = strlen(json_format);\r
- char *data=(char *)malloc(pack_size+17);\r
uint32_t surplus_len=data_len;\r
uint32_t pack;\r
if(data_len%pack_size==0)\r
if(surplus_len>=pack_size)\r
{\r
surplus_len=surplus_len-pack_size;\r
- send_big_data(1,json_format+offset,pack_size,data_len,pack_id,pack,0x49,1);\r
+ send_big_data(1,json_format+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,json_format+offset,surplus_len,data_len,pack_id,pack,0x49,1);\r
+ send_big_data(1,json_format+offset,surplus_len,data_len,pack_id,pack,id,1);\r
break;\r
}\r
pack_id++;\r
case SEND_UPPAIR_CMD://清除配对指令\r
clearPaireCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
- case ALARM_CMD:\r
- SetAlarmDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
- break;\r
case SWITCH_DIAL_CMD://表盘切换\r
switchDialCmd(cmd,data,datalen,totaldata,crcvalue);\r
break;\r
case SYN_DIS_HISTORY_DATA_CMD://同步距离历史数据\r
case SYN_BASIC_TRANIN_HISTORY_DATA_CMD://同步基础训练历史数据\r
case SYN_SLEEP_HISTORY_DATA_CMD://睡眠历史数据\r
+ case ALARM_CMD://获取手表闹钟//同步闹钟\r
readDevDataBle(totaldata,datalen+18,crcvalue);\r
break;\r
\r
{\r
num=482;\r
}\r
- trainiHistoryDataCmd(200);\r
+ Send_json_Data_Cmd(num,0x49);\r
+ break;\r
+ case 0x01://同步闹钟\r
+ EACH_DATA_LEN = DIS_DATA_LEN;\r
+ num=(ble_nus_max_data_len-18);\r
+ if(num>482)\r
+ {\r
+ num=482;\r
+ }\r
+ Send_json_Data_Cmd(num,0x01);\r
break;\r
case 0x4b://睡眠历史数据\r
EACH_DATA_LEN = DIS_DATA_LEN;\r