📄 db_ms.c
字号:
/*
** 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 + -