日程UI优化、数据存储及读取
authorcheng <chengyf@zhihuishixun.com>
Mon, 26 Aug 2024 13:09:52 +0000 (21:09 +0800)
committercheng <chengyf@zhihuishixun.com>
Mon, 26 Aug 2024 13:09:52 +0000 (21:09 +0800)
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleData.h
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleModel.h
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListItem.cpp
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleModel.cpp
code/sdk/application/wearable/fd230app/nativeui/schedule/src/SchedulePresenter.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c

index f46d765..894190f 100644 (file)
 #include "traing/training_card/include/TraingCardView.h"
 /* -------------------------------------------------------------------------- */
 #include "schedule/include/SchedulePresenter.h"
+#include "schedule/include/ScheduleData.h"
 
 #ifdef SUPPORT_ALIPAY_SEC
 #include "AlipayMainView.h"
@@ -500,6 +501,8 @@ namespace OHOS
         }
         /*开机读取天气历史数据*/
         read_jsonHistory_weather();
+        
+        C_ScheduleDataReadFromFile();
     }
 
     void NativeLauncher::InitAllNativeSlices(void)
index 56dd43a..72e7a26 100644 (file)
@@ -11,8 +11,24 @@ extern "C" {
 #endif
 #endif
 
-namespace OHOS
-{
+// namespace OHOS
+// {
+    #define SCHEDULE_DATA_FILE "/user/userdata/scheduleData.bin"
+    #define SCHEDULE_DATA_DIRECTORY "/user/userdata/"
+
+    #define SCHEDULE_DATE_STR_MAX (8)
+    #define SCHEDULE_TOPIC_STR_MAX (64)
+    #define SCHEDULE_TIME_STR_MAX (16)
+    #define SCHEDULE_CONTENT_STR_MAX (256)
+
+    typedef struct
+    {
+        char date[SCHEDULE_DATE_STR_MAX];
+        char topic[SCHEDULE_TOPIC_STR_MAX];
+        char time[SCHEDULE_TIME_STR_MAX];
+        char content[SCHEDULE_CONTENT_STR_MAX];
+    }C_ScheduleRevData;
+
     typedef struct
     {
         std::string date; // 7/8
@@ -24,9 +40,9 @@ namespace OHOS
     #define SCHEDULE_DATA_COUNT_MAX (20)
 
     void C_ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish);
-    int C_ScheduleDataReadFromFile();
-    int C_ScheduleDataWriteToFile(); 
-}
+    int C_ScheduleDataReadFromFile(void);
+    int C_ScheduleDataWriteToFile(void); 
+// }
 
 
 #ifdef __cplusplus
index 2028510..3e028f7 100644 (file)
@@ -22,10 +22,17 @@ namespace OHOS
         std::string ScheduleItemDataTopicStrGet(uint8_t index);\r
         std::string ScheduleItemDataTimeStrGet(uint8_t index);\r
         std::string ScheduleItemDataContentStrGet(uint8_t index);\r
+        uint8_t ScheduleItemDataOriginalDataIndexGet(uint8_t index);\r
         \r
         void ScheduleOriginalDataSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish);\r
         void ScheduleOriginalDataSetByUI(uint8_t index);\r
 \r
+        int ScheduleDataReadFromFile(void);\r
+        int ScheduleDataWriteToFile(void);\r
+\r
+        void DataStringToCharArray(void);\r
+        void DataCharArrayToString(uint8_t DataCount);\r
+\r
     private:\r
         ScheduleModel();\r
         ~ScheduleModel();\r
@@ -38,6 +45,7 @@ namespace OHOS
 \r
         // original data\r
         ScheduleRevData ScheduleOriginalData_[SCHEDULE_DATA_COUNT_MAX] = {nullptr, nullptr, nullptr, nullptr};\r
+        C_ScheduleRevData C_ScheduleOriginalData_[SCHEDULE_DATA_COUNT_MAX] = {0};\r
         // item data\r
         ScheduleListItemInfo ScheduleItemData_[SCHEDULE_DATA_COUNT_MAX*2] = {nullptr, nullptr, nullptr, nullptr, 0, false, 0};\r
         uint8_t ItemCount_{0};\r
index 33e57ba..1203291 100644 (file)
@@ -38,7 +38,7 @@ namespace OHOS
         LabelExtTopic_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
         // LabelExtTopic_.SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
 
-        LabelExtTime_.SetPosition(47, 57, 105, 24);
+        LabelExtTime_.SetPosition(47, 57, 115, 24);
         LabelExtTime_.SetStyle(STYLE_TEXT_FONT, 20);
         LabelExtTime_.SetStyle(STYLE_LINE_HEIGHT, 24);
         // LabelExtTime_.SetTextId(text_id);
index fbab247..67b5ebd 100644 (file)
@@ -1,4 +1,7 @@
 \r
+// #include <sys/stat.h>\r
+// #include <iostream>\r
+// #include <fstream>\r
 #include "schedule/include/ScheduleModel.h"\r
 #include "wearable_log.h"\r
 \r
@@ -65,14 +68,25 @@ namespace OHOS
         return ScheduleItemData_[index].ContentStr.c_str();\r
     }\r
 \r
+    uint8_t ScheduleModel::ScheduleItemDataOriginalDataIndexGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].OriginalDataIndex;\r
+    }\r
+\r
     void ScheduleModel::ScheduleOriginalDataSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish)\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataSetByApp,%d,%d", index, is_finish);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleOriginalDataSetByApp,%d,%d", index, is_finish);\r
+        uint8_t len = 0;\r
 \r
         ScheduleOriginalData_[index].date.assign(data->date);\r
-        ScheduleOriginalData_[index].topic.assign(data->topic);\r
+\r
+        len = ((SCHEDULE_TOPIC_STR_MAX - 1 > data->topic.length()) ? data->topic.length() : SCHEDULE_TOPIC_STR_MAX - 1);\r
+        ScheduleOriginalData_[index].topic.assign(data->topic, 0, len);\r
+\r
         ScheduleOriginalData_[index].time.assign(data->time);\r
-        ScheduleOriginalData_[index].content.assign(data->content);\r
+\r
+        len = ((SCHEDULE_CONTENT_STR_MAX - 1 > data->content.length()) ? data->content.length() : SCHEDULE_CONTENT_STR_MAX - 1);\r
+        ScheduleOriginalData_[index].content.assign(data->content, 0, len);\r
 \r
         if(true == is_finish)\r
         {\r
@@ -95,6 +109,11 @@ namespace OHOS
             ScheduleOriginalData_[i].time.assign(ScheduleOriginalData_[i + 1].time);\r
             ScheduleOriginalData_[i].content.assign(ScheduleOriginalData_[i + 1].content);\r
         }\r
+        \r
+        ScheduleOriginalData_[i].date.clear();\r
+        ScheduleOriginalData_[i].topic.clear();\r
+        ScheduleOriginalData_[i].time.clear();\r
+        ScheduleOriginalData_[i].content.clear();\r
 \r
         DataCount -= 1;\r
         ScheduleOriginalDataCountSet(DataCount);\r
@@ -108,6 +127,7 @@ namespace OHOS
         uint8_t j = 0;\r
 \r
         memset(ScheduleItemData_, 0x0, sizeof(ScheduleListItemInfo) * SCHEDULE_DATA_COUNT_MAX*2);\r
+        ScheduleItemDataCountSet(0);\r
 \r
         for(i = 0, j = 0; i < DataCount; i++)\r
         {\r
@@ -163,30 +183,119 @@ namespace OHOS
             }\r
         }\r
 \r
-        uint8_t ItemCount = j + 1;\r
-        ScheduleItemDataCountSet(ItemCount);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataToItemData,%d,%s", j, ScheduleItemData_[0].DateStr.c_str());\r
+        if(0 != DataCount)\r
+        {\r
+            uint8_t ItemCount = j + 1;\r
+            ScheduleItemDataCountSet(ItemCount);\r
+        }\r
+        \r
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataToItemData,%d,%s", j, ScheduleItemData_[0].DateStr.c_str());\r
     }\r
 \r
+    void ScheduleModel::DataStringToCharArray(void)\r
+    {\r
+        uint8_t DataCount = ScheduleOriginalDataCountGet();\r
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:DataStringToCharArray,%d", __LINE__, DataCount);\r
 \r
-    // c func\r
-    void C_ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish)\r
+        memset(C_ScheduleOriginalData_, 0x0, sizeof(C_ScheduleRevData) * SCHEDULE_DATA_COUNT_MAX);\r
+\r
+        uint8_t i = 0;\r
+        for(i = 0; i < DataCount; i++)\r
+        {\r
+            memcpy(C_ScheduleOriginalData_[i].date, ScheduleOriginalData_[i].date.c_str(), SCHEDULE_DATE_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].topic, ScheduleOriginalData_[i].topic.c_str(), SCHEDULE_TOPIC_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].time, ScheduleOriginalData_[i].time.c_str(), SCHEDULE_TIME_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].content, ScheduleOriginalData_[i].content.c_str(), SCHEDULE_CONTENT_STR_MAX - 1);            \r
+        }\r
+    }\r
+\r
+    void ScheduleModel::DataCharArrayToString(uint8_t DataCount)\r
     {\r
-        ScheduleModel::GetInstance().ScheduleOriginalDataSetByApp(data, index, is_finish);\r
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:DataCharArrayToString,%d", __LINE__, DataCount);\r
+\r
+        uint8_t i = 0;\r
+        for(i = 0; i < DataCount; i++)\r
+        {\r
+            ScheduleOriginalData_[i].date.assign(C_ScheduleOriginalData_[i].date);\r
+            ScheduleOriginalData_[i].topic.assign(C_ScheduleOriginalData_[i].topic);\r
+            ScheduleOriginalData_[i].time.assign(C_ScheduleOriginalData_[i].time);\r
+            ScheduleOriginalData_[i].content.assign(C_ScheduleOriginalData_[i].content);\r
+        }\r
+        ScheduleOriginalDataCountSet(DataCount);\r
     }\r
 \r
-    int C_ScheduleDataReadFromFile()\r
+    // int C_ScheduleDataReadFromFile(void)\r
+    int ScheduleModel::ScheduleDataReadFromFile(void)\r
     {\r
+        FILE *fp = fopen(SCHEDULE_DATA_FILE, "rb");\r
+        if (fp == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataReadFromFile", __LINE__);\r
+            return OHOS_FAILURE;\r
+        }\r
 \r
+        fseek(fp, 0, SEEK_END);\r
+        int len = ftell(fp);\r
+        fseek(fp, 0, SEEK_SET);\r
+        uint8_t DataCount = len / sizeof(C_ScheduleRevData);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:%d,%d", __LINE__, DataCount, len);\r
+        fread((char *)C_ScheduleOriginalData_, sizeof(C_ScheduleRevData), DataCount, fp);\r
+        fclose(fp);\r
 \r
-        return 0;\r
+        DataCharArrayToString(DataCount);\r
+\r
+        ScheduleOriginalDataCountSet(DataCount);\r
+        ScheduleOriginalDataToItemData(DataCount);\r
+\r
+        return OHOS_SUCCESS;\r
     }\r
 \r
-    int C_ScheduleDataWriteToFile()\r
+    // int C_ScheduleDataWriteToFile(void)\r
+    int ScheduleModel::ScheduleDataWriteToFile(void)\r
     {\r
+        uint8_t DataCount = ScheduleOriginalDataCountGet();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile,%d", __LINE__, DataCount);\r
+        if(0 == DataCount)\r
+        {\r
+            return OHOS_FAILURE;\r
+        }\r
 \r
+        FILE *fp = fopen(SCHEDULE_DATA_FILE, "wb+");\r
+        if (nullptr == fp)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile fail", __LINE__);\r
+            return OHOS_FAILURE;\r
+        }\r
 \r
-        return 0;\r
-    }\r
+        DataStringToCharArray();\r
+\r
+        size_t ret = fwrite(C_ScheduleOriginalData_, sizeof(C_ScheduleRevData), DataCount, fp);\r
+        if (DataCount != ret)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile fail", __LINE__);\r
+        }\r
+        fclose(fp);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile success", __LINE__);\r
 \r
+        return OHOS_SUCCESS;\r
+    }\r
 }\r
+\r
+\r
+    // c func\r
+    void C_ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish)\r
+    {\r
+        OHOS::ScheduleModel::GetInstance().ScheduleOriginalDataSetByApp(data, index, is_finish);\r
+    }\r
+\r
+    int C_ScheduleDataReadFromFile(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataReadFromFile", __LINE__);\r
+        return OHOS::ScheduleModel::GetInstance().ScheduleDataReadFromFile();\r
+    }\r
+\r
+    int C_ScheduleDataWriteToFile(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataWriteToFile", __LINE__);\r
+        return OHOS::ScheduleModel::GetInstance().ScheduleDataWriteToFile();\r
+    }\r
index 458ef38..a5dc54c 100644 (file)
@@ -98,7 +98,8 @@ namespace OHOS
         if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_DeleteOKButton_))\r
         {\r
             ScheduleListItem * item = static_cast<ScheduleListItem *>(&view);\r
-            ScheduleModel_->ScheduleOriginalDataSetByUI(item->GetViewIndex());\r
+            uint8_t OriginalDataIndex = ScheduleModel_->ScheduleItemDataOriginalDataIndexGet(item->GetViewIndex());\r
+            ScheduleModel_->ScheduleOriginalDataSetByUI(OriginalDataIndex);\r
             view_->ItemListContentUpdate();\r
             view_->DisplayDataOrNoScreen();\r
             return true;\r
index 12a3cd9..819dba4 100644 (file)
@@ -101,12 +101,13 @@ bool is_first_pair(void)
 bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_end,char *title,char *data,bool is_end)
 {
 
-    OHOS::ScheduleRevData info_;
+    // OHOS::ScheduleRevData info_;
+    ScheduleRevData info_;
     
     info_.topic.clear();
     info_.content.clear();
-    info_.topic.append(title,strlen(title)+1);
-    info_.content.append(data,strlen(data)+1);
+    info_.topic.append(title,strlen(title));
+    info_.content.append(data,strlen(data));
 
     time_t currtime=timetamp_begin;
     struct tm *timeinfo;
@@ -119,7 +120,7 @@ bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_e
     char day_buf[24]={0};
     sprintf_s(day_buf,24,"%d/%d",m,d);
     info_.date.clear();
-    info_.date.append(day_buf,strlen(day_buf)+1);
+    info_.date.append(day_buf,strlen(day_buf));
 
     currtime=timetamp_end;
     timeinfo = localtime(&currtime);
@@ -129,7 +130,7 @@ bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_e
     char time_buf[24]={0};
     sprintf_s(time_buf,24,"%02d:%02d-%02d:%02d",h,min,h_,min_);
     info_.time.clear();
-    info_.time.append(time_buf,strlen(time_buf)+1);
+    info_.time.append(time_buf,strlen(time_buf));
 
     printf("///////////////////日程数据////////////////////\r\n");
     printf("date:%s\r\n",info_.date.c_str());
@@ -139,7 +140,9 @@ bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_e
     printf("//////////////////////////////////////////////\r\n");
     //printf("delete_before_file now day%d %d %d\r\n ",y,m,d);
 
-    OHOS::C_ScheduleSetByApp(&info_, id - 1, is_end);
+    // OHOS::C_ScheduleSetByApp(&info_, id - 1, is_end);
+    C_ScheduleSetByApp(&info_, id - 1, is_end);
+
     if(is_end)
     printf("////////////////////结束///////////////////\r\n");
 
index 2ace3f2..1bbb96a 100644 (file)
@@ -182,6 +182,8 @@ void uapi_save_time_of_day(void)
 
 void shutdown_reboot_prejobs_task(void)
 {
+    C_ScheduleDataWriteToFile();
+
     uapi_save_time_of_day();
     //保存步数
     do_cywee_service_check_msg(CYWEE_SERVICE_CMD_SAVE_DATA,NULL);