424 lines
11 KiB
C
424 lines
11 KiB
C
/*----------------------------------------------------------------------------
|
||
* 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 <string.h>
|
||
#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_CLOCK_MAX_NUMBER;i++)
|
||
{
|
||
if(g_sql_alarm.alarm_list[i].valid)
|
||
{
|
||
count++;
|
||
}
|
||
else
|
||
{
|
||
if (full_flag != NULL) *full_flag = false;
|
||
}
|
||
}
|
||
return count;
|
||
}
|
||
|
||
//获取闹钟ID列表
|
||
uint8_t sql_alarm_get_alarm_index_list(uint8_t **index_list)
|
||
{
|
||
uint8_t i;
|
||
uint8_t count = 0;
|
||
for(i=0;i<ALARM_CLOCK_MAX_NUMBER;i++)
|
||
{
|
||
if(g_sql_alarm.alarm_list[i].valid)
|
||
{
|
||
(*index_list)[count] = i;
|
||
count++;
|
||
}
|
||
}
|
||
return count;
|
||
}
|
||
|
||
//创建闹钟并返回index
|
||
int sql_alarm_create(void)
|
||
{
|
||
uint8_t i;
|
||
for(i=0;i<ALARM_CLOCK_MAX_NUMBER;i++)
|
||
{
|
||
if(g_sql_alarm.alarm_list[i].valid == false)
|
||
{
|
||
g_sql_alarm.alarm_list[i].valid = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if(i<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
g_alarm_need_save = true;
|
||
return i;
|
||
}
|
||
else
|
||
{
|
||
return RET_NO_MEM;
|
||
}
|
||
}
|
||
|
||
//根据ID删除闹钟
|
||
void sql_alarm_delete(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
g_sql_alarm.alarm_list[index].valid = false;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_switch(uint8_t index, uint8_t status)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].enable != status)
|
||
{
|
||
g_sql_alarm.alarm_list[index].enable = status;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_switch(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].enable;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_time(uint8_t index, uint8_t hour, uint8_t minute)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].hour != hour || g_sql_alarm.alarm_list[index].minute != minute)
|
||
{
|
||
g_sql_alarm.alarm_list[index].hour = hour;
|
||
g_sql_alarm.alarm_list[index].minute = minute;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_time(uint8_t index, uint8_t *hour, uint8_t *minute)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
*hour = g_sql_alarm.alarm_list[index].hour;
|
||
*minute = g_sql_alarm.alarm_list[index].minute;
|
||
return RET_SUCCESS;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_cycle(uint8_t index, uint8_t cycle_mode)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].cycle_mode != cycle_mode)
|
||
{
|
||
g_sql_alarm.alarm_list[index].cycle_mode = cycle_mode;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_cycle(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].cycle_mode;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_repeat_times(uint8_t index, uint8_t repeat_times)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].repeat_times != repeat_times)
|
||
{
|
||
g_sql_alarm.alarm_list[index].repeat_times = repeat_times;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_repeat_times(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].repeat_times;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_repeat_interval(uint8_t index, uint8_t repeat_interval)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].repeat_interval != repeat_interval)
|
||
{
|
||
g_sql_alarm.alarm_list[index].repeat_interval = repeat_interval;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_repeat_interval(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].repeat_interval;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
void sql_alarm_set_valid(uint8_t index, uint8_t valid)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].valid != valid)
|
||
{
|
||
g_sql_alarm.alarm_list[index].valid = valid;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
int8_t sql_alarm_get_valid(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].valid;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
int32_t sql_alarm_get_index_by_uuid(uint32_t uuid)
|
||
{
|
||
int32_t i;
|
||
int32_t temp_index = RET_INVALID_PARA;
|
||
|
||
for(i = 0; i < ALARM_CLOCK_MAX_NUMBER; i++) {
|
||
if(g_sql_alarm.alarm_list[i].uuid == uuid) {
|
||
temp_index = i;
|
||
break;
|
||
}
|
||
}
|
||
return temp_index;
|
||
}
|
||
|
||
void sql_alarm_set_uuid(uint8_t index, uint8_t uuid)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
if(g_sql_alarm.alarm_list[index].uuid != uuid)
|
||
{
|
||
g_sql_alarm.alarm_list[index].uuid = uuid;
|
||
g_alarm_need_save = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_get_uuid(uint8_t index)
|
||
{
|
||
if(index<ALARM_CLOCK_MAX_NUMBER)
|
||
{
|
||
return g_sql_alarm.alarm_list[index].uuid;
|
||
}
|
||
else
|
||
{
|
||
return RET_ERROR;
|
||
}
|
||
}
|
||
|
||
uint8_t sql_alarm_set_name(uint8_t index,char *name)
|
||
{
|
||
uint32_t str_len = strlen(name);
|
||
str_len = (str_len > 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;
|
||
}
|
||
|