Merge #43 into xts_origin from refs/changes/43/head 44/target/1 45/target/1
authorsnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Thu, 18 Apr 2024 07:39:21 +0000 (07:39 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Thu, 18 Apr 2024 07:39:21 +0000 (07:39 +0000)
Code review from snickersun@163.com

* refs/changes/43/head: (2 commits squashed)

  - 添加custom_cmd_service task,解决cat1 开机后cat1 Vote 无法消除的问题。

  - 修改acc 25Hz 让系统可以休眠

Signed-off-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/43
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/drivers/peripheral/cywee/service/cywee_service.c
code/sdk/drivers/peripheral/cywee/src/main_dml.c
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ctl.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ctl.h
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/utils/CMakeLists.txt
code/sdk/drivers/peripheral/utils/custom_cmd_service.c [new file with mode: 0644]
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index fec0bbc..a98cd54 100755 (executable)
@@ -364,6 +364,7 @@ static void thread_main(const void *unused)
     slip_uart_init();\r
 #endif\r
 \r
+    uapi_custom_cmd_service_init();\r
 \r
 #ifdef ENABLE_CYWEE\r
     uapi_cywee_service_init();\r
index dfe1c9f..0aaa6e9 100644 (file)
@@ -46,7 +46,7 @@ typedef struct
  * 其他cmd在Header里定义,对外开放
  */
 
-#define CYWEE_CHECK_MS 20
+#define CYWEE_CHECK_MS 40
 
 osTimerId_t g_cywee_service_timer = NULL;
 static bool g_batter_service_initialled = false;
index 4d8ad52..b38dd4b 100644 (file)
@@ -750,11 +750,18 @@ int cywee_main_dml(int cmd)
         //设置acc gyro 相关参数
         memset(&scl, 0, sizeof(scl));
         scl.iData[0] = 1;
+        scl.iData[7] = 5;  //轴向配置
+    #if 0
         scl.iData[3] = 2;
         scl.iData[4] = 2; //1 anytime 2 fifo
         scl.iData[6] = 5; //先設定5
-        scl.iData[7] = 5;
         scl.iData[8] = 52; // for st sensor(52Hz)
+    #else
+        scl.iData[3] = 2;
+        scl.iData[4] = 2; //1 anytime 2 fifo
+        scl.iData[6] = 5; //fifocount 先設定5
+        scl.iData[8] = 25; // for st sensor(52Hz)
+    #endif
         CWM_SettingControl(SCL_DML_DRV_AG_CONFIG, &scl);
         //CWM_OS_dbgPrintf("[DBG] %s %d\n", __func__,__LINE__);
 
index 4ff3178..984ee9c 100644 (file)
@@ -10,7 +10,7 @@
 #include "voice_call_volte_sample_wrapper.h"
 #include "los_base.h"
 #include "wearable_log.h"
-
+#include "custom_utils.h"
 
 
 // int32_t VoiceCallVolteSample(int32_t argc, const char *argv[])
@@ -78,7 +78,7 @@ void uapi_cat1_stop_volte_voice(void)
     VoiceCallVolteSample(1,(const char**)argv);
 }
 
-void uapi_cat1_remove_audio_vote(void)
+void uapi_cat1_remove_cat1_vote(void)
 {
     uint8_t cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
     if (cnt == 1) {
@@ -88,7 +88,7 @@ void uapi_cat1_remove_audio_vote(void)
     }
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"\r\nCAT1 SERVICE MCU SLEEP SUCCESS\r\n");
 }
-void uapi_cat1_add_audio_vote(void)
+void uapi_cat1_add_cat1_vote(void)
 {
     uint8_t cnt = pm_veto_get_id_cnt(PM_ID_CAT1);
     if (cnt == 0) {
@@ -103,8 +103,8 @@ extern void restart_sleep_cat1_timer(void);
 void cat1_ring_isr_callback(pin_t pin, uintptr_t param)
 {
     WEARABLE_LOGW(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1_ring_isr_callback %d 0x%X\n",pin,param);
-    uapi_cat1_add_audio_vote();
-    restart_sleep_cat1_timer();
+    uapi_cat1_add_cat1_vote();
+    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_REMOVE_CAT1VOTE);
 }
 
 void uapi_cat1_wakeup_cat1(uint8_t wakeup)
index 75406a5..fdba58e 100644 (file)
@@ -15,8 +15,8 @@ uint32_t uapi_cat1_reset(uint32_t pwron);
 void cat1_ring_isr_callback(pin_t pin, uintptr_t param);\r
 void uapi_cat1_start_volte_voice(void);\r
 void uapi_cat1_stop_volte_voice(void);\r
-void uapi_cat1_remove_audio_vote(void);\r
-void uapi_cat1_add_audio_vote(void);\r
+void uapi_cat1_remove_cat1_vote(void);\r
+void uapi_cat1_add_cat1_vote(void);\r
 void uapi_cat1_wakeup_cat1(uint8_t wakeup);\r
 bool uapi_cat1_get_power_stat(void);\r
 \r
index 04f9297..eef29ad 100644 (file)
@@ -47,7 +47,7 @@ extern "C" {
 #include "cat1_ctl.h"
 #include "tcxo.h"
 #include "custom_utils.h"
-#include "cmsis_os2.h"
+#include "cmsis_os.h"
 
 
 
@@ -101,8 +101,8 @@ struct tcp_msg_t {
 
 static int g_listen_sock = 0;
 struct sockaddr_in sourceAddr = {0};
-osTimerId_t g_timer_time_sync = NULL;
-osTimerId_t g_timer_cat1_sleep = NULL;
+static osTimerId_t g_timer_time_sync = NULL;
+static osTimerId_t g_timer_cat1_sleep = NULL;
 static uint8_t g_time_synced = 0;
 #define MAX_TIME_SYNC_RETRY_TIME 5
 static uint8_t g_time_sync_retry_time = 0;
@@ -143,10 +143,10 @@ static void udp_send_response(char *tx_buffer, char *head, char *content)
     if( len > 0 ) {
         err = sendto(g_listen_sock, tx_buffer, len, 0, (struct sockaddr *)&sourceAddr, sizeof(sourceAddr));
         if (err < 0) {
-            printf("Error occured during sending: errno %d\n", errno);
+            PRINT("Error occured during sending: errno %d\n", errno);
                }
     } else {
-        printf("Error occured unkown send data\n");
+        PRINT("Error occured unkown send data\n");
     }
 }
 #include "uart_porting.h"
@@ -155,7 +155,7 @@ void udp_send_msg_toCat1(char cmd,char *content)
 
     if (!uapi_cat1_get_power_stat())
     {
-        printf("Error cat1 poweroff skipp send data\n");
+        PRINT("Error cat1 poweroff skipp send data\n");
         return ;
     }
     uapi_cat1_wakeup_cat1(1);
@@ -204,7 +204,7 @@ void cat1_getsignal(void)
 }
 void cat1_gettime(void)
 {
-    printf("UDP_CMD_GET_TIME\n");
+    PRINT("UDP_CMD_GET_TIME\n");
     udp_send_msg_toCat1(UDP_CMD_GET_TIME,"0");
     
 }
@@ -326,26 +326,34 @@ int cat1_handle_timesync(struct tcp_msg_t *msg)
 
 static void timeout_handler_sleep_cat1(void)
 {
-    printf("sleep mcu\n");
-    uapi_cat1_remove_audio_vote(); //接收到指令,让自己可以睡
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"sleep mcu\n");
     // uapi_cat1_wakeup_cat1(0);// 反馈给cat1,它也可以自己睡
     if(osTimerIsRunning(g_timer_cat1_sleep)==1  )
     {
-        osTimerStop(g_timer_cat1_sleep);
+        osStatus_t ret = osTimerStop(g_timer_cat1_sleep);
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"osTimerStop  g_timer_cat1_sleep ret %d\n",ret);
     }
+    uapi_cat1_remove_cat1_vote(); //接收到指令,让自己可以睡
+
 }
 //目前只在 被cat1唤醒的中断函数里执行,
 void restart_sleep_cat1_timer(void)
 {
-    if (g_timer_cat1_sleep == NULL) return ;
+    if (g_timer_cat1_sleep == NULL) 
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,"g_timer_cat1_sleep is NULL \n");
+        return ;
+    }
     if(osTimerIsRunning(g_timer_cat1_sleep)==1  )
     {
-        osTimerStop(g_timer_cat1_sleep);
+        osStatus_t ret = osTimerStop(g_timer_cat1_sleep);
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"osTimerStop  g_timer_cat1_sleep ret %d\n",ret);
     }
     if(osTimerIsRunning(g_timer_cat1_sleep)==0  )
     {
-        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"restart_sleep_cat1_timer \n");
-        osTimerStart(g_timer_cat1_sleep,5000); //20秒后重试同步时间
+        uint32_t tick = (uint32_t )osMs2Tick(5000); // 5 seconds  
+        osStatus_t ret = osTimerStart(g_timer_cat1_sleep,tick); //5秒后重试同步时间
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"osTimerStart g_timer_cat1_sleep ret %d\n",ret);
     }
 }
 
@@ -353,20 +361,20 @@ void restart_sleep_cat1_timer(void)
 static void time_sync_func(void)
 {
     
-    printf("time_sync_func\n");
+    PRINT("time_sync_func\n");
     cat1_gettime();
     
     if(osTimerIsRunning(g_timer_time_sync)==1 && g_time_synced == 1 )
     {
-        osTimerStop(g_timer_time_sync);
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_synced == 1 stop timer \n");
+        osStatus_t ret = osTimerStop(g_timer_time_sync);
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_synced == 1 stop timer  , ret %d\n",ret);
     }else{
         g_time_sync_retry_time ++;
     }
     if( g_time_sync_retry_time >= MAX_TIME_SYNC_RETRY_TIME)
     {
-         osTimerStop(g_timer_time_sync);
-         WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_sync_retry_time >= %d stop timer \n",MAX_TIME_SYNC_RETRY_TIME);
+         osStatus_t ret = osTimerStop(g_timer_time_sync);
+         WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 g_time_sync_retry_time >= %d stop timer ,ret %d\n",MAX_TIME_SYNC_RETRY_TIME,ret);
 
     }
 }
@@ -378,8 +386,10 @@ void restart_time_sync(void)
     g_time_sync_retry_time = 0;
     if(osTimerIsRunning(g_timer_time_sync)==0  )
     {
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 restart_time_sync timer \n");
-        osTimerStart(g_timer_time_sync,5000); //20秒后重试同步时间
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 restart_time_sync timer \n");
+        uint32_t tick = (uint32_t )osMs2Tick(5000); // 60000: seconds of a minute
+        osStatus_t ret = osTimerStart(g_timer_time_sync,tick); //5秒后重试同步时间
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 restart_time_sync timer ret %d\n",ret);
     }
         
 }
@@ -430,10 +440,10 @@ static int udp_packet_parse(char *rx_buffer, int len)
                            index = cat1_handle_call_disconnected(msg);
                 break;
             case UDP_CMD_CAT1_OTA_UPDATE:
-                printf("CAT1_OTA_UPDATE reply %s\n",msg->buffer);
+                PRINT("CAT1_OTA_UPDATE reply %s\n",msg->buffer);
                 break;
             case UDP_MSG_REPLY:
-                printf("UDP_MSG_REPLY reply %s\n",msg->buffer);
+                PRINT("UDP_MSG_REPLY reply %s\n",msg->buffer);
                 //"BOOTUP,pyVer,PY_SRV_V4,modemVer,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA0312"
                 if(strstr(msg->buffer,"BOOTUP")!=NULL)
                 {
@@ -447,14 +457,14 @@ static int udp_packet_parse(char *rx_buffer, int len)
                 index = cat1_handle_networ_msg(msg);
                 break;
                    default:
-                           printf("error message: %s\n", rx_buffer);
+                           PRINT("error message: %s\n", rx_buffer);
                 index = 1;
                 break;
         }
         // if (index > 0) //需要反馈的指令才返回OK
             // udp_send_msg_toCat1( msg->head[1], "OK");
     } else {
-        printf("wrong format msg and exit\n");
+        PRINT("wrong format msg and exit\n");
         index = 1;
     }
     
@@ -479,14 +489,14 @@ static int udp_socket_init()
 
     int listen_sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
     if (listen_sock < 0) {
-        printf("Unable to create socket: errno %d\n", errno);
+        PRINT("Unable to create socket: errno %d\n", errno);
         return -1;
     }
     setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
 
     int err = bind(listen_sock, (struct sockaddr *)&destAddr, sizeof(destAddr));
     if (err != 0) {
-        printf("Socket unable to bind: errno %d\n", errno);
+        PRINT("Socket unable to bind: errno %d\n", errno);
         return -1;
     }
     
@@ -509,7 +519,7 @@ void cat1_server_task(void *pvParameters)
         if( g_listen_sock > 0 ) close(g_listen_sock);
         g_listen_sock = udp_socket_init();
         if( g_listen_sock < 0 ) {
-            printf("socket init fail and retry\n");
+            PRINT("socket init fail and retry\n");
             // vTaskDelay(1000/portTICK_RATE_MS);
             cat1_msleep(1000);
             continue;
@@ -522,15 +532,15 @@ void cat1_server_task(void *pvParameters)
             int len = recvfrom(g_listen_sock, rx_buffer, sizeof(rx_buffer) - 1, 0, (struct sockaddr *)&sourceAddr, &addrLen);
             // Error occured during receiving
             if (len < 0) {
-                printf("recv failed: errno %d\n", errno);
+                PRINT("recv failed: errno %d\n", errno);
                 break;
             } else if (len == 0) {
-                printf("Connection closed\n");
+                PRINT("Connection closed\n");
                 break;
             }
             // Data received
             rx_buffer[len] = '\0'; // Null-terminate whatever we received and treat like a string
-            printf("Received %d bytes, rx_buffer: %s\n", len, rx_buffer);
+            PRINT("Received %d bytes, rx_buffer: %s\n", len, rx_buffer);
             index = udp_packet_parse(rx_buffer, len);
             // if( index >= 0 ) {
             //     udp_send_response(tx_buffer, rx_buffer, "OK"/* msg_wifi_resp[index]*/);
@@ -552,7 +562,7 @@ void wifi_status()
     int index = resolve_msg_wifi_status(NULL);
     char *head = "FF";
     int len = pack_tlv_format(tx_buffer, head, msg_wifi_status[index]);
-    printf("wifi_status len = %d, msg = [%s]\n",len, tx_buffer);
+    PRINT("wifi_status len = %d, msg = [%s]\n",len, tx_buffer);
 }
 #endif
 
@@ -584,19 +594,15 @@ errcode_t cat1_server_init(void)
     }
     
     g_timer_time_sync = osTimerNew((osTimerFunc_t)time_sync_func, osTimerPeriodic, NULL, NULL);
-
-    // if ( poweron_cat1_on_bootup_flag() )
-    // {
-    //     uapi_cat1_power_on(1);
-    //     uapi_cat1_reset(0);
-    // }
     if (g_timer_time_sync == NULL)
-        printf("g_timer_time_sync create failed\n");
+        PRINT("g_timer_time_sync create failed\n");
 
     g_timer_cat1_sleep = osTimerNew((osTimerFunc_t)timeout_handler_sleep_cat1, osTimerPeriodic, NULL, NULL);
     if (g_timer_cat1_sleep == NULL)
-        printf("g_timer_cat1_sleep create failed\n");
-
+        PRINT("g_timer_cat1_sleep create failed\n");
+    //第一次启动,要确保去除已经添加过的cat1 Vote
+    restart_sleep_cat1_timer();
+    
     return ERRCODE_SUCC;
 }
 
index 348ac28..1867dbd 100644 (file)
@@ -7,6 +7,7 @@ set(COMPONENT_NAME "custom_utils")
 set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/custom_utils.c
     ${CMAKE_CURRENT_SOURCE_DIR}/custom_utils_at_cmd.c
+    ${CMAKE_CURRENT_SOURCE_DIR}/custom_cmd_service.c
 )
 
 set(PUBLIC_HEADER
diff --git a/code/sdk/drivers/peripheral/utils/custom_cmd_service.c b/code/sdk/drivers/peripheral/utils/custom_cmd_service.c
new file mode 100644 (file)
index 0000000..6574e81
--- /dev/null
@@ -0,0 +1,147 @@
+/**
+ * Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
+ *
+ * Description: Test adc source \n
+ * Author: @CompanyNameTag \n
+ * History: \n
+ * 2022-08-16, Create file. \n
+ */
+#include "pinctrl.h"
+#include "debug_print.h"
+#include "soc_osal.h"
+#include "tcxo.h"
+#include "irmalloc.h"
+#include "errcode.h"
+#include "common_def.h"
+
+#include "chip_core_irq.h"
+#include "chip_io.h"
+#include "gpio.h"
+#include "pm_veto.h"
+
+#include "rtc.h"
+#include "timer.h"
+#include "systick.h"
+
+#include "tcxo.h"
+
+#include "cmsis_os2.h"
+
+#include "los_printf.h"
+
+#include "custom_utils.h"
+
+typedef struct
+{
+    uint8_t cmd;
+    // uint8_t data[2];
+} custom_cmd_cmd_t;
+/***
+ * 其他cmd在Header里定义,对外开放
+ */
+
+static bool g_bat_timer_is_running = false;
+static unsigned long g_custom_cmd_queue;
+
+
+
+static bool custom_cmd_service_running_stat = false;
+
+void do_custom_cmd_service_check_msg(int cmd)
+{
+    int ret;
+
+    custom_cmd_cmd_t mail = {0};
+    mail.cmd = cmd;
+    // mail.data[0] = data[0];
+    // mail.data[1] = data[1];
+    ret = osal_msg_queue_write_copy(g_custom_cmd_queue, (void *)&mail, sizeof(custom_cmd_cmd_t), 0);
+    if (ret != OSAL_SUCCESS)
+    {
+        PRINT("Error custom_cmd Check MSG 0x%02X send failed! err=0x%x! \r\n", cmd, ret);
+    }
+}
+
+static void custom_cmd_service_check_task(void const *arg)
+{
+    unused(arg);
+    int32_t ret;
+    custom_cmd_cmd_t mail;
+    uint32_t msgsize = (uint32_t)sizeof(custom_cmd_cmd_t);
+    custom_cmd_service_running_stat = true;
+    
+    while (1)
+    {
+        ret = osal_msg_queue_read_copy(g_custom_cmd_queue, (void *)&mail, &msgsize,
+                                       OSAL_MSGQ_WAIT_FOREVER);
+        if (ret != OSAL_SUCCESS)
+        {
+            continue;
+        }
+
+        if (mail.cmd == CUSTOM_CMD_MSG_TYPE_REMOVE_CAT1VOTE)
+        {
+            restart_sleep_cat1_timer();
+        }
+        else 
+        {
+            PRINT("unknown CUSTOM_CMD_MSG cmd 0x%2X \r\n",mail.cmd);
+        }   
+    }
+}
+#define CUSTOM_CMD_APP_BOARD_MSG_COUNT 10
+#define CUSTOM_CMD_APP_BOARD_TASK_SIZE 0x800
+#define CUSTOM_CMD_BOARD_TASK_PRIO 7
+void create_custom_cmd_queue(void)
+{
+    if (osal_msg_queue_create("custom_cmd_service_queue", CUSTOM_CMD_APP_BOARD_MSG_COUNT, &g_custom_cmd_queue,
+                              0, sizeof(custom_cmd_cmd_t)) != ERRCODE_SUCC)
+    {
+        printf("[custom_cmd][service] app create mail fail\n");
+    }
+}
+errcode_t uapi_custom_cmd_service_init(void)
+{
+
+    PRINT("uapi_custom_cmd_service_init !\r\n");
+    app_task_definition_t taskcfg = {0};
+    taskcfg.create_queue_handle = create_custom_cmd_queue;
+    taskcfg.attr.name = "custom_cmd_service";
+    taskcfg.attr.priority = osPriorityNormal;
+    taskcfg.attr.stack_size = CUSTOM_CMD_APP_BOARD_TASK_SIZE;
+    taskcfg.func = custom_cmd_service_check_task;
+    taskcfg.use_mem = USE_EXTEND_MEM;
+
+    errcode_t ret = uapi_create_osThread_custom(&taskcfg);
+    if (ret != ERRCODE_SUCC)
+    {
+        PRINT("create custom_cmd_service failed %d!\r\n", ret);
+        return ERRCODE_FAIL;
+    }
+
+    // g_custom_cmd_service_timer = osTimerNew((osTimerFunc_t)custom_cmd_service_check_timer_callback, osTimerPeriodic, NULL, NULL);
+
+    // do_custom_cmd_service_check_msg(CUSTOM_CMD_SERVICE_CMD_START_CHECK, NULL);
+
+    return ERRCODE_SUCC;
+}
+
+// void custom_cmd_service_service_resume(void)
+// {
+//     PRINT("custom_cmd_service_service resume!\r\n");
+//     custom_cmd_service_check_timer_callback(0);
+// }
+// void custom_cmd_service_service_suspend(void)
+// {
+//     PRINT("custom_cmd_service_service suspend!\r\n");
+// }
+
+// void custom_cmd_service_service_resume(void)
+// {
+//     PRINT("custom_cmd_service_service resume!\r\n");
+//     custom_cmd_service_check_timer_callback(0);
+// }
+// void custom_cmd_service_service_suspend(void)
+// {
+//     PRINT("custom_cmd_service_service suspend!\r\n");
+// }
\ No newline at end of file
index dfb437c..83f5c1d 100644 (file)
@@ -298,7 +298,7 @@ errcode_t uapi_get_timestampe_ms(uint64_t *tm)
 #define BITS_PER_BYTE               8
 #define HEXADECIMAL                 16
 #define DECIMAL                     10
-#define TIME_YEAR_OFFSET        70
+#define TIME_YEAR_OFFSET        123
 #define TIME_ZONE_OFF           (8 * 60)
 #define TIME_SECSPERMIN         60     /* second per minute */
 static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8_t *zone)
@@ -324,7 +324,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8
     // 年的计算需要减去1900
     _tm.tm_year = strtol(ptr, NULL, DECIMAL) - 1900;
     if (_tm.tm_year < TIME_YEAR_OFFSET) {
-        printf("ERR!year num must bigger than 1970!");
+        printf("ERR!year num must bigger than 2023!");
         return 3;
     }
     ptr = tmp + 1;
index daa077c..606da3a 100644 (file)
@@ -131,6 +131,11 @@ bool stop_alipay_ble_service(void);
 uint32_t uapi_calendar_recover_date(void);
 uint32_t uapi_calendar_store_date(void);
 
+
+#define CUSTOM_CMD_MSG_TYPE_REMOVE_CAT1VOTE 0x01
+errcode_t uapi_custom_cmd_service_init(void);
+void do_custom_cmd_service_check_msg(int cmd);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */