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

📄 db_ms.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
	{
		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 + -