增加蓝牙设置闹钟和获取闹钟 126/1 126/head
authorhcj_ <1224667075@qq.com>
Mon, 6 May 2024 06:51:34 +0000 (14:51 +0800)
committerhcj_ <1224667075@qq.com>
Mon, 6 May 2024 06:51:34 +0000 (14:51 +0800)
code/sdk/application/wearable/service/ble_service/blemoder/CMakeLists.txt
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.h
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c

index 8d6455e..93db442 100644 (file)
@@ -20,6 +20,9 @@ ${ROOT_DIR}/application/wearable/fd230app/nativeui/language
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/traing/training_card/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/config/include
 ${ROOT_DIR}/application/wearable/fd230app/nativeui/traing/include
+#${ROOT_DIR}/application/wearable/fd230app/nativeui/alarm/include 
+${ROOT_DIR}/application/wearable/fd230app/nativeui/alarmclockmanage/include 
+${ROOT_DIR}/application/wearable/fd230app/nativeui/alarmclocktimerconfig/include 
 
 )
 
index 05014b1..e060664 100644 (file)
 // #include "TraingCardPresenter.h"
 #include "TraingModel.h"
 
+#include "AlmmgrAlarmClockManage.h"
+#include "AlarmClockManage.h"
+
+
+//#include "AlarmClockModel.h"
 #ifdef __cplusplus
 #if __cplusplus
 extern "C" {
@@ -52,6 +57,146 @@ 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)
 {
@@ -85,6 +230,7 @@ char *  struct_to_json_buf_malloc_(void)
             cJSON_AddNumberToObject(itemJSON,"stp",data->stp);
             cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
             free(data);
+            data=NULL;
         }
         else{
             break;
index 72ea3a2..ccac4d3 100644 (file)
@@ -134,6 +134,16 @@ void set_traning_updata_freq(uint8_t freq);
 /*设置训练最高心率*/
 void set_traning_heart_max(uint8_t data);
 
+char* struct_to_json_buf_malloc_(void);
+
+char * struct_to_json_buf_malloc_Alarm(void);
+
+
+void ble_SetAlarmInfo(uint32_t time_hour, uint32_t time_min, uint8_t week,uint8_t id,uint8_t enable);
+
+
+void ble_delet_all_AlarmInfo(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 9de5c89..9fa98f3 100644 (file)
@@ -1374,16 +1374,53 @@ static void jsonCheck_alarm(uint8_t *buf)//json 解析闹钟数据
     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
@@ -1781,7 +1818,7 @@ uint8_t jsonCheck_weather(uint8_t *buf)//json 格式解析 天气数据
         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
@@ -2009,7 +2046,7 @@ void type2AE4Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *total
             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
@@ -2076,7 +2113,7 @@ static void switchDialCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *tot
 }\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
@@ -3555,13 +3592,25 @@ static void disDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totald
     }\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
@@ -3579,14 +3628,14 @@ static void trainiHistoryDataCmd(uint16_t pack_size)
            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
@@ -3795,9 +3844,6 @@ void type2AE3Data(uint16_t cmd ,uint8_t *data,uint16_t datalen,uint8_t *totaldat
         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
@@ -3923,6 +3969,7 @@ void type2AE3Data(uint16_t cmd ,uint8_t *data,uint16_t datalen,uint8_t *totaldat
         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
@@ -4161,7 +4208,16 @@ void readDevDataBle(uint8_t *crcnum,uint16_t len,uint8_t crcvalue)
                 {\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