📄 cmmbdemodulatorconfig.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 + -