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

📄 db_ms.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
** Marlin 20060504 Modify this file for combo DB functions.
*/
#include <stdio.h>
#include <string.h>
#include "ap_defs.h"
#include "dvb_type.h"
#include "db_defs.h"
#include "db_dram.h"
#include "dvb_flash.h"
#include "dvb_msg.h"
#include "dvb_sys.h"

#include "db_defs.h"
#include "db_fs.h"

/*******************************************************************************************/
#if 0
#define DBMS_MSG(p)		
#else
#define DBMS_MSG(p)			printf p
#endif

#if 1
#define DBMS_DBG(p)
#else
#define DBMS_DBG(p) 		printf p
#endif

/*******************************************************************************************/         
u8* pu8DatabaseStartPtr = NULL;

static s16 m_as16SrvTotal[EN_SYSTEM_TYPE_TOTAL][EN_SERVICE_TYPE_TOTAL] = {{-1,-1},{-1,-1},{-1,-1}};
static s16 m_as16TpTotal [EN_SYSTEM_TYPE_TOTAL] = {-1,-1,-1};
static s16 m_as16NetTotal[EN_SYSTEM_TYPE_TOTAL] = {-1,-1,-1};

#ifdef DVB_SYSTEM_C
static EN_SYSTEM_TYPE  m_enSystemType = EN_SYSTEM_TYPE_DVBC;
#elif defined(DVB_SYSTEM_T)
static EN_SYSTEM_TYPE  m_enSystemType = EN_SYSTEM_TYPE_DVBT;
#else
static EN_SYSTEM_TYPE  m_enSystemType = EN_SYSTEM_TYPE_DVBS;
#endif

// EXTRA SERVICE INFO===================================================================================
static void _extra_srvinfo_set(u16 u16SrvRelIdx, DB_ExtraSrv *pstExtraSrv)
{
	DVB_DramWrite(
		DB_DRAM_EXTRA_SRV + DB_EXTRA_SRV_ITEM_SIZE * u16SrvRelIdx,
		(u8*)pstExtraSrv, DB_EXTRA_SRV_ITEM_SIZE);
}

static void _extra_srvinfo_get(u16 u16SrvRelIdx, DB_ExtraSrv *pstExtraSrv)
{
	DVB_DramRead(
		DB_DRAM_EXTRA_SRV + DB_EXTRA_SRV_ITEM_SIZE * u16SrvRelIdx,
		(u8*)pstExtraSrv, DB_EXTRA_SRV_ITEM_SIZE);
}

#ifdef RESERVED
static void _extra_srvinfo_dump(void)
{
	DBMS_DBG(( "\nDUMP ExtraSrv\n"));
	DVB_DramDump(DB_DRAM_EXTRA_SRV, DB_EXTRA_SRV_SIZE);
}
#endif
// EXTRA SERVICE INFO===================================================================================

// DB RELATION=====================================================================================
static u16 _network_get_total_all_system(void)
{
	EN_SYSTEM_TYPE	enSysType;
	u16				u16Total;
	
	u16Total = 0;
	for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
	{
		if(m_as16NetTotal[enSysType] != -1)
		{
			u16Total += m_as16NetTotal[enSysType];
		}	
	}
	
	return u16Total;
}
/*******************************************************************************************/

static u16 _network_get_relation_index(EN_SYSTEM_TYPE enSysType, u16 u16NetIdx)
{
	if(enSysType == EN_SYSTEM_TYPE_DVBS)
	{
		u16NetIdx = (MAX_NUM_OF_SAT - 1) - u16NetIdx;
	}
	return u16NetIdx;
}
/*******************************************************************************************/

static u16 _tp_get_total_all_system(void)
{
	EN_SYSTEM_TYPE	enSysType;
	u16				u16Total;
	
	u16Total = 0;
	for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
	{
		if(m_as16TpTotal[enSysType] != -1)
		{
			u16Total += m_as16TpTotal[enSysType];
		}	
	}
	
	return u16Total;
}
/*******************************************************************************************/

static u16 _tp_get_relation_index(EN_SYSTEM_TYPE enSysType, u16 u16TpIdx)
{
	if(enSysType == EN_SYSTEM_TYPE_DVBS)
	{
		u16TpIdx = (MAX_NUM_OF_TP - 1) - u16TpIdx;
	}
	return u16TpIdx;
}
/*******************************************************************************************/

static u16 _service_get_total(EN_SYSTEM_TYPE enSysType)
{
	EN_SERVICE_TYPE	enSrvType;
	u16				u16Total = 0;
	
	if(enSysType >= EN_SYSTEM_TYPE_TOTAL)
	{
		return 0;
	}
	
	for(enSrvType = 0; enSrvType < EN_SERVICE_TYPE_TOTAL; enSrvType++)
	{
		if(m_as16SrvTotal[enSysType][enSrvType] != -1)
			u16Total += m_as16SrvTotal[enSysType][enSrvType];
	}
	
	return u16Total;
}
/*******************************************************************************************/

static u16 _service_get_total_all_system(void)
{
	EN_SYSTEM_TYPE	enSysType;
	u16				u16Total;
	
	u16Total = 0;
	for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
	{
		u16Total += _service_get_total(enSysType);
	}
	return u16Total;
}
/*******************************************************************************************/

static u16 _service_get_maximum(EN_SYSTEM_TYPE enSysType)
{
	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:	return MAX_NUM_OF_SRV_C;
	case EN_SYSTEM_TYPE_DVBT:	return MAX_NUM_OF_SRV_T;
	case EN_SYSTEM_TYPE_DVBS:	return MAX_NUM_OF_SRV_S;
	default:					return 0;
	}
}
/*******************************************************************************************/

static u16 _service_get_start_index_in_system(EN_SYSTEM_TYPE enSysType)
{
	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:	return DB_SRV_C_START_IDX;
	case EN_SYSTEM_TYPE_DVBT:	return DB_SRV_T_START_IDX;
	case EN_SYSTEM_TYPE_DVBS:	return DB_SRV_S_START_IDX;
	default:					return 0;
	}
}
/*******************************************************************************************/

static u16 _service_get_relation_index(	EN_SYSTEM_TYPE	enSysType,
										EN_SERVICE_TYPE	enSrvType,
										u16 			u16SrvIdx)
{
	if(enSrvType == EN_SERVICE_TYPE_RADIO)
	{
		u16SrvIdx = (_service_get_maximum(enSysType) - 1) - u16SrvIdx;
	}	
	u16SrvIdx += _service_get_start_index_in_system(enSysType);

	return u16SrvIdx;
}
/*******************************************************************************************/

void DVB_DBSetSystemType(EN_SYSTEM_TYPE enSysType)
{
	m_enSystemType = enSysType;
}
/*******************************************************************************************/

EN_SYSTEM_TYPE DVB_DBGetSystemType(void)
{
	return m_enSystemType;
}
/*******************************************************************************************/

u16 DVB_NetGetTotal(void)
{
#ifdef DVB_SYSTEM_C
	if(m_as16NetTotal[EN_SYSTEM_TYPE_DVBC] < 0)
	{
		m_as16NetTotal[EN_SYSTEM_TYPE_DVBC] = DVB_DramSearch(
			DB_DRAM_RELATION_SAT, DB_RELATION_SAT_ITEM_SIZE,
			MAX_NUM_OF_SAT, 0xFFFFFFFF, 0xFFFFFFFF, TRUE);
	}	
#else
	if(m_as16NetTotal[EN_SYSTEM_TYPE_DVBT] < 0)
	{
		m_as16NetTotal[EN_SYSTEM_TYPE_DVBT] = DVB_DramSearch(
			DB_DRAM_RELATION_SAT, DB_RELATION_SAT_ITEM_SIZE,
			MAX_NUM_OF_SAT, 0xFFFFFFFF, 0xFFFFFFFF, TRUE);
	}	
#endif
	if(m_as16NetTotal[EN_SYSTEM_TYPE_DVBS] < 0)
	{
		m_as16NetTotal[EN_SYSTEM_TYPE_DVBS] = DVB_DramSearch(
			DB_DRAM_RELATION_SAT + DB_RELATION_SAT_ITEM_SIZE * (MAX_NUM_OF_SAT - 1),
			DB_RELATION_SAT_ITEM_SIZE, MAX_NUM_OF_SAT, 0xFFFFFFFF, 0xFFFFFFFF, FALSE);
	}
	return m_as16NetTotal[m_enSystemType];
}
/*******************************************************************************************/

u16 DVB_ServiceGetTotal(EN_SERVICE_TYPE enSrvType)
{
	EN_SYSTEM_TYPE	enSysType;
	u16				u16max, u16start;

	for(enSysType = 0; enSysType < EN_SYSTEM_TYPE_TOTAL; enSysType++)
	{
		u16max   = _service_get_maximum(enSysType);
		u16start = _service_get_start_index_in_system(enSysType);

		if (m_as16SrvTotal[enSysType][EN_SERVICE_TYPE_TV] < 0)
		{
			m_as16SrvTotal[enSysType][EN_SERVICE_TYPE_TV] =
				DVB_DramSearch(	DB_DRAM_RELATION_SRV + DB_RELATION_SRV_ITEM_SIZE * u16start,
								DB_RELATION_SRV_ITEM_SIZE, u16max, 0xFFFFFFFF, 0xFFFFFFFF, TRUE);
		}

		if (m_as16SrvTotal[enSysType][EN_SERVICE_TYPE_RADIO] < 0)
		{
			m_as16SrvTotal[enSysType][EN_SERVICE_TYPE_RADIO] =
				DVB_DramSearch(	DB_DRAM_RELATION_SRV + DB_RELATION_SRV_ITEM_SIZE * (u16start + u16max - 1),
								DB_RELATION_SRV_ITEM_SIZE, u16max, 0xFFFFFFFF, 0xFFFFFFFF, FALSE);
		}
	}

	return m_as16SrvTotal[m_enSystemType][enSrvType];
}
/*******************************************************************************************/

u16 DVB_TPGetTotal(void)
{
#ifdef DVB_SYSTEM_C
	if (m_as16TpTotal[EN_SYSTEM_TYPE_DVBC] < 0)
	{
		m_as16TpTotal[EN_SYSTEM_TYPE_DVBC] = DVB_DramSearch(
			DB_DRAM_RELATION_TP, DB_RELATION_TP_ITEM_SIZE,
			MAX_NUM_OF_TP, 0xFFFFFFFF, 0xFFFFFFFF, TRUE);
	}	
#else
	if (m_as16TpTotal[EN_SYSTEM_TYPE_DVBT] < 0)
	{
		m_as16TpTotal[EN_SYSTEM_TYPE_DVBT] = DVB_DramSearch(
			DB_DRAM_RELATION_TP, DB_RELATION_TP_ITEM_SIZE,
			MAX_NUM_OF_TP, 0xFFFFFFFF, 0xFFFFFFFF, TRUE);
	}	
#endif
	if (m_as16TpTotal[EN_SYSTEM_TYPE_DVBS] < 0)
	{
		m_as16TpTotal[EN_SYSTEM_TYPE_DVBS] = DVB_DramSearch(
			DB_DRAM_RELATION_TP + DB_RELATION_TP_ITEM_SIZE * (MAX_NUM_OF_TP - 1),
			DB_RELATION_TP_ITEM_SIZE, MAX_NUM_OF_TP, 0xFFFFFFFF, 0xFFFFFFFF, FALSE);
	}
	return m_as16TpTotal[m_enSystemType];
}
/*******************************************************************************************/

static void _dvb_tp_2_db(	EN_SYSTEM_TYPE enSysType, DVB_TPInfoEx *pstTp,
							DB_TpRel *pstTpRel, DB_TpDetailEx *pstTpDetail)
{
	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:
		pstTpRel->u16SatIdx                  = pstTp->tpCable.u16NetworkIndex;
		pstTpDetail->tpCable.u16OrgNID 		= pstTp->tpCable.u16OrgNID;
		pstTpDetail->tpCable.u16TPID 		= pstTp->tpCable.u16TPID;
		pstTpDetail->tpCable.u32FrequencyKHz = pstTp->tpCable.u32FrequencyKHz;
		pstTpDetail->tpCable.u8BandwidthMHz  = pstTp->tpCable.u8BandwidthMHz;
		pstTpDetail->tpCable.u8SpectrumInv   = pstTp->tpCable.u8SpectrumInv;
		pstTpDetail->tpCable.u8ChNo          = pstTp->tpCable.u8ChNo;
		pstTpDetail->tpCable.u16SymbRateKB	 = pstTp->tpCable.u16SymbRateKB;
		pstTpDetail->tpCable.u8QamType		 = pstTp->tpCable.u8QamType;
		break;
	case EN_SYSTEM_TYPE_DVBT:
		pstTpRel->u16SatIdx                  = pstTp->tpTerre.u16NetworkIndex;
		pstTpDetail->tpTerre.u16OrgNID 		= pstTp->tpTerre.u16OrgNID;
		pstTpDetail->tpTerre.u16TPID 		= pstTp->tpTerre.u16TPID;
		pstTpDetail->tpTerre.u32FrequencyKHz = pstTp->tpTerre.u32FrequencyKHz;
		pstTpDetail->tpTerre.u8BandwidthMHz  = pstTp->tpTerre.u8BandwidthMHz;
		pstTpDetail->tpTerre.u8ChNo          = pstTp->tpTerre.u8ChNo;
		pstTpDetail->tpTerre.u8FFT           = pstTp->tpTerre.u8FFT;
		pstTpDetail->tpTerre.u8Const         = pstTp->tpTerre.u8Const;
		pstTpDetail->tpTerre.u8GI            = pstTp->tpTerre.u8GI;
		pstTpDetail->tpTerre.u8Hierarchy     = pstTp->tpTerre.u8Hierarchy;
		break;
	case EN_SYSTEM_TYPE_DVBS:
		pstTpRel->u16SatIdx                  = pstTp->tpSat.u8SatelliteIndex;
		pstTpDetail->tpSat.u16OrgNID 		= pstTp->tpSat.u16OrgNID;
		pstTpDetail->tpSat.u16TPID 			= pstTp->tpSat.u16TPID;
		pstTpDetail->tpSat.b8Control12V      = pstTp->tpSat.b8Control12V;
		pstTpDetail->tpSat.b8Polar_H         = pstTp->tpSat.b8Polar_H;
		pstTpDetail->tpSat.b8Tone22K         = pstTp->tpSat.b8Tone22K;
		pstTpDetail->tpSat.u16LocalFrequency = pstTp->tpSat.u16LocalFrequency;
		pstTpDetail->tpSat.u16SymbolRate     = pstTp->tpSat.u16SymbolRate;
		pstTpDetail->tpSat.u16TPFrequency    = pstTp->tpSat.u16TPFrequency;
		pstTpDetail->tpSat.u8DiSEqC          = pstTp->tpSat.u8DiSEqC;
		break;
	default:
		break;
	}
}
/*******************************************************************************************/

static void _db_2_dvb_tp(	EN_SYSTEM_TYPE enSysType, DVB_TPInfoEx *pstTp,
							DB_TpRel *pstTpRel, DB_TpDetailEx *pstTpDetail)
{
	switch(enSysType)
	{
	case EN_SYSTEM_TYPE_DVBC:
		pstTp->tpCable.u16NetworkIndex = pstTpRel->u16SatIdx;
		pstTp->tpCable.u16OrgNID		= pstTpDetail->tpCable.u16OrgNID;
		pstTp->tpCable.u16TPID 			= pstTpDetail->tpCable.u16TPID;
		pstTp->tpCable.u32FrequencyKHz = pstTpDetail->tpCable.u32FrequencyKHz;
		pstTp->tpCable.u8BandwidthMHz  = pstTpDetail->tpCable.u8BandwidthMHz;
		pstTp->tpCable.u8SpectrumInv   = pstTpDetail->tpCable.u8SpectrumInv;
		pstTp->tpCable.u8ChNo          = pstTpDetail->tpCable.u8ChNo;
		pstTp->tpCable.u16SymbRateKB   = pstTpDetail->tpCable.u16SymbRateKB;
		pstTp->tpCable.u8QamType       = pstTpDetail->tpCable.u8QamType;
		break;
	case EN_SYSTEM_TYPE_DVBT:
		pstTp->tpTerre.u16NetworkIndex = pstTpRel->u16SatIdx;
		pstTp->tpTerre.u16OrgNID		= pstTpDetail->tpTerre.u16OrgNID;
		pstTp->tpTerre.u16TPID 			= pstTpDetail->tpTerre.u16TPID;
		pstTp->tpTerre.u32FrequencyKHz = pstTpDetail->tpTerre.u32FrequencyKHz;
		pstTp->tpTerre.u8BandwidthMHz  = pstTpDetail->tpTerre.u8BandwidthMHz;
		pstTp->tpTerre.u8ChNo          = pstTpDetail->tpTerre.u8ChNo;
		pstTp->tpTerre.u8FFT           = pstTpDetail->tpTerre.u8FFT;
		pstTp->tpTerre.u8Const         = pstTpDetail->tpTerre.u8Const;
		pstTp->tpTerre.u8GI            = pstTpDetail->tpTerre.u8GI;
		break;
	case EN_SYSTEM_TYPE_DVBS:
		pstTp->tpSat.u8SatelliteIndex  = pstTpRel->u16SatIdx;
		pstTp->tpSat.u16OrgNID			= pstTpDetail->tpSat.u16OrgNID;
		pstTp->tpSat.u16TPID 			= pstTpDetail->tpSat.u16TPID;
		pstTp->tpSat.b8Control12V      = pstTpDetail->tpSat.b8Control12V;
		pstTp->tpSat.b8Polar_H         = pstTpDetail->tpSat.b8Polar_H;
		pstTp->tpSat.b8Tone22K         = pstTpDetail->tpSat.b8Tone22K;
		pstTp->tpSat.u16LocalFrequency = pstTpDetail->tpSat.u16LocalFrequency;
		pstTp->tpSat.u16SymbolRate     = pstTpDetail->tpSat.u16SymbolRate;
		pstTp->tpSat.u16TPFrequency    = pstTpDetail->tpSat.u16TPFrequency;
		pstTp->tpSat.u8DiSEqC          = pstTpDetail->tpSat.u8DiSEqC;
		break;
	default:
		break;

⌨️ 快捷键说明

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