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

📄 cmmbdemodulatorconfig.c

📁 中兴提供的跨平台解码库的解码器的介绍源码和文档
💻 C
字号:
/************************************************************************
* 版权所有 (C)2006, 中兴通讯股份有限公司。
* 
* 文件名称: cmmbdemodulatorconfig.cpp
* 文件标识:
* 内容摘要: 创毅解调相关接口实现
* 其它说明: 
* 当前版本:
* 作    者: 软件平台部		邢  星
* 完成日期: 2007年09月24日
*                                                    
* 修改记录:                                                             
* [修改标识1]  <修改日期>  <修改人>  [版本号]  <修改内容>
* [修改标识2]  <修改日期>  <修改人>  [版本号]  <修改内容>            
*                                                                        
************************************************************************/
#include "cmmbdemodulatorconfig.h"
#include "cmmbspi.h"
#include <unistd.h>

WORD get_addr(BYTE bank, BYTE addr)
{
	return 0xf000 + (bank << 8) + addr;
}

int Send_IIC_Byte(BYTE value, BYTE status)
{
	BYTE RegData;
	int j = 0;
	while( j++ < 200 )
	{
		ReadI2CDataEx(get_addr(2, I2C_APSTATUS_ADDR), &RegData);
		if ((RegData & 0x80) == 0)
		{
			WriteI2CDataEx(get_addr(2,I2C_APDATA_ADDR), value);
			WriteI2CDataEx(get_addr(2,I2C_APSTATUS_ADDR), status);
			return 1;
		}
		usleep(10);
	}

	return 0;
}

int SendBuf(unsigned char *pData)
{
	int i = 0;
	pData[7] = (((((((0xa5 ^ pData[0]) ^ pData[1]) ^ pData[2]) ^ pData[3]) ^ pData[4]) ^ pData[5]) ^ pData[6]);
	
	WriteI2CDataEx(get_addr(2,I2C_APSTATUS_ADDR), 0);
	
	for (i = 0 ; i < 8; i++)
	{
		if (Send_IIC_Byte(pData[i],i==0?0x84:0x80) != 1)
		{
			return 0;
		}
	}
	return 1;
}

// void ScanFreq(BYTE start,BYTE end)
// {
// 	BYTE buf[8] = {0x09, start, end, 0x01};
// 	SendBuf(buf);
// }

int SetTunnerFreq(BYTE freq)
{
	int iTmp = 0;
	BYTE buf[8] = {0x06, freq};
	iTmp = SendBuf(buf);
	return iTmp;
}

// int SetReceiveTs0()
// {
// 	BYTE buf0[8] = {0x05, 0, 0, 0x3f, 0x3f, 0x3f, 0x00};
// 	SendBuf(buf0);
// 
// 	usleep(100);
// 
// 	BYTE buf1[8] = {0x05, 1, 0x3f, 0x3f, 0x3f, 0x3f, 0x00};
// 	SendBuf(buf1);
// 
// 	return 0;
// }

// int SetDemodParameter(BYTE* ts, int ts_count, BYTE modType, BYTE ldpcRate, BYTE interleaveMode, BYTE rsType)
// {
// 	BYTE mode = (modType << 6) + (ldpcRate << 4) + (interleaveMode << 2) + rsType;
// 
// 	BYTE buf0[8] = {0x05, 0, ts[0], ts[1], 0x3f, 0x3f, mode};
// 	if (SendBuf(buf0) == 0)
// 	{
// 		return 0;
// 	}
// 
//     usleep(100);
// 
// 	if (ts_count == 4)
// 	{
// 		BYTE buf1[8] = {0x05, 1, ts[2], ts[3], 0x3f, 0x3f, mode};
// 		if (SendBuf(buf1) == 0)
// 		{
// 			return -1;
// 		}
// 	}
// 
// 	return 1;
// }
// 
// void DEV_Pause(void)
// {
// 	BYTE buf[8] = {0x02, 0x80};
// 	SendBuf(buf);
// }
// 
// void DEV_Resume(void)
// {
// 	BYTE buf[8] = {0x02, 0x40};
// 	SendBuf(buf);
// }
// 
// void Open_S_Band(void)
// {
// 	BYTE buf[8] = {0x02, 0x10};
// 	SendBuf(buf);
// }
// 
// void Close_S_Band(void)
// {
// 	BYTE buf[8] = {0x02, 0x20};
// 	SendBuf(buf);
// }
// 
// void Open_U_Band(void)
// {
// 	BYTE buf[8] = {0x02, 0x04};
// 	SendBuf(buf);
// }
// 
// void Close_U_Band(void)
// {
// 	BYTE buf[8] = {0x02, 0x08};
// 	SendBuf(buf);
// }
// 
// void Open_Ts_Power(void)
// {
// 	BYTE buf[8] = {0x02, 0x01};
// 	SendBuf(buf);
// }
// 
// void Close_Ts_Power(void)
// {
// 	BYTE buf[8] = {0x02, 0x02};
// 	SendBuf(buf);
// }
// 
// float GetSignalState()
// {
// 	float fRFInputPower;
// 	float fPWM_DC_OLD = 0x0, fPWM_DC = 0x0;
// 	int RFAGC, LNAGAIN, GVBB;
// 	BYTE RegData;
// 
// 	writeI2CData(0x0ff,0x03);
// 	readI2CData(0x11, 1, &RegData);
// 	RFAGC = RegData;
// 	readI2CData(0x12, 1, &RegData);			
// 	RFAGC = RFAGC + (RegData & 0x40) * 4 ; // get the RFAGC[8:0]
// 	LNAGAIN = (RegData & 0x30) / 16;
// 	GVBB = RegData & 0x0f;
// 
// 	if (RFAGC < 0x17f)
// 	{
// 		// if RFAGC <= 0x17F caculate RF input power directly
// 		fRFInputPower = (float)(( (float) RFAGC * 0.12 ) * (-1) - ( (float) LNAGAIN * 8.3 ) -7) + 8;
// 	}
// 	else
// 	{
// 		// look up table for bb gain
// 		BYTE PWM_DC;
// 		writeI2CData(0x0ff,0x00);
// 		readI2CData(0x3c, 1, &PWM_DC);				
// 		fPWM_DC = fPWM_DC_OLD * 0.6 + (float)PWM_DC * 0.4;
// 		fPWM_DC_OLD = PWM_DC;
// 		fRFInputPower = (float)(( (float) RFAGC * 0.12 ) * (-1) - ( (float) LNAGAIN * 8.3 ) -7) - 3 * ( (float) GVBB - 5 ) - fPWM_DC  + 20;
// 	}
// 
// 	return fRFInputPower;
// }

/*void setTimeSlot(int i, int j, int k, int l)
{
	int iTime = 0;
	int jTime = 0;
	int kTime = 0;
	int lTime = 0;
	int itmp = 0;

	if (i == 0 || j == 0)
	{
		return;
	}

	if (i < 8)
	{
		iTime = 1 << i;
		if (j < 8)
		{
			jTime = 1 << j;
			itmp = iTime | jTime;
			WriteI2CDataEx(0x20, itmp);
			WriteI2CDataEx(0x21, 0x00);
		}
		else
		{
			jTime = 1 << (j % 8);
			WriteI2CDataEx(0x20, iTime);
			WriteI2CDataEx(0x21, jTime);
		}
		WriteI2CDataEx(0x22, 0x00);
		WriteI2CDataEx(0x23, 0x00);
		WriteI2CDataEx(0x24, 0x00);
		WriteI2CDataEx(0x25, 0x00);
	}
	else if (i < 16)
	{
		iTime = 1 << (i % 8);
		WriteI2CDataEx(0x20, 0x00);
		if (j < 16)
		{
			jTime = 1 << (j % 8);
			itmp = iTime | jTime;
			WriteI2CDataEx(0x21, itmp);
			WriteI2CDataEx(0x22, 0x00);
		}
		else
		{
			jTime = 1 << (j % 16);
			WriteI2CDataEx(0x21, iTime);
			WriteI2CDataEx(0x22, jTime);
		}
		WriteI2CDataEx(0x23, 0x00);
		WriteI2CDataEx(0x24, 0x00);
		WriteI2CDataEx(0x25, 0x00);	
	}
	else if (i < 24)
	{
		iTime = 1 << (i % 16);
		WriteI2CDataEx(0x20, 0x00);
		WriteI2CDataEx(0x21, 0x00);
		if (j < 24)
		{
			jTime = 1 << (j % 16);
			itmp = iTime | jTime;
			WriteI2CDataEx(0x22, itmp);
			WriteI2CDataEx(0x23, 0x00);
		}
		else
		{
			jTime = 1 << (j % 24);
			WriteI2CDataEx(0x22, iTime);
			WriteI2CDataEx(0x23, jTime);
		}
		WriteI2CDataEx(0x24, 0x00);
		WriteI2CDataEx(0x25, 0x00);
	}
	else if (i < 32)
	{
		iTime = 1 << (i % 24);
		WriteI2CDataEx(0x20, 0x00);
		WriteI2CDataEx(0x21, 0x00);
		WriteI2CDataEx(0x22, 0x00);	
		if (j < 32)
		{
			jTime = 1 << (j % 24);
			itmp = iTime | jTime;
			WriteI2CDataEx(0x23, itmp);
			WriteI2CDataEx(0x24, 0x00);
		}
		else
		{
			jTime = 1 << (j % 32);
			WriteI2CDataEx(0x23, iTime);
			WriteI2CDataEx(0x24, jTime);
		}
		WriteI2CDataEx(0x25, 0x00);	
	}

	if (k == 0 || l == 0)
	{
		return;
	}

	if (k < 8)
	{
		kTime = 1 << k;
		if (l < 8)
		{
			lTime = 1 << l;
			itmp = kTime | lTime;
			WriteI2CDataEx(0x26, itmp);
			WriteI2CDataEx(0x27, 0x00);
		}
		else
		{
			lTime = 1 << (l % 8);
			WriteI2CDataEx(0x26, kTime);
			WriteI2CDataEx(0x27, lTime);
		}
		WriteI2CDataEx(0x28, 0x00);
		WriteI2CDataEx(0x29, 0x00);
		WriteI2CDataEx(0x2A, 0x00);
		WriteI2CDataEx(0x2B, 0x00);
	}
	else if (k < 16)
	{
		kTime = 1 << (k % 8);
		WriteI2CDataEx(0x26, 0x00);
		if (l < 16)
		{
			lTime = 1 << (l % 8);
			itmp = kTime | lTime;
			WriteI2CDataEx(0x27, itmp);
			WriteI2CDataEx(0x28, 0x00);
		}
		else
		{
			lTime = 1 << (l % 16);
			WriteI2CDataEx(0x27, kTime);
			WriteI2CDataEx(0x28, lTime);
		}
		WriteI2CDataEx(0x29, 0x00);
		WriteI2CDataEx(0x2A, 0x00);
		WriteI2CDataEx(0x2B, 0x00);	
	}
	else if (k < 24)
	{
		kTime = 1 << (k % 16);
		WriteI2CDataEx(0x26, 0x00);
		WriteI2CDataEx(0x27, 0x00);
		if (l < 24)
		{
			lTime = 1 << (l % 16);
			itmp = kTime | lTime;
			WriteI2CDataEx(0x28, itmp);
			WriteI2CDataEx(0x29, 0x00);
		}
		else
		{
			lTime = 1 << (l % 24);
			WriteI2CDataEx(0x28, kTime);
			WriteI2CDataEx(0x29, lTime);
		}
		WriteI2CDataEx(0x2A, 0x00);
		WriteI2CDataEx(0x2B, 0x00);
	}
	else if (k < 32)
	{
		kTime = 1 << (k % 24);
		WriteI2CDataEx(0x26, 0x00);
		WriteI2CDataEx(0x27, 0x00);
		WriteI2CDataEx(0x28, 0x00);	
		if (l < 32)
		{
			lTime = 1 << (l % 24);
			itmp = kTime | lTime;
			WriteI2CDataEx(0x29, itmp);
			WriteI2CDataEx(0x2A, 0x00);
		}
		else
		{
			lTime = 1 << (l % 32);
			WriteI2CDataEx(0x29, kTime);
			WriteI2CDataEx(0x2A, lTime);
		}
		WriteI2CDataEx(0x2B, 0x00);
	}
}

int SetDemodParameter(BYTE* ts, int ts_count, BYTE modType, BYTE ldpcRate, BYTE interleaveMode, BYTE rsType)
{
	BYTE mode = (modType << 6) + (ldpcRate << 4) + (interleaveMode << 2) + rsType;

	if (ts_count == 2)
	{
		setTimeSlot(ts[0], ts[1], 0, 0);
	}
	else
	{
		setTimeSlot(ts[0], ts[1], ts[2], ts[3]);
	}

	WriteI2CDataEx(0x2C, mode);//配置解调参数
	WriteI2CDataEx(0x2D, mode);//配置解调参数

	writeI2CData(0xFF, 0x03);
	writeI2CData(0x05, 0x01);
	writeI2CData(0x05, 0x00);
	writeI2CData(0xFF, 0x00);

	return 0;
}*/

⌨️ 快捷键说明

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