⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbparser.h

📁 AliEditor_Source code
💻 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 + -