/*---------------------------------------------------------------------------- * Copyright (c) Fenda Technologies Co., Ltd. 2021. All rights reserved. * * Description: sql_alarm.c * * Author: saimen * * Create: 2024-06-08 *--------------------------------------------------------------------------*/ //所有的 SQL 语法都必须以关键字(也称命令)开头,比如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP、CREATE、USE、SHOW 等。 #include #include "sys_typedef.h" #include "sys_config.h" #include "linux/crc32.h" #include "sql_alarm.h" /********************************************************************************************************************** * DEFINE */ #define ENABLE_STATIC_PRINT false #define static_print_error(...) sys_sql_log_e(__VA_ARGS__) //错误信息打印一般常开 #define static_print_warn(...) sys_sql_log_w(__VA_ARGS__) //警告信息打印一般常开 #if ENABLE_STATIC_PRINT #define static_print_debug(...) sys_sql_log_d(__VA_ARGS__) #else #define static_print_debug(...) #endif #define FILE_VERSION_SETTING (1) #define FILE_PATH_SETTING "/system/sql_alarm.bin" #define ALARM_CLOCK_MAX_NUMBER (10) #define ALARM_NAME_MAX_NUMBER (32) typedef struct { uint32_t uuid; //闹钟标号。uuid不是下标号,是唯一标识,APP分配 bool valid; //闹钟有效性 uint8_t enable; //闹钟开关 uint8_t cycle_mode; //闹钟周期,用于设置是否只提醒一次还是每周哪些天提醒 //后7位代表周一到周日是否提醒,全为0代表仅提醒一次 uint8_t repeat_times; //重复次数 uint8_t repeat_interval; //重复间隔,单位分钟 uint8_t hour; //小时 uint8_t minute; //分钟 char name[ALARM_NAME_MAX_NUMBER]; //闹钟描述 }alarm_info_t; #pragma pack(4) //alignment 4 bytes typedef struct { uint32_t init_flag:8; //标记模块是否初始化。=0 无效数据;=1 正常数据;=2 恢复数据。 uint32_t version:8; //结构体版本 alarm_info_t alarm_list[ALARM_CLOCK_MAX_NUMBER]; //闹钟参数保存 //uint8_t revs[1]; //保证8字节对齐 uint32_t crc32; } alarm_def_t; #pragma pack() static alarm_def_t g_sql_alarm; //设置实例 static bool g_alarm_need_save = false; /** * @brief 重置系统设置数据. * @retval int|返回结果,0=成功. */ int sql_alarm_restore(void) { int ret = RET_SUCCESS; static_print_warn("sql_alarm_restore()\r\n"); // 设置的默认值 memset((uint8_t*)&g_sql_alarm,0,sizeof(alarm_def_t)); g_sql_alarm.version = FILE_VERSION_SETTING; g_sql_alarm.init_flag = 1; /************************ 测试 ******************************/ // g_sql_alarm.alarm_list[0].valid = 1; // g_sql_alarm.alarm_list[0].enable = 1; // g_sql_alarm.alarm_list[0].cycle_mode = 0x33; // 一、二、五、六 // g_sql_alarm.alarm_list[0].hour = 8; // g_sql_alarm.alarm_list[0].minute = 1; // g_sql_alarm.alarm_list[1].valid = 1; // g_sql_alarm.alarm_list[1].enable = 0; // g_sql_alarm.alarm_list[1].cycle_mode = 0x7f; // 每天 // g_sql_alarm.alarm_list[1].hour = 9; // g_sql_alarm.alarm_list[1].minute = 20; // g_sql_alarm.alarm_list[3].valid = 1; // g_sql_alarm.alarm_list[3].enable = 1; // g_sql_alarm.alarm_list[3].cycle_mode = 0x00; // 仅一次 // g_sql_alarm.alarm_list[3].hour = 12; // g_sql_alarm.alarm_list[3].minute = 30; /************************ END ******************************/ g_alarm_need_save = false; return ret; } /********************************************************************************************************************** * 固定接口 */ /** * @brief 初始化系统设置数据. * @retval int|返回结果,0=成功. */ int sql_alarm_init(void) { int ret = RET_SUCCESS; uint32_t ui32_crc; static_print_warn("[%s],sizeof(alarm_def_t) = %d\r\n", FILE_PATH_SETTING, sizeof(alarm_def_t)); ui32_crc = Crc32Part(0,(const char *)&g_sql_alarm, sizeof(alarm_def_t) - 4); if(ui32_crc != g_sql_alarm.crc32 || g_sql_alarm.version != FILE_VERSION_SETTING) { sql_alarm_restore(); g_alarm_need_save = true; } return ret; } void* sql_alarm_get_info(uint32_t *len, char **path) { g_sql_alarm.crc32 = Crc32Part(0,(const char *)&g_sql_alarm, sizeof(g_sql_alarm) - 4); *len = sizeof(g_sql_alarm); *path = (char*)FILE_PATH_SETTING; return &g_sql_alarm; } void sql_alarm_set_save_flag(uint8_t value) { g_alarm_need_save = value; } uint8_t sql_alarm_get_save_flag(void) { return g_alarm_need_save; } /********************************************************************************************************************** * 通用接口 */ uint8_t sql_alarm_get_max_number(void) { return ALARM_CLOCK_MAX_NUMBER; } //获取闹钟数,并返回满标志 uint8_t sql_alarm_get_alarm_number(bool *full_flag) { uint8_t i; uint8_t count = 0; if (full_flag != NULL) *full_flag = true; for(i=0;i ALARM_NAME_MAX_NUMBER)? ALARM_NAME_MAX_NUMBER:str_len; if((index < ALARM_CLOCK_MAX_NUMBER) && (str_len > 0)) { memcpy(g_sql_alarm.alarm_list[index].name, name,str_len); g_alarm_need_save = true; } else { return RET_ERROR; } return RET_SUCCESS; } uint8_t sql_alarm_get_name(uint8_t index,char **name) { if(index < ALARM_CLOCK_MAX_NUMBER) { // static_print_remind("g_sql_alarm.alarm_list[index].name = %s=======\n",g_sql_alarm.alarm_list[index].name); *name = g_sql_alarm.alarm_list[index].name; } else { return RET_ERROR; } return RET_SUCCESS; }