fusion/mw/config/mw_config.h

276 lines
7.4 KiB
C
Raw Normal View History

2025-08-05 07:53:44 +00:00
#ifndef __MW_CONFIG_H__
#define __MW_CONFIG_H__
#include "mw_config_enum.h"
#include "mw_config_struct.h"
#include "list.h"
#include "mw_storage.h"
#define CFG_MAGIC_DEFAULT 0xdefa0505
#define CFG_ID_NUM CFG_APP_ID_NUMBER
#define MW_SET_SAME (0x0000FEFEU)
#define CFG_DEFAULT_BRATECTRL_TYPE CFG_VIDEO_CODEC_BRATECTRL_TYPE_VBR
typedef enum
{
CFG_GROUP_BASE = 0,
CFG_GROUP_SYSTEM,
CFG_GROUP_COMMON,
CFG_GROUP_VIDEO,
CFG_GROUP_PHOTO,
CFG_GROUP_AUDIO,
CFG_GROUP_IMAGE,
CFG_GROUP_OTHER,
CFG_GROUP_APP,
CFG_GROUP_NUM
}Mw_CfgGroup_Type_e;
typedef enum
{
CFG_BASE_ID_LICENSE = 0,
CFG_BASE_ID_FACTORY_MODE,
CFG_BASE_ID_ACTIVE_TIME,
CFG_BASE_ID_FACTORY_AGING,
CFG_BASE_ID_PRODUCT_UUID,
CFG_BASE_ID_PRODUCT_SERIAL,
CFG_BASE_ID_NUMBER
}Mw_CfgBase_ID_e;
typedef enum
{
CFG_SYSTEM_ID_WIFI = CFG_BASE_ID_NUMBER,
CFG_SYSTEM_ID_BLUETOOTH,
CFG_SYSTEM_ID_USB,
CFG_SYSTEM_ID_SENSOR,
CFG_SYSTEM_ID_BATTERY,
CFG_SYSTEM_ID_LED,
CFG_SYSTEM_ID_BUTTON,
CFG_SYSTEM_ID_NUMBER
}Mw_CfgSystem_ID_e;
typedef enum
{
CFG_COMMON_ID_CAMMODE = CFG_SYSTEM_ID_NUMBER,
CFG_COMMON_ID_NUMBER
}Mw_CfgCommon_ID_e;
typedef enum
{
CFG_VIDEO_ID_RECORD_STREAM = CFG_COMMON_ID_NUMBER,
CFG_VIDEO_ID_RECORD_SPEC,
CFG_VIDEO_ID_BITRATE,
CFG_VIDEO_ID_CODEC,
CFG_VIDEO_ID_BRATECTRL, // 0 FIX, 1 CBR, 2 VBR, 3 SMART_VBR
CFG_VIDEO_ID_NUMBER
}Mw_CfgVideo_ID_e;
typedef enum
{
CFG_PHOTO_ID_RESOLUTION = CFG_VIDEO_ID_NUMBER,
CFG_PHOTO_ID_CAPCFG,
CFG_PHOTO_ID_NUMBER
}Mw_CfgPhoto_ID_e;
typedef enum
{
CFG_AUDIO_ID_ENCODE = CFG_PHOTO_ID_NUMBER,
CFG_AUDIO_ID_NUMBER
}Mw_CfgAudio_ID_e;
typedef enum
{
CFG_IMAGE_ID_BRIGHTNESS = CFG_AUDIO_ID_NUMBER,
CFG_IMAGE_ID_CONTRAST,
CFG_IMAGE_ID_SHARPNESS,
CFG_IMAGE_ID_AAA,
CFG_IMAGE_ID_ANTI_FLICKER,
CFG_IMAGE_ID_NUMBER
}Mw_CfgImage_ID_e;
typedef enum
{
CFG_OTHER_ID_LCD = CFG_IMAGE_ID_NUMBER,
CFG_OTHER_ID_QCAP,
CFG_OTHER_ID_NUMBER
}Mw_CfgOther_ID_e;
typedef enum
{
CFG_APP_ID_GUI = CFG_OTHER_ID_NUMBER,
CFG_APP_ID_NUMBER
}Mw_CfgApp_ID_e;
/* default system part setting table */
#define CFG_SYSPART_DEFAULT_TABLE \
{ \
/* header */ \
.header.version = 0x00000001, \
.header.total_size = 0, \
.header.checksum = 0, \
\
/* base info */ \
.base_info.factory_mode.factory_mode = 0, \
.base_info.active_time.active_time = 0, \
.base_info.product_sn.sn = "INSWWYYNXXXXXX", \
.base_info.license_info.audio_license = "default", \
\
/* system info */ \
.system_info.wifi_info.enable = 0, \
.system_info.bt_info.enable = 0, \
.system_info.usb_info.enable = 0, \
.system_info.sensor_info.type = 0, \
.system_info.battery_info.percent = 0, \
.system_info.led_info.enable = 0, \
.system_info.button_info.enable = 0, \
\
}
#define CFG_USERPART_DEFAULT_TABLE_COMMON \
{ \
.mode.cam_mode = MW_CFG_CAMMODE_VIDEO, \
.mode.sub_mode = MW_CFG_CAM_SUBMODE_VID_NORMAL, \
}
#define CFG_USERPART_DEFAULT_TABLE_VIDEO \
{ \
.stream.rec_stream = CFG_VIDEO_RECORD_STREAM_BOTH, \
.spec.resolution = MW_CFG_VIDEO_RES_3840X2160, \
.spec.fps = MW_CFG_VIDEO_FPS_60, \
.bitrate.value[0] = 0, /* main stream */ \
.bitrate.value[1] = 0, /* sub stream */ \
.bratectrl.value = {CFG_DEFAULT_BRATECTRL_TYPE, CFG_DEFAULT_BRATECTRL_TYPE}, /*all default to CBR*/\
.codec.main_type = CFG_VIDEO_CODEC_TYPE_H265, \
.codec.sub_type = CFG_VIDEO_CODEC_TYPE_H265, \
}
#define CFG_USERPART_DEFAULT_TABLE_PHOTO \
{ \
.resolution.val = MW_CFG_CAP_RES_720X1280, \
.capcfg.capnum = 1, \
.capcfg.aebnum = 1, \
.capcfg.strmmsk = 1, \
.capcfg.pictype = 8, \
.capcfg.syncencstart = 0, \
.capcfg.caponly = 0, \
.capcfg.captype = 1, \
.capcfg.stopliveview = 1, \
.capcfg.timelapsemsk = 0, \
}
#define CFG_USERPART_DEFAULT_TABLE_AUDIO \
{ \
.encode.bits_per_sample = 16, \
.encode.aac_bitrate = 128000, \
.encode.volume = 100, \
.encode.enable_DMIC = 0, \
}
#define CFG_USERPART_DEFAULT_TABLE_IMAGE \
{ \
.brightness.val = 0, \
.contrast.val = 0, \
.sharpness.val = 0, \
.aaa.exposure_mode = MW_CFG_AE_EXPMODE_AUTO, \
.aaa.shutter = -1000000, \
.aaa.iso = 800, \
.aaa.shutter_limit = 0.0, \
.aaa.iso_limit = 0, \
.aaa.ev_bias = 0.0, \
.aaa.wb_mode = MW_CFG_AWB_MODE_AUTO, \
.aaa.wb_temp = 2000, \
.anti_flicker.value = MW_CFG_AE_FLICKER_AUTO,\
}
#define CFG_USERPART_DEFAULT_TABLE_OTHER \
{ \
.lcd_info.time = 30, \
.lcd_info.brightness= 100, \
.quick_cap.enable = 0, \
}
#define CFG_USERPART_DEFAULT_TABLE_APP \
{ \
.gui.val = 0, \
}
/* default user part setting table */
#define CFG_USERPART_DEFAULT_TABLE \
{ \
/* header */ \
.header.version = 0x00000001, \
.header.total_size = 0, \
.header.checksum = 0, \
\
.common_info = CFG_USERPART_DEFAULT_TABLE_COMMON, \
\
.video_info = CFG_USERPART_DEFAULT_TABLE_VIDEO, \
\
.photo_info = CFG_USERPART_DEFAULT_TABLE_PHOTO, \
\
.audio_info = CFG_USERPART_DEFAULT_TABLE_AUDIO,\
\
.image_info = CFG_USERPART_DEFAULT_TABLE_IMAGE,\
\
.other_info = CFG_USERPART_DEFAULT_TABLE_OTHER,\
\
.app_info = CFG_USERPART_DEFAULT_TABLE_APP,\
\
}
/*
* access structure
*/
typedef uint32_t (*Mw_CfgAccess_f)(void *data, uint32_t size);
typedef uint32_t (*Mw_CfgSetIdCallback_f)(void *data, uint32_t size);
typedef uint32_t (*Mw_CfgUpdateCallback_f)(uint32_t id, void *data, uint32_t size);
typedef uint32_t (*Mw_CfgPrint_f)(uint32_t id, char *name);
typedef struct {
struct list_head link;
Mw_CfgSetIdCallback_f cb_func;
}Mw_CfgSetIdCallback_s;
typedef struct
{
char *name;
Mw_CfgAccess_f set_func;
Mw_CfgAccess_f get_func;
Mw_CfgPrint_f print_func;
struct list_head cb_func_list;
}Mw_CfgAccess_t;
uint32_t Mw_Cfg_Init(mw_write_cb wb, mw_read_cb rb);
uint32_t Mw_Cfg_GetConfig(uint32_t config_id, void *p_out, uint32_t size);
uint32_t Mw_Cfg_SetConfig(uint32_t config_id, void *p_in, uint32_t size);
uint32_t Mw_Cfg_GetConfig_NoBlock(uint32_t config_id, void *p_out, uint32_t size); //use carefully
uint32_t Mw_Cfg_SetConfig_NoBlock(uint32_t config_id, void *p_in, uint32_t size); //use carefully
uint32_t Mw_Cfg_SetCallbackRegister(uint32_t config_id, Mw_CfgSetIdCallback_f cb_func);
uint32_t Mw_Cfg_SetCallbackUnregister(uint32_t config_id, Mw_CfgSetIdCallback_f cb_func);
uint32_t Mw_Cfg_GetGroupInfo(Mw_CfgGroup_Type_e group_id, void *p_out, uint32_t size);
uint32_t Mw_Cfg_SetGroupInfo(Mw_CfgGroup_Type_e group_id, void *p_in, uint32_t size);
/* TDB: need timer to save config regularly */
uint32_t Mw_Cfg_Save(Mw_CfgStorage_Partition_e part);
uint32_t Mw_Cfg_LoadDefault(Mw_CfgStorage_Partition_e part);
uint8_t Mw_Cfg_IsLoadFromDefault(void);
uint32_t Mw_Cfg_PrintAll(void);
uint32_t Mw_Cfg_PrintId(uint32_t id);
/* For unit test */
uint32_t Mw_Cfg_Destroy(Mw_CfgStorage_Partition_e part, Mw_CfgStorage_Region_e region);
void Mw_Cfg_Test();
#endif