db_defs.h

来自「DVB软件,基于CT216软件的开发源程序.」· C头文件 代码 · 共 394 行

H
394
字号
#ifndef DB_APDEF
#define DB_APDEF

#include "dvb_type.h"
#include "db_api.h"

#define TRACE_DB     DVB_Msg(MSG_4_AP, "DB TRACE: %s, %d\n", __FFLL__)

#define		NO_SATELLITE

// CUSTOM DEFINE==================================================
#ifdef DBTOOL_ENABLE
#include "DBTL_SSU_def.h"
#define DB_DATA_BANK	(BANKNUM_DB-BACKUPNUM_DB)
#define DB_BACKUP_BANK	(BACKUPNUM_DB)
#else
#define DB_DATA_BANK	1   // 1~5
#define DB_BACKUP_BANK	0	// 0 or 1
#endif

#if defined(HDTV_DETECTION_ENABLE) && defined(ENABLE_LCN_SUPPORT)
	#define MAX_NUM_OF_SRV_C	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#define MAX_NUM_OF_SRV_S	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#define MAX_NUM_OF_SRV_T	900		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */

	#define MAX_NUM_OF_SAT   	30		/**< must be an even number for DW alignment */
	#define MAX_NUM_OF_SRV  	(MAX_NUM_OF_SRV_T + MAX_NUM_OF_SRV_S + MAX_NUM_OF_SRV_C)
	#define MAX_NUM_OF_TP		150		/**< must be an even number for DW alignment */
#elif defined(ENABLE_LCN_SUPPORT)
	#define MAX_NUM_OF_SRV_C	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#define MAX_NUM_OF_SRV_S	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#define MAX_NUM_OF_SRV_T	950		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */

	#define MAX_NUM_OF_SAT   	30		/**< must be an even number for DW alignment */
	#define MAX_NUM_OF_SRV  	(MAX_NUM_OF_SRV_T + MAX_NUM_OF_SRV_S + MAX_NUM_OF_SRV_C)
	#define MAX_NUM_OF_TP		150		/**< must be an even number for DW alignment */
#else
	#define MAX_NUM_OF_SRV_C	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#define MAX_NUM_OF_SRV_S	0		/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#ifdef DBTOOL_ENABLE
	#define MAX_NUM_OF_SRV_T	(DB_DATA_BANK*1000)
	#else
	#define MAX_NUM_OF_SRV_T	1000	/**< must be an even number for DW alignment, only (MAX_NUM_OF_SRV-1) available, reserve one to separate TV/Radio. */
	#endif

	#define MAX_NUM_OF_SAT   	50		/**< must be an even number for DW alignment */
	#define MAX_NUM_OF_SRV  	(MAX_NUM_OF_SRV_T + MAX_NUM_OF_SRV_S + MAX_NUM_OF_SRV_C)
	#define MAX_NUM_OF_TP		385		/**< must be an even number for DW alignment */
#endif

#define DB_SRV_T_START_IDX	(0)
#define DB_SRV_S_START_IDX	(0)
#define DB_SRV_C_START_IDX	(0)

#ifdef FLASH_EEPROM
    #define MAX_NUM_OF_FILE_BLOCK   128 // 128*DB_FILE_BLOCK_SIZE = 512 bytes
#else
    #define MAX_NUM_OF_FILE_BLOCK   0
#endif

#define DB_VERSION		0x2008		// version 2.007


// FUNCTION DEFINE==================================================
#define DB_DRAM_IMAGE			0	// 0 or 1
#define DB_CACHE_THESHOLD		1000
//#define DB_ACCELERATE_CMD
//#define FLASH_BYTE_MODE


// BANK STRUCTURE===================================================
#define BANK_MAGIC		0x63746462	// ctdb

#define BANK_MAGIC_ADDRESS		0x0000
#define BANK_DATA_START_ADDRESS	0x0004
#define BANK_VERSION_ADDRESS	0xff7c
#define BANK_STATUS_ADDRESS		0xff7e
#define BANK_ID_ADDRESS			0xff7f

#ifdef DBTOOL_ENABLE
#include "DBTL_SSU_def.h"
#define DB_START_BANK	STARTBANK_DB
#else
#define DB_START_BANK	26
#endif

#define DB_TOTAL_BANK		(DB_DATA_BANK+DB_BACKUP_BANK)
#define DB_TOTAL_BANK_ID	(DB_DATA_BANK+1)

#if (DB_BACKUP_BANK==1)
	#define DB_START_BANK_ID 0
#else
	#define DB_START_BANK_ID 1
#endif


// ITEM SIZE========================================================
#define DB_POOL_ITEM_HEADER		4

#define DB_SRV_INFO_ITEM_SIZE	sizeof(DB_SrvDetail)	//32
#define DB_TP_INFO_ITEM_SIZE	sizeof(DB_TpDetailEx)		//12
#define DB_SAT_INFO_ITEM_SIZE	sizeof(DB_NetDetail)	//28
#define DB_FILE_BLOCK_SIZE      4

#define DB_SRV_POOL_ITEM_SIZE	(DB_SRV_INFO_ITEM_SIZE+DB_POOL_ITEM_HEADER)
#define DB_TP_POOL_ITEM_SIZE	(DB_TP_INFO_ITEM_SIZE+DB_POOL_ITEM_HEADER)
#define DB_SAT_POOL_ITEM_SIZE	(DB_SAT_INFO_ITEM_SIZE+DB_POOL_ITEM_HEADER)
#define DB_FILE_POOL_ITEM_SIZE	(DB_FILE_BLOCK_SIZE+DB_POOL_ITEM_HEADER)

#define DB_IAT_ITEM_SIZE	2

#define DB_RELATION_SRV_ITEM_SIZE	sizeof(DB_SrvRel)
#define DB_RELATION_TP_ITEM_SIZE	sizeof(DB_TpRel)
#define DB_RELATION_SAT_ITEM_SIZE	sizeof(DB_SatRel)

#define DB_EXTRA_SRV_ITEM_SIZE		sizeof(DB_ExtraSrv)

// ITEM NUMBER======================================================
#if (DB_DATA_BANK==1)
    #define DB_SRV_NUM_IN_ONE_BANK	(MAX_NUM_OF_SRV+MAX_NUM_OF_SRV/10)
#else
    #define DB_SRV_NUM_IN_ONE_BANK	((BANK_VERSION_ADDRESS-BANK_DATA_START_ADDRESS)/DB_SRV_POOL_ITEM_SIZE)  //1816
#endif

#define DB_TP_NUM_IN_ONE_BANK	(MAX_NUM_OF_TP+MAX_NUM_OF_TP/10)
#define DB_SAT_NUM_IN_ONE_BANK	(MAX_NUM_OF_SAT+16)
#define DB_FILE_BLOCK_NUM_IN_ONE_BANK  (MAX_NUM_OF_FILE_BLOCK*4)

// TABLE SIZE=======================================================
#define DB_EXTRA_SRV_SIZE	( MAX_NUM_OF_SRV*DB_EXTRA_SRV_ITEM_SIZE )
#define DB_RELATION_SIZE	( (u32)MAX_NUM_OF_SRV*DB_RELATION_SRV_ITEM_SIZE + (u32)MAX_NUM_OF_TP*DB_RELATION_TP_ITEM_SIZE + (u32)MAX_NUM_OF_SAT*DB_RELATION_SAT_ITEM_SIZE )

#define DB_IAT_SIZE			( (MAX_NUM_OF_SRV+MAX_NUM_OF_TP+MAX_NUM_OF_SAT+MAX_NUM_OF_FILE_BLOCK)*DB_IAT_ITEM_SIZE )

#define DB_SRV_INFO_TABLE_SIZE	(DB_SRV_NUM_IN_ONE_BANK*DB_SRV_POOL_ITEM_SIZE)
#define DB_TP_INFO_TABLE_SIZE	(DB_TP_NUM_IN_ONE_BANK*DB_TP_POOL_ITEM_SIZE)
#define DB_SAT_INFO_TABLE_SIZE	(DB_SAT_NUM_IN_ONE_BANK*DB_SAT_POOL_ITEM_SIZE)
#define DB_FILE_SIZE            (DB_FILE_BLOCK_NUM_IN_ONE_BANK*DB_FILE_POOL_ITEM_SIZE)

// DRAM ADDRESS=====================================================
#define DB_DRAM_START		((u32)(pu8DatabaseStartPtr))
#if (DB_DRAM_IMAGE==1)
#define DB_DRAM_LENGTH 		(0x0004B000)
#else
#define DB_DRAM_LENGTH 		(0x0001E000)
#endif
#define DB_DRAM_END         (DB_DRAM_START + DB_DRAM_LENGTH)

#define DB_DRAM_EXTRA_SRV	DB_DRAM_START

#define DB_DRAM_IAT			(DB_DRAM_EXTRA_SRV+DB_EXTRA_SRV_SIZE)
#define DB_DRAM_IAT_SRV		DB_DRAM_IAT
#define DB_DRAM_IAT_TP		(DB_DRAM_IAT_SRV+MAX_NUM_OF_SRV*DB_IAT_ITEM_SIZE)
#define DB_DRAM_IAT_SAT		(DB_DRAM_IAT_TP+MAX_NUM_OF_TP*DB_IAT_ITEM_SIZE)
#define DB_DRAM_IAT_FILE    (DB_DRAM_IAT_SAT+MAX_NUM_OF_SAT*DB_IAT_ITEM_SIZE)

#if (DB_DRAM_IMAGE==1)
	#define DB_CACHE_DRAM_START		(DB_DRAM_START+DB_EXTRA_SRV_SIZE+DB_IAT_SIZE)
	#define DB_DRAM_RELATION		(DB_CACHE_DRAM_START+BANK_DATA_START_ADDRESS)
#else
	#define DB_DRAM_RELATION		(DB_DRAM_START+DB_EXTRA_SRV_SIZE+DB_IAT_SIZE)
	#define DB_CACHE_DRAM_START		(DB_DRAM_RELATION+DB_RELATION_SIZE)
#endif

#define DB_DRAM_RELATION_SRV	DB_DRAM_RELATION
#define DB_DRAM_RELATION_TP		(DB_DRAM_RELATION_SRV+MAX_NUM_OF_SRV*DB_RELATION_SRV_ITEM_SIZE)
#define DB_DRAM_RELATION_SAT	(DB_DRAM_RELATION_TP+MAX_NUM_OF_TP*DB_RELATION_TP_ITEM_SIZE)

#define DEFAULT_NORMAL_C_LOCAL_FREQUAL          (5150)
#define DEFAULT_NORMAL_KU_LOCAL_FREQUAL         (11300)
#define DEFAULT_UNIVERSAL_LOW_LOCAL_FREQUAL     (9750)
#define DEFAULT_UNIVERSAL_HIGH_LOCAL_FREQUAL    (10600)

//Dummy E2P
#define FLASH_EEPROM_SIZE (MAX_NUM_OF_FILE_BLOCK*DB_FILE_BLOCK_SIZE)
// TYPE DEFINE======================================================

typedef enum
{
    EN_SAT_TABLE,
    EN_TP_TABLE,
    EN_SRV_TABLE,
	EN_RELATION_TABLE,
	EN_GENERAL_FILE,
	MAX_TABLE_NUMBER
}EN_DB_TABLE_TYPE;

typedef struct _SrvDetail
{
	char acServiceName[MAX_SERVICE_NAME_LENGTH];
	u16	u16ServiceId;
	u16	u16PCRPid ;
	u16	u16VideoPid ;
#ifdef ENABLE_LCN_SUPPORT
	u16 bitLCNGet:1;
#else
	u16 bitReserved1:1;
#endif
	u16 bitAc3Flag:1;
#ifdef SUPPORT_SECOND_AUDIO_LANGUAGE
	u8  u8MultiAudio:1;
#else
    u16 bitReserved2:1;
#endif//SUPPORT_SECOND_AUDIO_LANGUAGE
	u16	u16AudioPid:13 ;
	u16	u16TTXPid;
	u8	u8Type ;
	u8	u8AudioVolume; /* Store audio volume step by service */
	u16	u16TypeEX;
	u16	u16PMTPid;
	u16 u16CASystemID;
#ifdef ENABLE_LCN_SUPPORT
	u16	b1VisibleService	: 1;
	u16 b1LCNEnable			: 1;
	u16 u16LCN				:14;

	u16 u16NID; /* Network ID */
    //u16 u16Reserved;
#endif
	u16 u16TSID; /* Transport Stream ID */
	u16 u16ONID; /* Original Network ID */
#ifdef  HDTV_DETECTION_ENABLE
	u8 u8StreamType ;
#endif    
}_Pack_Struct_
DB_SrvDetail;

typedef struct _SatTpDetail
{
	u16		u16LocalFrequency;
	u16		u16TPFrequency;
	u16		u16SymbolRate;
	bool8	b8Polar_H		:1;
	bool8	b8Control12V	:1;
	bool8	b8Tone22K		:1;
	u8		u8DiSEqC		:3;
	u8		u8Unused1		:2;
	u8		u8Unused2;
#if 1	
	u16 u16OrgNID; /**< Original Network ID*/
	u16 u16TPID; /**< Transport Stream ID */
#endif	
}_Pack_Struct_
DB_TpDetail;	/* 8 bytes */

typedef struct _TerreTpDetail
{
	u32	u32FrequencyKHz	:24;
	u32	u8BandwidthMHz	:8;
	u8	u8ChNo			:8;
	u8	u8Const			:2;	/* EN_CONSTELLATION */
    u8	u8HPCodeRate	:3;	/* EN_CODERATE */
    u8	u8LPCodeRate	:3;	/* EN_CODERATE */
    u8	u8GI			:3;	/* EN_GUARD */
    u8	u8FFT			:2;	/* EN_FFT */
    u8	u8Hierarchy		:3; /* EN_HIERARCHY */
    u8	u8Unused;
#if 1	
	u16 u16OrgNID; /**< Original Network ID*/
	u16 u16TPID; /**< Transport Stream ID */
#endif    
} _Pack_Struct_	DB_TerreTpDetail;	/* 8 bytes */

typedef struct _CableTpDetail
{
	u32	u32FrequencyKHz	:24;
	u32	u8BandwidthMHz	:4;
	u32	u8SpectrumInv	:4;
	u8	u8ChNo;
	u16 u16SymbRateKB;
	u8	u8QamType;
#if 1	
	u16 u16OrgNID; /**< Original Network ID*/
	u16 u16TPID; /**< Transport Stream ID */
#endif		
} _Pack_Struct_	DB_CableTpDetail;	/* 8 bytes */

typedef union _TpDetail
{
	DB_TpDetail			tpSat;
	DB_TerreTpDetail	tpTerre;
	DB_CableTpDetail	tpCable;
} DB_TpDetailEx;

typedef struct _SatNetDetail
{
	char	acSatelliteName[MAX_SAT_NAME_LENGTH];
	u16		u16LocalFrequency_High ;
	u16		u16LocalFrequency ;
	s16		s16Longitude;
	bool8	b8Control12V	:1;
	bool8	b8Tone22K		:1;
	u8		u8DiSEqC		:3;
	u8		u8LNBPower		:3;
	u8		u8LNBType		:2;
	u8		u8MotorPosition	:6;
}_Pack_Struct_ DB_SatDetail;	/* 24 bytes */

typedef struct _TerreNetDetail
{
	char			acProviderName[MAX_PROVIDER_NAME_LENGTH];
	u8				u8Unused2[8];
} _Pack_Struct_ DB_TerreNetDetail;	/* 24 bytes */

typedef struct _CableNetDetail
{
	char			acProviderName[MAX_PROVIDER_NAME_LENGTH];
	u8				u8Unused2[8];
} _Pack_Struct_ DB_CableNetDetail;	/* 24 bytes */

typedef struct _NetDetail
{
	EN_SYSTEM_TYPE	enSysType	:4;
	u8				u8NimNo		:4;
	u8				u8Unused1[3];

	union
	{
		DB_SatDetail		netSat;
		DB_TerreNetDetail	netTerre;
		DB_CableNetDetail	netCable;
	};
} _Pack_Struct_ DB_NetDetail;

typedef struct _SrvRel
{
	u16 u16LogicAddress;
	u16 u16TpIdx;
}_Pack_Struct_
DB_SrvRel;

typedef struct _TpRel
{
	u16 u16LogicAddress;
	u16 u16SatIdx;
}_Pack_Struct_
DB_TpRel;

typedef struct _SatRel
{
	u16 u16LogicAddress;
	u16 u16Unused;
	s16 as16SrvStartIdx[2];	// 0 for EN_SERVICE_TYPE_TV, 1 for EN_SERVICE_TYPE_RADIO
	s16 as16SrvEndIdx[2];	// 0 for EN_SERVICE_TYPE_TV, 1 for EN_SERVICE_TYPE_RADIO
}_Pack_Struct_
DB_SatRel;

typedef struct _ExtraSrv
{
	u16 u16TypeEx;
	u16 u16EIT_HeaderIdx;
}_Pack_Struct_
DB_ExtraSrv;
// Database Pointer========================================================
extern u8* pu8DatabaseStartPtr;

// PROTOTYPE========================================================
bool8 DVB_ServiceReadDetail(EN_SERVICE_TYPE enSrvType, u16 u16Idx, DB_SrvDetail *pstService, DB_SrvRel *pstSrvRel);
bool8 DVB_ServiceUpdateDetail(EN_SERVICE_TYPE enSrvType, u16 u16Idx, DB_SrvDetail *pstService, u16 u16TpIdx);
bool8 DVB_ServiceAddDetail(EN_SERVICE_TYPE enSrvType, u16 *pu16Idx, DB_SrvDetail *pstService, u16 u16TpIdx);

bool8 DVB_TPAddDetailEx(u16 *pu16TpIdx, DB_TpDetailEx *pstTpItem, u16 u16NetIdx);
bool8 DVB_TPReadDetailEx(u16 u16TpIndex, DB_TpDetailEx *pstTpItem, DB_TpRel *pstTpRel);
bool8 DVB_TPUpdateDetailEx(u16 u16TpIndex, DB_TpDetailEx *pstTpItem);

bool8 DVB_NetAddDetail(u16 *pu16NetIdx, DB_NetDetail *pstNetDetail);
bool8 DVB_NetReadDetail(u16 u16NetIdx, DB_NetDetail *pstNetItem, DB_SatRel *pstNetRel);
bool8 DVB_NetUpdateDetail(u16 u16NetIdx, DB_NetDetail *pstNetDetail);

u16 DVB_DBGetEitHeader(EN_SERVICE_TYPE enSrvType, u16 u16idx);
void DVB_DBSetEitHeader(EN_SERVICE_TYPE enSrvType, u16 u16idx, u16 u16EitHeader);

//EXTENSION PROTOTYPES
bool8 DVB_SatAddDetail(u8 *pu8SatIdx, DB_SatDetail *pstSatItem);
bool8 DVB_SatReadDetail(u8 u8SatIndex, DB_SatDetail *pstSatItem, DB_SatRel *pstSatRel );
bool8 DVB_SatUpdateDetail(u8 u8SatIndex, DB_SatDetail *pstSatItem);
bool8 DVB_CableNetAddDetail(u16 *pu16TerreIdx, DB_CableNetDetail *pstCableItem);
bool8 DVB_CableNetReadDetail(u16 u16CableIndex, DB_CableNetDetail *pstCableItem, DB_SatRel *pstSatRel);
bool8 DVB_CableNetUpdateDetail(u16 u16CableIndex, DB_CableNetDetail *pstCableItem);
bool8 DVB_TerreNetAddDetail(u16 *pu16TerreIdx, DB_TerreNetDetail *pstTerreItem);
bool8 DVB_TerreNetReadDetail(u16 u16TerreIndex, DB_TerreNetDetail *pstTerreItem, DB_SatRel *pstSatRel);
bool8 DVB_TerreNetUpdateDetail(u16 u16TerreIndex, DB_TerreNetDetail *pstTerreItem);
bool8 DVB_TPAddDetail(u16 *pu16Idx, DB_TpDetail *pstTpItem, u16 u16SatIdx);
bool8 DVB_TPReadDetail(u16 u16TpIndex, DB_TpDetail *pstTpItem, DB_TpRel *pstTpRel);
bool8 DVB_TPUpdateDetail(u16 u16TpIndex, DB_TpDetail *pstTpItem);
bool8 DVB_CableTPAddDetail(u16 *pu16Idx, DB_CableTpDetail *pstTpItem, u16 u16SatIdx);
bool8 DVB_CableTPReadDetail(u16 u16TpIndex, DB_CableTpDetail *pstTpItem, DB_TpRel *pstTpRel);
bool8 DVB_CableTPUpdateDetail(u16 u16TpIndex, DB_CableTpDetail *pstTpItem);
bool8 DVB_TerreTPAddDetail(u16 *pu16Idx, DB_TerreTpDetail *pstTpItem, u16 u16SatIdx);
bool8 DVB_TerreTPReadDetail(u16 u16TpIndex, DB_TerreTpDetail *pstTpItem, DB_TpRel *pstTpRel);
bool8 DVB_TerreTPUpdateDetail(u16 u16TpIndex, DB_TerreTpDetail *pstTpItem);

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?