📄 dbparser.h
字号:
// DbParser.h: interface for the CDbParser class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DBPARSER_H__3E7FB4AC_14BE_407B_8B82_EE42D7C7CFE3__INCLUDED_)
#define AFX_DBPARSER_H__3E7FB4AC_14BE_407B_8B82_EE42D7C7CFE3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "StringLine.h"
extern const char prog_template_buf [256];
typedef char INT8;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
#define DB_LARGE_MEM_MODE //3/4 byte id id option
#define BIG_ENDIAN_FORMAT 0XFEFF
#define LITTLE_ENDIAN_FORMAT 0XFFFE
#define LINE_INVALID_FLAG 0x003B
#define LINE_FOR_SAT_FLAG 0x002A
#define UNI_TABLE 0X0009
#define UNI_CR 0X000D
#define UNI_LF 0X000A
#define ANSI_TABLE 0X09
#define ANSI_CR 0X0D
#define ANSI_LF 0X0A
#define MAX_SAT_NUM 1000 //64
#define MAX_TP_NUM 6000 //1600
#define MAX_PROG_NUM 30000 //6400
#define MAX_CMD_NUM 128
//#define USER_DB_LENGTH (1024 * 1024 * 2)
#define T_WRITE_END_FLAG 0x12345678
#define T_HEADER_ID_PREFIX "DB@T"
#define PROG_DEFAULT_TABLE_ID "PT01"
#define TP_DEFAULT_TABLE_ID "TT01"
#define SAT_DEFAULT_TABLE_ID "ST01"
#define CI_DEFAULT_TABLE_ID "CI01"
#define BO_MAX_SECTOR_NUM 24
#define BO_SECTOR_INFO_SIZE 16
#define BO_RECLAIM_THRESHOLD 2
/*valid flag "10100101", indicate data in flash is valid*/
#define BO_VALID_FLAG 0xA5
#define BO_HEADER_START 0xF00FF00F
#define BO_HEADER_END 0x12345678
#define BO_SEARCH_FROM_START 1
#define BO_SEARCH_FROM_END 2
#define BO_SEARCH_OPERATION 1
#define BO_SEARCH_DATA 2
/*db config*/
#define DB_SECTOR_SIZE (64 * 1024)
#define DB_NODE_MAX_SIZE 256
#define DB_TABLE_NUM 3
#define DB_START_END_FLAG_LEN 4
#define SUB_CHUNK_HEADER_LEN 16
#define SUB_CHUNK_TYPE_LEN 1
#define SUB_CHUNK_LENGTH_LEN 3
#define SUB_CHUNK_OFFSET_LEN 3
#define SUB_CHUNK_DDB_FLAG 0x01
#define SUB_CHUNK_TPL_FLAG 0x02
//#define ITEM_GROUP_FAVORITE_FLAG 0x01
#define SUB_CHUNK_NUM_MAX 5
#define CHUNK_ITEM_NUM_MAX 5
/*db node id size and assignment*/
#if defined(DB_LARGE_MEM_MODE)
#define BO_HEADER_NODE_SIZE 7
#define NODE_ID_SIZE 4
#define NODE_ID_SET_BIT 8
#define NODE_ID_TP_BIT 10
#define NODE_ID_PG_BIT 10
#define NODE_ID_SET_MASK 0x0FF00000
#define NODE_ID_TP_MASK 0x0FFFFC00
#define NODE_ID_PG_MASK 0x0FFFFFFF
#define SET_BIT_MASK 0x0FF00000
#define TP_BIT_MASK 0x000FFC00
#define PG_BIT_MASK 0x000003FF
#define SAT_MAX_NUM 255
#define TP_MAX_NUM 1024
#define PROG_MAX_NUM 1024
#else
#define BO_HEADER_NODE_SIZE 6
#define NODE_ID_SIZE 3
#define NODE_ID_SET_BIT 8
#define NODE_ID_TP_BIT 8
#define NODE_ID_PG_BIT 8
#define NODE_ID_SET_MASK 0x00FF0000
#define NODE_ID_TP_MASK 0x00FFFF00
#define NODE_ID_PG_MASK 0x00FFFFFF
#define SET_BIT_MASK 0x00FF0000
#define TP_BIT_MASK 0x0000FF00
#define PG_BIT_MASK 0x000000FF
#define SAT_MAX_NUM 255
#define TP_MAX_NUM 255
#define PROG_MAX_NUM 255
#endif
/*db node address size and assignment*/
#define NODE_ADDR_SIZE 3
#define NODE_ADDR_OFFSET_BIT 16
/*db reclaim mode*/
#define DB_RECLAIM_OPERATION 0x01
#define DB_RECLAIM_DATA 0x02
/****************************************************/
#define KEYZ_SAT_ID "sat_id"
#define KEYZ_TP_ID "tp_id"
#define KEYZ_PROG_ID "prog_id"
//for sat node
#define SKEYZ_SAT_ID "sat_id"
#define SKEYZ_SAT_ORBIT "sat_orbit"
#define SKEYZ_SELECTED_FLAG "selected_flag"
#define SKEYZ_TUNER1_VALID "tuner1_valid"
#define SKEYZ_TUNER2_VALID "tuner2_valid"
#define SKEYZ_LNB_POWER "lnb_power"
#define SKEYZ_LNB_TYPE "lnb_type"
#define SKEYZ_POL "pol"
#define SKEYZ_K22 "k22"
#define SKEYZ_V12 "v12"
#define SKEYZ_TONEBURST "toneburst"
#define SKEYZ_LNB_LOW "lnb_low"
#define SKEYZ_LNB_HIGH "lnb_high"
#define SKEYZ_DISEQC_TYPE "DiSEqC_type"
#define SKEYZ_DISEQC_PORT "DiSEqC_port"
#define SKEYZ_DISEQC11_TYPE "DiSEqC11_type"
#define SKEYZ_DISEQC11_PORT "DiSEqC11_port"
#define SKEYZ_POSITIONER_TYPE "positioner_type"
#define SKEYZ_POSITION "position"
#define SKEYZ_NAME_LEN "name_len"
#define SKEYZ_SAT_NAME "satname"
//for tp node
#define TKEYZ_SAT_ID "sat_id"
#define TKEYZ_TP_ID "tp_id"
#define TKEYZ_FREQ "frq"
#define TKEYZ_SYMBOL "sym"
#define TKEYZ_POL "pol"
#define TKEYZ_T_S_ID "t_s_id"
#define TKEYZ_NETWORK_ID "network_id"
//for prog node
#define PKEYZ_SAT_ID "sat_id"
#define PKEYZ_TP_ID "tp_id"
#define PKEYZ_PROG_ID "prog_id"
#define PKEYZ_LEVEL "level"
#define PKEYZ_PRESET_FLAG "Factory" //preset_flag
#define PKEYZ_TV_RADIO "Service Type" //av_flag
#define PKEYZ_SCRAMBLE "Scramble" //ca_mode
#define PKEYZ_VIDEO_PID "Video Pid"
#define PKEYZ_PCR_PID "PCR Pid"
#define PKEYZ_PROG_NUMBER "Service ID" //prog_number
#define PKEY2_PMT_PID "pmt_pid"
#define PKEY2_TUNER1_VALID "tuner1_valid"
#define PKEY2_TUNER2_VALID "tuner2_valid"
#define PKEYZ_FAV_GROUP "Favorite Group"
//#define PKEYZ_FAV_GROUP0 "Favorite" //fav_grp0
//#define PKEYZ_FAV_GROUP1 "Group" //fav_grp1
#define PKEYZ_TELETEXT_PID "teletext_pid"
#define PKEYZ_AUDIO_COUNT "audio_count"
#define PKEYZ_AUDIO_PID1 "Audio Pid1"
#define PKEYZ_AUDIO_PID2 "Audio Pid2"
#define PKEYZ_AUDIO_PID3 "Audio Pid3"
#define PKEYZ_AUDIO_LANG "audio_lang"
#define PKEYZ_NAME_LEN "name_len"
#define PKEYZ_SERVICE_NAME "Service Name"
#define PKEYZ_PROVIDER_NAME_LEN "provider_name_len"
#define PKEYZ_SERVICE_PROVIDER_NAME "service_provider_name"
#define ALL_SERVICE_INFO "All Services"
#define ALL_SATELLITE_INFO "All Satellite"
/*********************************************************/
#pragma pack(1)
struct BO_Sec_Info
{
UINT8 type;
UINT16 status;
UINT32 logic_number;
UINT32 erase_count;
UINT8 valid_flag;
};
#pragma pack()
/*db node index param*/
typedef struct
{
UINT8 node_id[NODE_ID_SIZE];
UINT8 node_addr[NODE_ADDR_SIZE];
}NODE_IDX_PARAM;
typedef struct t_attr_t
{
UINT8 type;
UINT8 node_moved;
UINT16 max_cnt;
UINT16 node_num;
UINT8 *tmp_head_buf;
NODE_IDX_PARAM *table_buf;
//DB_CMD_BUF *cmd_buf;
}DB_TABLE;
typedef struct
{
UINT8 op_type;
UINT8 node_id[NODE_ID_SIZE];
UINT8 node_addr[NODE_ADDR_SIZE];
UINT8 valid_flag;
}OP_PARAM;
/*db command buf*/
typedef struct cmd_buf_t
{
UINT16 max_cnt;
UINT16 cmd_cnt;
OP_PARAM *buf;
}DB_CMD_BUF;
//db3 header
typedef struct _DB_HEADER_T
{
char head_prefix[5];
char table_id[5];
char version;
char field_num;
char *pfield;
// short rec_num;//实际数量
short rec_length;//预制数量
UINT32 *precord;
UINT32 end_flag;
}
db_header_t;
class chunk_item_list
{
public:
//UINT8 sbtype;
//UINT8 itemtype;
UINT8 nItemGroupType;
UINT32 nGroupLen;
char strGroupName[64];
char nItemCount;
char nItemLen;
UINT8 nNameCoding;
char** pItems;
chunk_item_list(){
memset(strGroupName, 0, 64);
nItemCount = 0;
nItemLen = 0;
pItems = NULL;
}
~chunk_item_list(){
if( pItems )
{
for(int i = 0; i < nItemCount; i++)
{
if( pItems[i] )
{
delete []pItems[i];
pItems[i] = NULL;
}
}
delete []pItems;
pItems = NULL;
}
}
int GetLength(){
return (3 + nItemCount * nItemLen);
}
};
typedef struct t_txt_column
{
DataType column_type;
char *column_name;
}
txt_column;
typedef struct t_group_id_name
{
UINT8 nGroupId;
char strGroupName[64];
}
group_id_name;
class CDbParser
{
public:
CDbParser();
virtual ~CDbParser();
// Attributes
protected:
DB_CMD_BUF db_cmd_buf;
OP_PARAM db_cmd_list[MAX_CMD_NUM];
DB_TABLE db_table[DB_TABLE_NUM];// header of db4
NODE_IDX_PARAM db_table_set_buf[MAX_SAT_NUM];//data
NODE_IDX_PARAM db_table_tp_buf[MAX_TP_NUM];//data
NODE_IDX_PARAM db_table_pg_buf[MAX_PROG_NUM];//data
struct BO_Sec_Info* bo_sec_list;//sector头信息
UINT8 bo_free_sec_list[BO_MAX_SECTOR_NUM+1];//空闲sector列表,第0个元素为空闲个数
INT32 db_table_node_length;
UINT32 g_db_base_addr;
UINT32 g_db_length;
UINT32 m_nSectorNum;
UINT8 bo_cur_data_sec_index;
UINT8 bo_head_sec_index;
UINT32 bo_data_free_addr ;
UINT32 bo_head_free_addr;
UINT32 bo_header_addr;
UINT8 *db_update_buf;
//index query
int m_sat_of_sat_index;
int m_sat_of_tp_index;
int m_sat_of_prog_index;
int m_tp_of_tp_index;
int m_tp_of_prog_index;
int m_sat_service_name_index;
int m_tp_service_name_index;
int m_prog_service_name_index;
//sat, tp id counter,临时算法
int m_nCurSatId;
int m_nCurTpId;
public:
chunk_item_list* m_pFavoriteGroup;
//For db3
db_header_t m_tpheader;
db_header_t m_satheader;
db_header_t m_progheader;
// UINT32 g_table_base_addr;
// UINT32 g_table_info_len;
int m_upload_flag;
int m_free_addr;
char *m_pdatabuf;//data buffer
int m_limited_len;//buffer length
int m_block_numbers;//block number
int m_user_data_addr;//offset of user database
int m_def_data_addr;//offset of default database
int m_default_whole_len;
int m_user_data_whole_len;
// Operations
protected:
BOOL GetDataBaseAddr(const CString& strPathName);
INT32 DO_create_table();
INT32 DO_init(UINT32 db_base_addr, UINT32 db_length);
INT32 BO_init(UINT32 db_base_addr, UINT32 db_length);
INT32 BO_flash_write(UINT8 *data, UINT32 len, UINT32 addr);
INT32 BO_read_data(UINT32 addr, UINT32 len, UINT8 *data);
INT32 BO_get_header(UINT32 *head_addr, UINT16 *node_num,UINT32 *free_addr);
UINT8 DO_get_node_type(UINT32 node_id);
INT32 DO_t_process_operation(OP_PARAM param, UINT8 *temp_buf);
INT32 DO_table_rearrange(DB_TABLE *t, UINT8 *buf);
INT32 DB_reclaim_write_header();
UINT8 BO_get_header_sec();
INT32 DB_reclaim_operation();
INT32 BO_read_sec_info(UINT8 sec_idx, struct BO_Sec_Info *sec_info);
void BO_set_sec_list(UINT8 sec_idx, struct BO_Sec_Info sec_info);
INT32 BO_write_sec_info(UINT8 sec_idx, struct BO_Sec_Info *sec_info);
INT32 BO_get_free_sector(UINT8 *sec_index);
UINT8 BO_get_reserve_sec();
INT32 BO_set_header_addr(UINT32 addr);
// INT32 BO_set_data_freeaddr(UINT32 addr);
INT32 BO_set_head_freeaddr(UINT32 addr);
INT32 BO_set_header_sec(UINT8 sec_idx);
INT32 BO_erase_sector(UINT8 sec_index);
INT32 DO_set_table_node_length(INT32 len);
INT32 BO_get_free_addr_in_sector(UINT8 sec_index, UINT8 search_type,UINT8 mode, UINT32 *free_addr);
INT32 BO_add_to_free_list(UINT8 sec_index);
INT32 BO_sector_diagnose( UINT8 sec_idx, struct BO_Sec_Info *sec_info);
UINT32 BO_get_max_logicnum(UINT8 *sec_index);
INT32 BO_reset();
//for db3(fixed length)
int _create_empty_header(db_header_t *pdbhead);
int InitDb3Header();//init_parser();
int free_all_db3_headers();//free_all_headers();
int free_db3_header(db_header_t *pdbhead);
int db4_to_db3_header();
int _db4_2_db3_header(DB_TABLE *pdb_table,db_header_t *pdbhead);
BOOL DB4_to_DB3_transfer();
BOOL UnpackNode(enum NodeType type, char *des, char *src);
BOOL PackNode(enum NodeType type, char *des, char *src, int *pDesLen);
BOOL RearrageDatabase();
//get/set node info, scripter relation
int GetNodeFixedInfo(enum NodeType type, int &offset, int &length);
int GetNodeSize(enum NodeType type);
BOOL MultiBytesToWideChar(unsigned short *to, char *from, int count);
BOOL WideCharToMultiBytes(char *to, unsigned short *from, int count);
//Satcodex relation
BOOL IsExistedSatellite(CTreeCtrl *pTree, HTREEITEM hFather, CString SatName);
HTREEITEM GetSameSatNode(CTreeCtrl *pTree, HTREEITEM hFather, int offset);
BOOL CheckSatNodeField(int offset0, int offset1);
BOOL CheckNodeField(enum NodeType type, const char *keysz, int offset0, int offset1);
BOOL CheckSameTp(CTreeCtrl *pTree, CString tpname, HTREEITEM hSatItem);
BOOL CheckTpNodeField(int offset0, int offset1);
HTREEITEM GetSameTpNode(CTreeCtrl *pTree, HTREEITEM hSatItem, int offset);
long GetTpFreq1(char *buf);
long GetTpPolar1(char *buf);
long GetTpSym1(char *buf);
HTREEITEM AddSatNodeFromSDX(char *buf);
HTREEITEM AddTpNodeFromSDX(HTREEITEM hItem, char *buf);
BOOL AddProgNodeFromSDX(HTREEITEM hTpItem, char *pbuf);
public:
BOOL BigLittleEndConv(void *pData, int nByte);
int SerialItemLen(UINT32 nItemlen, UINT8* buf);
UINT32 ComputeItemLen(UINT8* buf, int* byte_len);
void InitAllVariable();
int GetNodeRealyCount();
int AllocPID(enum NodeType type, SatTPMod* pSatTp = NULL);
int GetIndexOfNodeInfo(NodeField**pNode, const char*keyword);
int GetSatIdIndexofSatNode();//sat of sat
int GetSatIdIndexOfTpNode();//sat of tp
int GetSatIdIndexOfProgNode();//sat of prog
int GetTpIdIndexOfTpNode();//tp of tp
int GetTpIdIndexOfProgNode();//tp of prog
int GetSatServiceNameIndex();
//int GetTpServiceNameIndex();
//int GetProgServiceNameIndex();
int GetSatNodeIndex(const char *keysz, BOOL bFull = FALSE);
int GetTpNodeIndex(const char *keysz, BOOL bFull = FALSE);
int GetProgNodeIndex(const char *keysz, BOOL bFull = FALSE);
// char *GetNodePrivateData(enum NodeType type, int index);
// BOOL SetNodePrivateData(enum NodeType type, int index, char *pcBuf);
// int FindAvailableOrder(int &nMaxOrder);
BOOL SetNodeInfo(enum NodeType type, char *nodesz, int col, char *bufsz);
BOOL GetNodeInfo(enum NodeType type, char *nodesz, int col, char *bufsz);
// BOOL GetNodeInfo(enum NodeType type, int index, int col, char *bufsz);
char *AllocNode(enum NodeType type, int *tpos);
void FreeNode(enum NodeType type, int tpos);
BOOL GetNodeData(enum NodeType type, int index, int col, char *bufsz, int array_index = 0, BOOL bFull = FALSE);
BOOL SetNodeData(enum NodeType type, int index, int col, char *bufsz, BOOL bFull = FALSE);
long GetDataValue(const char *bufsz);
BOOL GenUdbFromBin(const CString& strPathName);
BOOL parserUdb(const CString& filepath, int offset, int count);
BOOL GenDdbFromBin(const CString& strPathName);
BOOL GenDdbFromDdf(const CString& strPathName);
BOOL parserDdb(const CString& filepath, int offset, int count);
BOOL parserSBChunk(char* pData);
BOOL IsValidGroup(UINT8 nGroupId);
BOOL GetGroupName(UINT8 nGroupId, char *name);
BOOL GenDbFromSDX(const CString& filepath);
BOOL GenDbFromTxt(const CString& filepath);
BOOL ReadTxtLine(CFile *fd, unsigned short unicode_flag, unsigned char **str, int nColCountMax);
void LoadDefaultFavorGroup();
BOOL SaveUserDb(CString& strPathName, int nOffset, int nLimitLen);
BOOL SaveDefaultDb(CString& strPathName, int nOffset, int nLimitLen);
BOOL SaveAsBinUdb(CString& strPathName);
BOOL SaveAsBinDdb(CString& strPathName);
BOOL SaveAsUdf(CString& strPathName);
BOOL SaveAsDdf(CString& strPathName);
BOOL SetSatLong(char *buf);
};
#endif // !defined(AFX_DBPARSER_H__3E7FB4AC_14BE_407B_8B82_EE42D7C7CFE3__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -