📄 db_ms.c
字号:
{
stSrvRel.u16TpIdx = u16TpIdx;
DBFS_RelationSetSrv(u16RelIdx, &stSrvRel);
}
DBFS_InfoWrite(EN_SRV_TABLE, stSrvRel.u16LogicAddress, (u8*)pstService);
_extra_srvinfo_get(u16RelIdx, &stExtraSrv);
stExtraSrv.u16TypeEx = pstService->u16TypeEX;
_extra_srvinfo_set(u16RelIdx, &stExtraSrv);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceRead(EN_SERVICE_TYPE enSrvType, u16 u16Idx, DVB_ServiceInfo *pstService)
{
u16 u16RelIdx;
DB_SrvRel stSrvRel;
DB_ExtraSrv stExtraSrv;
DB_SrvDetail stSrvDetail;
DBMS_DBG(("DVB_ServiceRead()-SysType=%d,SrvType=%d,SrvIdx=%d,Total=%d\n",
m_enSystemType, enSrvType, u16Idx, m_as16SrvTotal[m_enSystemType][enSrvType]));
memset(pstService, 0, sizeof(DVB_ServiceInfo));
//DBMS_DBG(( "DVB_ServiceRead(): index=%d, total=%d\n", u16Idx, m_as16SrvTotal[m_enSystemType][enSrvType]));
if(u16Idx >= m_as16SrvTotal[m_enSystemType][enSrvType])
{
return FALSE;
}
u16RelIdx = _service_get_relation_index(m_enSystemType, enSrvType, u16Idx);
DBFS_RelationGetSrv(u16RelIdx, &stSrvRel);
DBFS_InfoRead(EN_SRV_TABLE, stSrvRel.u16LogicAddress, (u8*)&stSrvDetail);
_extra_srvinfo_get(u16RelIdx, &stExtraSrv);
_db_2_dvb_srv(pstService, &stSrvRel, &stExtraSrv, &stSrvDetail);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceReadDetail(EN_SERVICE_TYPE enSrvType, u16 u16Idx, DB_SrvDetail *pstService, DB_SrvRel *pstSrvRel)
{
u16 u16RelIdx;
DBMS_DBG((" DVB_ServiceReadDetail()-SysType=%d,SrvType=%d,SrvIdx=%d,Total=%d\n",
m_enSystemType, enSrvType, u16Idx, m_as16SrvTotal[m_enSystemType][enSrvType]));
memset(pstService, 0, sizeof(DB_SrvDetail));
if(u16Idx >= m_as16SrvTotal[m_enSystemType][enSrvType])
{
return FALSE;
}
u16RelIdx = _service_get_relation_index(m_enSystemType, enSrvType, u16Idx);
DBFS_RelationGetSrv(u16RelIdx, pstSrvRel);
DBFS_InfoRead(EN_SRV_TABLE, pstSrvRel->u16LogicAddress, (u8*)pstService);
return TRUE;
}
/*******************************************************************************************/
void DVB_ServiceDelete (EN_SERVICE_TYPE enSrvType, u16 u16Idx)
{
u16 u16RelIdx, u16RelIdx2;
DB_SrvRel stSrvRel;
DB_TpRel stTpRel;
DB_SatRel stNetRel;
DB_ExtraSrv stExtraSrv;
s16 s16idx;
DBMS_DBG((" DVB_ServiceDelete()-SysType=%d,SrvType=%d,SrvIdx=%d,Total=%d\n",
m_enSystemType, enSrvType, u16Idx, m_as16SrvTotal[m_enSystemType][enSrvType]));
if(u16Idx >= m_as16SrvTotal[m_enSystemType][enSrvType])
{
return;
}
u16RelIdx = _service_get_relation_index(m_enSystemType, enSrvType, u16Idx);
// Remove the service.
DBFS_RelationGetSrv(u16RelIdx, &stSrvRel);
DBFS_InfoDestroy(EN_SRV_TABLE, stSrvRel.u16LogicAddress);
// Decrement the service end index of this network.
DBFS_RelationGetTp(_tp_get_relation_index(m_enSystemType, stSrvRel.u16TpIdx), &stTpRel);
if(stTpRel.u16SatIdx != 0xFFFF)
{
DBFS_RelationGetNet(_network_get_relation_index(m_enSystemType, stTpRel.u16SatIdx), &stNetRel);
if(stNetRel.as16SrvEndIdx[enSrvType] <= stNetRel.as16SrvStartIdx[enSrvType])
{
stNetRel.as16SrvStartIdx[enSrvType] =
stNetRel.as16SrvEndIdx[enSrvType] = -1;
}
else
{
stNetRel.as16SrvEndIdx[enSrvType]--;
}
DBFS_RelationSetNet(_network_get_relation_index(m_enSystemType, stTpRel.u16SatIdx), &stNetRel);
// Shift forward the service start and end index of the following networks.
for(s16idx = stTpRel.u16SatIdx + 1; s16idx < m_as16NetTotal[m_enSystemType]; s16idx++)
{
DBFS_RelationGetNet(_network_get_relation_index(m_enSystemType, s16idx), &stNetRel);
if( (stNetRel.as16SrvStartIdx[enSrvType] <= 0) ||
(stNetRel.as16SrvEndIdx[enSrvType] <= 0) )
{
stNetRel.as16SrvStartIdx[enSrvType] =
stNetRel.as16SrvEndIdx[enSrvType] = -1;
}
else
{
stNetRel.as16SrvStartIdx[enSrvType]--;
stNetRel.as16SrvEndIdx[enSrvType]--;
}
DBFS_RelationSetNet(_network_get_relation_index(m_enSystemType, s16idx), &stNetRel);
}
}
// Shift forware the following service relations.
for(s16idx = u16Idx+1; s16idx < m_as16SrvTotal[m_enSystemType][enSrvType]; s16idx++)
{
u16RelIdx = _service_get_relation_index(m_enSystemType, enSrvType, s16idx );
u16RelIdx2 = _service_get_relation_index(m_enSystemType, enSrvType, s16idx-1);
DBFS_RelationGetSrv(u16RelIdx , &stSrvRel);
DBFS_RelationSetSrv(u16RelIdx2, &stSrvRel);
_extra_srvinfo_get(u16RelIdx , &stExtraSrv);
_extra_srvinfo_set(u16RelIdx2, &stExtraSrv);
}
// Clear the useless service relation.
u16RelIdx = _service_get_relation_index(m_enSystemType, enSrvType, s16idx-1);
memset(&stSrvRel, 0xFF, sizeof(DB_SrvRel));
DBFS_RelationSetSrv(u16RelIdx, &stSrvRel);
memset(&stExtraSrv, 0xFF, sizeof(DB_ExtraSrv));
_extra_srvinfo_set(u16RelIdx, &stExtraSrv);
m_as16SrvTotal[m_enSystemType][enSrvType]--;
}
/*******************************************************************************************/
void DVB_ServicePack(EN_SERVICE_TYPE enSrvType) /*del in pgm edit*/
{
DBMS_DBG(( "Can't support DVB_ServicePack()\n"));
}
/*******************************************************************************************/
bool8 DVB_NetAddDetail(u16 *pu16NetIdx, DB_NetDetail *pstNetDetail)
{
DB_SatRel stNetRel;
DB_TpRel stTpRel;
u16 u16InsertIdx;
s16 s16idx;
DBMS_DBG((" DVB_NetAddDetail()-SysType=%d,Total=%d\n",
m_enSystemType, m_as16NetTotal[m_enSystemType]));
if(_network_get_total_all_system() >= MAX_NUM_OF_SAT)
{
DBMS_DBG(( "\nNetwork List Full\n"));
return FALSE;
}
switch(m_enSystemType)
{
case EN_SYSTEM_TYPE_DVBC:
if(strlen(pstNetDetail->netCable.acProviderName)==0)
{
strcpy(pstNetDetail->netCable.acProviderName,"Unknown");
}
u16InsertIdx = m_as16NetTotal[m_enSystemType];
break;
case EN_SYSTEM_TYPE_DVBT:
if(strlen(pstNetDetail->netTerre.acProviderName)==0)
{
strcpy(pstNetDetail->netTerre.acProviderName,"Unknown");
}
u16InsertIdx = m_as16NetTotal[m_enSystemType];
break;
case EN_SYSTEM_TYPE_DVBS:
if(strlen(pstNetDetail->netSat.acSatelliteName)==0)
{
strcpy(pstNetDetail->netSat.acSatelliteName,"User add");
}
u16InsertIdx = m_as16NetTotal[m_enSystemType] - 1;
/* Because the last network must be other satellite.
** Move the other satellite backward */
DBFS_RelationGetNet(_network_get_relation_index(m_enSystemType, u16InsertIdx ), &stNetRel);
DBFS_RelationSetNet(_network_get_relation_index(m_enSystemType, u16InsertIdx+1), &stNetRel);
break;
default:
return FALSE;
}
pstNetDetail->enSysType = m_enSystemType;
/* Insert new network before other satellite. */
memset(&stNetRel, 0xFF, sizeof(DB_SatRel));
stNetRel.u16LogicAddress = DBFS_InfoNew(EN_SAT_TABLE, (u8*)pstNetDetail);
DBFS_RelationSetNet(_network_get_relation_index(m_enSystemType, u16InsertIdx), &stNetRel);
*pu16NetIdx = u16InsertIdx;
m_as16NetTotal[m_enSystemType]++;
/* Update network index in TP list */
for(s16idx = m_as16TpTotal[m_enSystemType] - 1; s16idx >= 0; s16idx--)
{
DBFS_RelationGetTp(_tp_get_relation_index(m_enSystemType, s16idx), &stTpRel);
if(stTpRel.u16SatIdx < u16InsertIdx)
{
break;
}
stTpRel.u16SatIdx--;
DBFS_RelationSetTp(_tp_get_relation_index(m_enSystemType, s16idx), &stTpRel);
}
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_NetAdd(u16 *pu16NetIdx, DVB_NetInfo *pstNetInfo)
{
DB_SatRel stNetRel;
DB_NetDetail stNetDetail;
DBMS_DBG((" DVB_NetAdd()-SysType=%d,Total=%d\n",
m_enSystemType, m_as16NetTotal[m_enSystemType]));
_dvb_net_2_db(m_enSystemType, pstNetInfo, &stNetRel, &stNetDetail);
return(DVB_NetAddDetail(pu16NetIdx, &stNetDetail));
}
/*******************************************************************************************/
bool8 DVB_NetRead(u16 u16NetIdx, DVB_NetInfo *pstNetInfo)
{
DB_SatRel stNetRel;
DB_NetDetail stNetDetail;
DBMS_DBG((" DVB_NetRead()-SysType=%d,u16NetIdx=%d,Total=%d\n",
m_enSystemType, u16NetIdx, m_as16NetTotal[m_enSystemType]));
if(DVB_NetReadDetail(u16NetIdx, &stNetDetail, &stNetRel) == FALSE)
{
return FALSE;
}
_db_2_dvb_net(m_enSystemType, pstNetInfo, &stNetRel, &stNetDetail);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_NetReadDetail(u16 u16NetIdx, DB_NetDetail *pstNetItem, DB_SatRel *pstNetRel)
{
DBMS_DBG((" DVB_NetReadDetail()-SysType=%d,u16NetIdx=%d,Total=%d\n",
m_enSystemType, u16NetIdx, m_as16NetTotal[m_enSystemType]));
if(u16NetIdx >= m_as16NetTotal[m_enSystemType])
{
return FALSE;
}
DBFS_RelationGetNet(_network_get_relation_index(m_enSystemType, u16NetIdx), pstNetRel);
DBFS_InfoRead(EN_SAT_TABLE, pstNetRel->u16LogicAddress, (u8*)pstNetItem);
return TRUE;
}
/*******************************************************************************************/
static void _update_tp_with_sat(EN_SYSTEM_TYPE enSysType, u16 u16NetIdx, DB_NetDetail *pstNetItem)
{
u16 u16idx;
DB_TpRel stTpRel;
DB_TpDetailEx stTpDetail;
if(enSysType != EN_SYSTEM_TYPE_DVBS)
{
return;
}
if(u16NetIdx == m_as16NetTotal[m_enSystemType] - 1)
{
return;
}
for(u16idx = 0; u16idx < m_as16TpTotal[enSysType]; u16idx++)
{
DBFS_RelationGetTp(_tp_get_relation_index(m_enSystemType, u16idx), &stTpRel);
if(stTpRel.u16SatIdx < u16NetIdx)
{
continue;
}
if(stTpRel.u16SatIdx > u16NetIdx)
{
break;
}
DBFS_InfoRead(EN_TP_TABLE, stTpRel.u16LogicAddress, (u8*)&stTpDetail);
if(pstNetItem->netSat.u8LNBType == LNB_UNIVERSAL)
{
if (stTpDetail.tpSat.b8Tone22K == FALSE)
{
stTpDetail.tpSat.u16LocalFrequency = pstNetItem->netSat.u16LocalFrequency;
}
else
{
stTpDetail.tpSat.u16LocalFrequency = pstNetItem->netSat.u16LocalFrequency_High;
}
}
else
{
stTpDetail.tpSat.u16LocalFrequency = pstNetItem->netSat.u16LocalFrequency;
stTpDetail.tpSat.b8Tone22K = pstNetItem->netSat.b8Tone22K;
}
stTpDetail.tpSat.b8Control12V = pstNetItem->netSat.b8Control12V;
stTpDetail.tpSat.u8DiSEqC = pstNetItem->netSat.u8DiSEqC;
//#if defined(CT216S)
#ifdef DVB_SYSTEM_S
stTpDetail.tpSat.b8DiSEqC_Toneburst = pstNetItem->netSat.b8DiSEqC_Toneburst;
stTpDetail.tpSat.u8ToneBurst = pstNetItem->netSat.u8ToneBurst;
#endif
if(pstNetItem->netSat.u8LNBPower==LNB_POWER_18V)
{
stTpDetail.tpSat.b8Polar_H = TRUE;
}
else if(pstNetItem->netSat.u8LNBPower==LNB_POWER_13V)
{
stTpDetail.tpSat.b8Polar_H = FALSE;
}
DBFS_InfoWrite(EN_TP_TABLE, stTpRel.u16LogicAddress, (u8*)&stTpDetail);
}
}
/*******************************************************************************************/
bool8 DVB_NetUpdate(u16 u16NetIdx, DVB_NetInfo *pstNetInfo)
{
DB_SatRel stNetRel;
DB_NetDetail stNetDetail;
DBMS_DBG((" DVB_NetUpdate()-SysType=%d,u16NetIdx=%d,Total=%d\n",
m_enSystemType, u16NetIdx, m_as16NetTotal[m_enSystemType]));
if(u16NetIdx >= m_as16NetTotal[m_enSystemType])
{
return FALSE;
}
DBFS_RelationGetNet(_network_get_relation_index(m_enSystemType, u16NetIdx), &stNetRel);
_dvb_net_2_db(m_enSystemType, pstNetInfo, &stNetRel, &stNetDetail);
DBFS_InfoWrite(EN_SAT_TABLE, stNetRel.u16LogicAddress, (u8*)&stNetDetail);
_update_tp_with_sat(m_enSystemType, u16NetIdx, &stNetDetail);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_NetUpdateDetail(u16 u16NetIdx, DB_NetDetail *pstNetDetail)
{
DB_SatRel stNetRel;
DBMS_DBG((" DVB_NetUpdateDetail()-SysType=%d,u16NetIdx=%d,Total=%d\n",
m_enSystemType, u16NetIdx, m_as16NetTotal[m_enSystemType]));
if(u16NetIdx >= m_as16NetTotal[m_enSystemType])
{
return FALSE;
}
if(pstNetDetail->enSysType != m_enSystemType)
{
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -