syscfgdata的数据分为两部分一部分是头,另一个是一个一个的数据。
struct syscfg_hdr {
char magic[4];//"固定gfCS"
uint32_t unk_0; /* */
uint32_t size;
uint32_t version;
uint32_t unk_1; /* 0 */
uint32_t nkeys;
};
struct syscfg_key {
char name[4];
union {
char value[16];
struct {
char name[4];
uint32_t size;
uint32_t offset;
uint32_t rsvd; /* -1 */
} jumbo;
};
};
如上,通过头可以校验是否是合法的数据文件。经过头偏移以后就是一个一个的数据。这个数据分为两类一类为固定大小即16字节的数据,另一类非固定长度。判断非固定长度时,只需要判断第一个name是否为“BTNC“。如果是则为变长数据,就需要能过下一结构来解析数据。
下面是名称和数据对应关系。当然得到数据通常和需要展示的数据还需要变换一下。
//电池序列号
const char *const ID_BATT ="Batt";
//前摄像头序列号
const char * const ID_FCMS = "FCMS";
//液晶屏序列号
const char * const ID_LCM = "LCM#";
//后摄像头序列号
const char * const ID_BCMS = "BCMS";
//主板序列号--字符串
const char * const ID_MBSN = "MLB#";
//销售型号
const char* const ID_MOD = "Mod#";
//监管型号
const char* const ID_RMD = "RMd#";
//整机序列号
const char* const ID_SN = "SrNm";
//区域
const char* const ID_LOC = "Regn";
//WIFI地址
const char* const ID_WIFI = "WMac";
//蓝牙地址
const char* const ID_BMAC = "BMac";
//蜂窝地址
const char* const ID_EMAC = "EMac";
//指纹
const char* const ID_FPSN = "NSrN";
//前色
const char* const ID_FCOLOR = "CLCG";
//后色
const char* const ID_BCOLOR = "CLHS";