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 + -
显示快捷键?