/*---------------------------------------------------------------------------- * Copyright (c) Fenda Technologies Co., Ltd. 2021. All rights reserved. * * Description: sql_setting.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_setting.h" #include "TjdUiAppIds.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_setting.bin" #define UI_COMPONENT_MAX_NUMBER (10) #define UI_FLOATING_WINDOW_MAX_NUMBER (10) typedef struct { uint8_t dnd_all_day; //全天免打扰 // uint8_t dnd_no_wear; //未佩戴免打扰。默认打开此功能,暂时不使用。 uint8_t dnd_period; //定时免打扰 uint8_t dnd_start_hour; //定时免打扰开始小时 uint8_t dnd_start_minute; //定时免打扰开始分钟 uint8_t dnd_end_hour; //定时免打扰结束小时 uint8_t dnd_end_minute; //定时免打扰结束分钟 } do_not_disturb_t; //用于存储勿扰模式相关参数 typedef struct { bool en_motion; // 使能运动识别 bool en_motion_end; // 使能运动结束提醒 uint32_t motion_out_time; // 运动超时时间 (单位:秒) } motion_info_t; typedef struct { uint8_t en_ambient_mode; //使能半亮模式 uint8_t en_message_notify; //使能消息通知 // uint8_t en_push_weather; //使能推送天气 } assistant_info_t; typedef struct { uint32_t utc_timestamp; //时间戳 uint16_t batt_vol; //电池电压单位:mv uint16_t percent; //电量百分比 uint8_t charge_status; //充电状态 bool is_power_saving; //省电模式 }battery_info_t;//电池信息 typedef struct { uint32_t lock_screen_id; //锁屏ID uint32_t watch_face_id; //表盘ID uint8_t st_watchface_id; //待机表盘ID uint32_t lkey_click_app; //左键设置的APP ID bool is_cover_to_turn_off_screen; //是否覆盖息屏 bool is_pinch_to_answer; //是否捏合接听 uint16_t floating_window_id[UI_FLOATING_WINDOW_MAX_NUMBER]; //浮窗ID MainCardEffect animation; //动效设置 E_MenuStyle menu_style; //菜单风格 uint32_t component_app_list[UI_COMPONENT_MAX_NUMBER]; //组件管理。app id=0x00,=0xff代表无效 }gui_info_t;//UI信息 typedef struct { uint8_t brightness; //屏幕亮度 bool is_off_screen; //息屏显示 uint8_t off_screen_view_type; //息屏表盘 bool is_bedside_clock; //床头钟 uint16_t keep_screen_time; //保持常亮时间 bool is_password; //是否有密码 uint8_t password[6]; //密码 }screen_info_t;//屏幕信息 typedef struct { uint8_t volume; //媒体音量 bool is_volume_mute; //是否静音 bool is_touch_shake; //是否触摸震动 uint8_t touch_shake_level; //触摸震动等级 0默认 1强 } sound_touch_info_t;//声音与触感信息 #pragma pack(4) //alignment 4 bytes typedef struct { uint32_t init_flag:8; //标记模块是否初始化。=0 无效数据;=1 正常数据;=2 恢复数据。 uint32_t version:8; //结构体版本 bool notification; //通知提示 0:关闭 1:开启 bool screen_wakes; //来信亮屏 0:关闭 1:开启 language_enum language; //系统语言 uint16_t lock_screen_time; //锁屏时间 单位:秒 uint16_t close_screen_time; //息屏时间 单位:秒 int16_t zone; //系统时区 单位:分钟 uint8_t vibration_intensity; //振动强度 uint8_t distance_unit; //距离单位 0:公制 1:英制 uint8_t time_format; //时间格式 1:12小时 0:24小时 do_not_disturb_t dnd; //勿扰模式 motion_info_t motion; //运动识别 assistant_info_t assistant; //开关助手控制 battery_info_t battery; //电池信息 screen_info_t screen; //屏幕信息 gui_info_t gui; //GUI配置信息 sound_touch_info_t sound_touch; //声音与触感信息 uint64_t timestamp; //系统时间戳 int32_t time_diff; //时间偏移 uint8_t left_key_app; //左键APP uint8_t favorite_sort[FAVORITE_MODEL_MAX_NUM]; //负一屏排序 uint8_t card_settings[15]; uint8_t card_settings_num; //uint8_t revs[1]; //保证8字节对齐 uint32_t crc32; } setting_def_t; #pragma pack() static setting_def_t g_settings; //设置实例 static bool g_setting_need_save = false; /** * @brief 重置系统设置数据. * @retval int|返回结果,0=成功. */ int sql_setting_restore(void) { int ret = RET_SUCCESS; static_print_warn("sql_setting_restore()\r\n"); // 设置的默认值 memset((uint8_t*)&g_settings,0,sizeof(setting_def_t)); g_settings.version = FILE_VERSION_SETTING; g_settings.init_flag = 1; g_settings.notification = true; g_settings.screen_wakes = false; g_settings.screen.brightness = 255; g_settings.screen.is_off_screen = false; // 息屏表盘默认打开 g_settings.screen.is_bedside_clock = true; // 床头钟默认打开 g_settings.screen.off_screen_view_type = 0; //指针时钟 g_settings.screen.keep_screen_time = 180; //常亮 g_settings.screen.is_password = false; g_settings.battery.is_power_saving = false; g_settings.battery.percent = 10000; g_settings.language = 1; //中文 g_settings.zone = 480; //单位: 分钟 g_settings.time_format = TIME_DISPLAY_24; g_settings.vibration_intensity = 80; g_settings.dnd.dnd_all_day = false; g_settings.dnd.dnd_period = false; g_settings.dnd.dnd_start_hour = 23; g_settings.dnd.dnd_start_minute = 0; g_settings.dnd.dnd_end_hour = 7; g_settings.dnd.dnd_end_minute = 0; g_settings.motion.en_motion = false; g_settings.motion.en_motion_end = false; g_settings.motion.motion_out_time = 3600 * 8; // 8小时 g_settings.close_screen_time = 5; //单位: 秒 g_settings.lock_screen_time = 5; g_settings.gui.lkey_click_app = TJD_APP_VIEW_SPORT; // 左键默认打开运动 g_settings.gui.animation = 0; g_settings.gui.is_cover_to_turn_off_screen = true; // 盖手熄屏默认开启 g_settings.time_diff = 0; memset(g_settings.gui.floating_window_id, 0, sizeof(g_settings.gui.floating_window_id)); g_settings.gui.floating_window_id[0] = TJD_APP_VIEW_HR; //TJD_APP_VIEW_HR g_settings.gui.floating_window_id[1] = TJD_APP_VIEW_SPO2; //TJD_APP_VIEW_STRESS g_settings.gui.floating_window_id[2] = TJD_APP_VIEW_SPORT; //TJD_APP_VIEW_SPORT g_settings.gui.floating_window_id[3] = TJD_APP_VIEW_PLAYER; //TJD_APP_VIEW_DAILYDATA for (int i = 0; i < 5; ++i) { g_settings.favorite_sort[i] = i; } g_settings.sound_touch.volume = 50; g_settings.sound_touch.is_volume_mute = false; g_settings.sound_touch.is_touch_shake = false; g_settings.sound_touch.touch_shake_level = 0; memset(g_settings.card_settings, 0, sizeof(g_settings.card_settings)); g_settings.card_settings_num = 0; g_setting_need_save = false; return ret; } /********************************************************************************************************************** * 固定接口 */ /** * @brief 初始化系统设置数据. * @retval int|返回结果,0=成功. */ int sql_setting_init(void) { int ret = RET_SUCCESS; uint32_t ui32_crc; static_print_warn("[%s],sizeof(setting_def_t) = %d\r\n", FILE_PATH_SETTING, sizeof(setting_def_t)); ui32_crc = Crc32Part(0,(const char *)&g_settings, sizeof(setting_def_t) - 4); if(ui32_crc != g_settings.crc32 || g_settings.version != FILE_VERSION_SETTING) { sql_setting_restore(); g_setting_need_save = true; } return ret; } void* sql_setting_get_info(uint32_t *len, char **path) { g_settings.crc32 = Crc32Part(0,(const char *)&g_settings, sizeof(g_settings) - 4); *len = sizeof(g_settings); *path = (char*)FILE_PATH_SETTING; return &g_settings; } void sql_setting_set_save_flag(uint8_t value) { g_setting_need_save = value; } uint8_t sql_setting_get_save_flag(void) { return g_setting_need_save; } /********************************************************************************************************************** * 通知设置 */ void sql_setting_set_notification(bool status) { static_print_debug("settings:set notification\r\n"); if(g_settings.notification != status) { g_settings.notification = status; g_setting_need_save = true; } } bool sql_setting_get_notification(void) { return g_settings.notification; } void sql_setting_set_screen_wakes(bool status) { static_print_debug("settings:set screen_wakes\r\n"); if(g_settings.screen_wakes != status) { g_settings.screen_wakes = status; g_setting_need_save = true; } } bool sql_setting_get_screen_wakes(void) { return g_settings.screen_wakes; } /********************************************************************************************************************** * 通用接口 */ void sql_setting_set_lock_screen_time(uint16_t time) { static_print_debug("settings:set lock screen time\r\n"); if(g_settings.lock_screen_time != time) { g_settings.lock_screen_time = time; g_setting_need_save = true; } } uint8_t sql_setting_get_lock_screen_time(void) { return g_settings.lock_screen_time; } void sql_setting_set_close_screen_time(uint16_t time) { static_print_debug("settings:set turn off screen time\r\n"); if(g_settings.close_screen_time != time) { g_settings.close_screen_time = time; g_setting_need_save = true; } } uint8_t sql_setting_get_close_screen_time(void) { return g_settings.close_screen_time; } void sql_setting_set_vibration_intensity(uint8_t intensity) { static_print_debug("settings:set vibration intensity\r\n"); if(g_settings.vibration_intensity != intensity) { g_settings.vibration_intensity = intensity; g_setting_need_save = true; } } uint8_t sql_setting_get_vibration_intensity(void) { return g_settings.vibration_intensity; } extern void C_SetLang(void); void sql_setting_set_language(language_enum languang) { static_print_debug("settings:set language\r\n"); if(g_settings.language != languang) { g_settings.language = languang; g_setting_need_save = true; C_SetLang(); } } language_enum sql_setting_get_language(void) { return g_settings.language; } void sql_setting_set_zone(int16_t zone) { static_print_debug("settings:set zone\r\n"); if(g_settings.zone != zone) { g_settings.zone = zone; g_setting_need_save = true; } } int16_t sql_setting_get_zone(void) { return g_settings.zone; } void sql_setting_set_distance_unit(uint8_t unit) { static_print_debug("settings:set distance unit\r\n"); if(g_settings.distance_unit != unit) { g_settings.distance_unit = unit; g_setting_need_save = true; } } uint8_t sql_setting_get_distance_unit(void) { return g_settings.distance_unit; } void sql_setting_set_time_format(uint8_t format) { static_print_debug("settings:set time format\r\n"); if(g_settings.time_format != format) { g_settings.time_format = format; g_setting_need_save = true; } } uint8_t sql_setting_get_time_format(void) { return g_settings.time_format; } /********************************************************************************************************************** * 显示与亮度设置 */ void sql_setting_set_brightness(uint8_t brightness) { static_print_debug("settings:set brightness\r\n"); if(g_settings.screen.brightness != brightness) { g_settings.screen.brightness = brightness; g_setting_need_save = true; } } uint8_t sql_setting_get_brightness(void) { return g_settings.screen.brightness; } void sql_setting_set_off_screen(bool status) { static_print_debug("settings:set off screen\r\n"); if(g_settings.screen.is_off_screen != status) { g_settings.screen.is_off_screen = status; g_setting_need_save = true; } } bool sql_setting_get_off_screen(void) { return g_settings.screen.is_off_screen; } void sql_setting_set_off_screen_view_type(uint8_t type) { static_print_debug("settings:set off screen view type\r\n"); if(g_settings.screen.off_screen_view_type != type) { g_settings.screen.off_screen_view_type = type; g_setting_need_save = true; } } uint8_t sql_setting_get_off_screen_view_type(void) { return g_settings.screen.off_screen_view_type; } void sql_setting_set_bedside_clock(bool status) { static_print_debug("settings:set bedside clock\r\n"); if(g_settings.screen.is_bedside_clock != status) { g_settings.screen.is_bedside_clock = status; g_setting_need_save = true; } } bool sql_setting_get_bedside_clock(void) { return g_settings.screen.is_bedside_clock; } void sql_setting_set_keep_screen_time(uint16_t time) { static_print_debug("settings:set keep screen time\r\n"); if(g_settings.screen.keep_screen_time != time) { g_settings.screen.keep_screen_time = time; g_setting_need_save = true; } } uint16_t sql_setting_get_keep_screen_time(void) { return g_settings.screen.keep_screen_time; } bool sql_setting_get_password_enable(void) { return g_settings.screen.is_password; } void sql_setting_set_password_enable(bool status) { static_print_debug("settings:set password enable\r\n"); if(g_settings.screen.is_password != status) { g_settings.screen.is_password = status; g_setting_need_save = true; } } void sql_setting_set_password(const char *password) { static_print_debug("settings:set password\r\n"); if(memcmp(g_settings.screen.password, password, 6) != 0) { memcpy(g_settings.screen.password, password, 6); g_setting_need_save = true; } } void sql_setting_get_password(char *password) { memcpy(password, g_settings.screen.password, 6); } /********************************************************************************************************************** * 勿扰管理 */ void sql_setting_set_dnd_all_day(uint8_t status) { static_print_debug("settings:set no disturb cfg\r\n"); if(g_settings.dnd.dnd_all_day != status) { g_settings.dnd.dnd_all_day = status; g_setting_need_save = true; } } uint8_t sql_setting_get_dnd_all_day(void) { return g_settings.dnd.dnd_all_day; } void sql_setting_set_dnd_period_enable(uint8_t status) { static_print_debug("settings:set no disturb cfg\r\n"); if(g_settings.dnd.dnd_period != status) { g_settings.dnd.dnd_period = status; g_setting_need_save = true; } } uint8_t sql_setting_get_dnd_period_enable(void) { return g_settings.dnd.dnd_period; } void sql_setting_set_dnd_period(uint8_t status,uint8_t start_hour,uint8_t start_minute,uint8_t end_hour,uint8_t end_minute) { static_print_debug("settings:set no disturb cfg\r\n"); if(g_settings.dnd.dnd_period != status || g_settings.dnd.dnd_start_hour != start_hour || g_settings.dnd.dnd_start_minute != start_minute || g_settings.dnd.dnd_end_hour != end_hour || g_settings.dnd.dnd_end_minute != end_minute ) { g_settings.dnd.dnd_period = status; g_settings.dnd.dnd_start_hour = start_hour; g_settings.dnd.dnd_start_minute = start_minute; g_settings.dnd.dnd_end_hour = end_hour; g_settings.dnd.dnd_end_minute = end_minute; g_setting_need_save = true; } } uint8_t sql_setting_get_dnd_period(uint8_t *start_hour,uint8_t *start_minute,uint8_t *end_hour,uint8_t *end_minute) { *start_hour = g_settings.dnd.dnd_start_hour; *start_minute = g_settings.dnd.dnd_start_minute; *end_hour = g_settings.dnd.dnd_end_hour; *end_minute = g_settings.dnd.dnd_end_minute; return g_settings.dnd.dnd_period; } void sql_setting_set_motion_enable(bool status) { static_print_debug("settings:set motion enable\r\n"); if(g_settings.motion.en_motion != status) { g_settings.motion.en_motion = status; g_setting_need_save = true; } } bool sql_setting_get_motion_enable(void) { return g_settings.motion.en_motion; } void sql_setting_set_motion_end_enable(bool status) { static_print_debug("settings:set motion end enable\r\n"); if(g_settings.motion.en_motion_end != status) { g_settings.motion.en_motion_end = status; g_setting_need_save = true; } } bool sql_setting_get_motion_end_enable(void) { return g_settings.motion.en_motion_end; } void sql_setting_set_motion_out_time(uint32_t time) { static_print_debug("settings:set motion out time\r\n"); if(g_settings.motion.motion_out_time != time) { g_settings.motion.motion_out_time = time; g_setting_need_save = true; } } uint32_t sql_setting_get_motion_out_time(void) { return g_settings.motion.motion_out_time; } //开关助手控制 void sql_setting_set_switch_ambient_mode(int mode) { static_print_debug("settings:set ambient mode\r\n"); if(g_settings.assistant.en_ambient_mode != mode) { g_settings.assistant.en_ambient_mode = mode; g_setting_need_save = true; } } int sql_setting_get_switch_ambient_mode(void) { return g_settings.assistant.en_ambient_mode; } void sql_setting_set_switch_message_notify(int mode) { if(g_settings.assistant.en_message_notify != mode) { g_settings.assistant.en_ambient_mode = mode; g_setting_need_save = true; } } int sql_setting_get_switch_message_notify(void) { return g_settings.assistant.en_ambient_mode; } /********************************************************************************************************************** * gui管理 ********************************************************************************************************************/ void sql_setting_set_lock_screen_id(uint32_t id) { static_print_debug("settings:set lock screen id\r\n"); if(g_settings.gui.lock_screen_id != id) { g_settings.gui.lock_screen_id = id; g_setting_need_save = true; } } uint32_t sql_setting_get_lock_screen_id(void) { return g_settings.gui.lock_screen_id; } void sql_setting_set_watch_face_id(uint32_t id) { static_print_debug("settings:set watch face id\r\n"); if(g_settings.gui.watch_face_id != id) { g_settings.gui.watch_face_id = id; g_setting_need_save = true; } } uint32_t sql_setting_get_watch_face_id(void) { return g_settings.gui.watch_face_id; } //待机表盘ID设置 void sql_setting_set_st_watchface_id(uint8_t id) { static_print_debug("*****settings:set st_watchface_id*****\r\n"); if(g_settings.gui.st_watchface_id != id) { g_settings.gui.st_watchface_id = id; g_setting_need_save = true; } } //获取待机表盘ID uint8_t sql_setting_get_st_watchface_id(void) { return g_settings.gui.st_watchface_id; } //下键屏幕id设置text设置 void sql_setting_set_switch_downkey_app(uint32_t id) { g_settings.gui.lkey_click_app = id; g_setting_need_save = true; } //下键屏幕id获取 uint32_t sql_setting_get_switch_downkey_app(void) { return g_settings.gui.lkey_click_app; } //获取组件管理句柄 bool sql_setting_get_component_handler(void **info, uint32_t data_len) { if( data_len > sizeof(g_settings.gui.component_app_list) ){ return false; }else{ *info = g_settings.gui.component_app_list; } return true; } bool sql_setting_get_cover_to_turn_off_screen(void) { return g_settings.gui.is_cover_to_turn_off_screen; } void sql_setting_set_cover_to_turn_off_screen(bool enable) { if(g_settings.gui.is_cover_to_turn_off_screen != enable) { g_settings.gui.is_cover_to_turn_off_screen = enable; g_setting_need_save = true; } } bool sql_setting_get_pinch_to_answer(void) { return g_settings.gui.is_pinch_to_answer; } void sql_setting_set_pinch_to_answer(bool enable) { if(g_settings.gui.is_pinch_to_answer != enable) { g_settings.gui.is_pinch_to_answer = enable; g_setting_need_save = true; } } void sql_setting_set_floating_window_map(const uint16_t *app_map, uint32_t len) { if(len > UI_FLOATING_WINDOW_MAX_NUMBER) { len = UI_FLOATING_WINDOW_MAX_NUMBER; } if(memcmp(g_settings.gui.floating_window_id, app_map, len * sizeof(uint16_t)) != 0) { memcpy(g_settings.gui.floating_window_id, app_map, len * sizeof(uint16_t)); g_setting_need_save = true; } } const uint16_t *sql_setting_get_floating_window_map(uint8_t *num) { uint8_t m = 0; for (uint8_t i = 0; i < UI_FLOATING_WINDOW_MAX_NUMBER; i++) { if (g_settings.gui.floating_window_id[i] != 0) { m++; } } if (num != NULL) { *num = m; } return g_settings.gui.floating_window_id; } void sql_setting_set_animation(MainCardEffect animation) { if (g_settings.gui.animation != animation) { g_settings.gui.animation = animation; g_setting_need_save = true; } } MainCardEffect sql_setting_get_animation(void) { return g_settings.gui.animation; } void sql_setting_set_menu_style(E_MenuStyle style) { if (g_settings.gui.menu_style != style) { g_settings.gui.menu_style = style; g_setting_need_save = true; } } E_MenuStyle sql_setting_get_menu_style(void) { return g_settings.gui.menu_style; } /********************************************************************************************************************** * 电池信息 **********************************************************************************************************************/ void sql_setting_set_battery_info(uint32_t utc_timestamp, uint8_t charge_status, uint16_t percent, uint16_t voltage) { bool utc_flag = false; static_print_debug("settings:set no disturb cfg\r\n"); if(g_settings.battery.charge_status != charge_status) { g_settings.battery.charge_status = charge_status; utc_flag = true; } if(g_settings.battery.percent != percent) { g_settings.battery.percent = percent; utc_flag = true; } if(g_settings.battery.batt_vol != voltage) { g_settings.battery.batt_vol = voltage; utc_flag = true; } if(utc_flag == true) { g_settings.battery.utc_timestamp = utc_timestamp; g_setting_need_save = true; } } void sql_setting_set_battery_percent(uint16_t percent) { if(g_settings.battery.percent != percent) { g_settings.battery.percent = percent; //g_setting_need_save = true; } } // 获取保存的电池信息 bool sql_setting_get_battery_info(uint32_t *utc_timestamp, uint8_t *charge_status, uint16_t *percent, uint16_t *voltage) { if(g_settings.battery.utc_timestamp) { *utc_timestamp = g_settings.battery.utc_timestamp; *charge_status = g_settings.battery.charge_status; *percent = g_settings.battery.percent; *voltage = g_settings.battery.batt_vol; return true; } else { return false; } } uint16_t sql_setting_get_battery_percent(void) { return g_settings.battery.percent; } void sql_setting_set_power_saving_mode(bool status) { static_print_debug("settings:set power saving mode\r\n"); if(g_settings.battery.is_power_saving != status) { g_settings.battery.is_power_saving = status; g_setting_need_save = true; } } bool sql_setting_get_power_saving_mode(void) { return g_settings.battery.is_power_saving; } /********************************************************************************************************************** * 系统时间信息 **********************************************************************************************************************/ void sql_setting_set_system_time(uint64_t utc_timestamp) { static_print_debug("settings:set_system_time "); if(g_settings.timestamp != utc_timestamp ) { g_settings.timestamp = utc_timestamp; g_setting_need_save = true; } } void sql_setting_get_system_time(uint64_t *utc_timestamp) { *utc_timestamp = g_settings.timestamp; } void sql_setting_set_time_diff(int32_t diff) { if(g_settings.time_diff != diff) { g_settings.time_diff = diff; g_setting_need_save = true; } } int32_t sql_setting_get_time_diff(void) { return g_settings.time_diff; } void sql_setting_set_favorite_sort(const uint8_t *sort) { if(memcmp(g_settings.favorite_sort, sort, FAVORITE_MODEL_MAX_NUM) != 0) { memcpy(g_settings.favorite_sort, sort, FAVORITE_MODEL_MAX_NUM); g_setting_need_save = true; } } void sql_setting_get_favorite_sort(uint8_t *sort) { memcpy(sort, g_settings.favorite_sort, FAVORITE_MODEL_MAX_NUM); } /********************************************************************************************************************** * 声音与触感设置 **********************************************************************************************************************/ void sql_setting_set_volume(uint8_t volume) { static_print_debug("settings:set volume\r\n"); if(g_settings.sound_touch.volume != volume) { g_settings.sound_touch.volume = volume; g_setting_need_save = true; } } uint8_t sql_setting_get_volume(void) { return g_settings.sound_touch.volume; } void sql_setting_set_volume_mute(bool status) { static_print_debug("settings:set volume mute\r\n"); if(g_settings.sound_touch.is_volume_mute != status) { g_settings.sound_touch.is_volume_mute = status; g_setting_need_save = true; } } bool sql_setting_get_volume_mute(void) { return g_settings.sound_touch.is_volume_mute; } void sql_setting_set_touch_shake(bool status) { static_print_debug("settings:set touch shake\r\n"); if(g_settings.sound_touch.is_touch_shake != status) { g_settings.sound_touch.is_touch_shake = status; g_setting_need_save = true; } } bool sql_setting_get_touch_shake(void) { return g_settings.sound_touch.is_touch_shake; } void sql_setting_set_touch_shake_level(uint8_t level) { static_print_debug("settings:set touch shake level\r\n"); if(g_settings.sound_touch.touch_shake_level != level) { g_settings.sound_touch.touch_shake_level = level; g_setting_need_save = true; } } uint8_t sql_setting_get_touch_shake_level(void) { return g_settings.sound_touch.touch_shake_level; } void sql_setting_set_card_settings(uint8_t *card_settings, uint8_t card_nums) { if (memcmp((const void *)g_settings.card_settings, card_settings, 15) != 0) { memset((void *)g_settings.card_settings, 0, sizeof(g_settings.card_settings_num)); memcpy((void *)g_settings.card_settings, card_settings, card_nums); g_settings.card_settings_num = card_nums; g_setting_need_save = true; } } const uint8_t *sql_setting_get_card_settings(uint8_t *card_nums) { if (card_nums == NULL) { return NULL; } *card_nums = g_settings.card_settings_num; return g_settings.card_settings; }