📄 portdirection.c
字号:
DownOutputLessPowerAlarmState[state] = 0x00;
noDownOutputLessPowerAlarmState[state] = 0x01;
}
// 下行输出过驻波告警告警计数
if ((pdata[5]>>2)&0x01 == 0x01)
{
DownVSWRAlarmState[state] = 0x01;
noDownVSWRAlarmState[state] = 0x01;
}
else
{
DownVSWRAlarmState[state] = 0x00;
noDownVSWRAlarmState[state] = 0x01;
}
// 下行输出功率实际值
Syncdata2G[state].DownOutputLevel = pdata[9];
break;
case 0x02: // 设置命令
if (pdata[3] == 0x00)
{
return 0;
}
else
{
return -1;
}
break;
case 0x03: // 查询命令
Querydata2G[state].DeviceType = pdata[4]; // 系统单元类别型号
Querydata2G[state].DeviceSerialNo[0] = pdata[5]; // 设备生产序列号
Querydata2G[state].DeviceSerialNo[1] = pdata[6];
Querydata2G[state].DeviceSerialNo[2] = pdata[7];
Querydata2G[state].Version = pdata[8]; // 系统单元当前版本
Syncdata2G[state].RFSignalSwitch = pdata[9];//射频开关
Querydata2G[state].UpAtt = pdata[10]; // 上行衰减值
Querydata2G[state].DownAtt = pdata[11]; // 下行衰减值
Querydata2G[state].DownOutputOverPowerMax = pdata[12]; // 下行输出过功率门限
Querydata2G[state].DownOutputLessPowerMax = pdata[13]; // 下行输出欠功率门限
break;
default:
return -1;
break;
}
break;
case 0x06: // TD
switch(pdata[2]) //== 0x01)&&(pdata[1] == 0x06))
{
case 0x01:
Syncdata3G.RFSignalSwitch = pdata[4]&0x01;
// 下行输出过功率告警计数
if (pdata[5]&0x01 == 0x01)
{
DownOutputOverPowerAlarmState[state] = 0x01;
noDownOutputOverPowerAlarmState[state] = 0x00;
}
else
{
DownOutputOverPowerAlarmState[state] = 0x00;
noDownOutputOverPowerAlarmState[state] = 0x01;
}
// 下行输出欠功率告警计数
if ((pdata[5]>>1)&0x01 == 0x01)
{
DownOutputLessPowerAlarmState[state] = 0x01;
noDownOutputLessPowerAlarmState[state] = 0x00;
}
else
{
DownOutputLessPowerAlarmState[state] = 0x00;
noDownOutputLessPowerAlarmState[state] = 0x01;
}
// 下行输出过驻波告警计数
if ((pdata[5]>>2)&0x01 == 0x01)
{
DownVSWRAlarmState[state] = 0x01;
noDownVSWRAlarmState[state] = 0x00;
}
else
{
DownVSWRAlarmState[state] = 0x00;
noDownVSWRAlarmState[state] = 0x01;
}
// TD-SCDMA失步告警计数
if ((pdata[5]>>7)&0x01 == 0x01)
{
AsynchronismAlarmState = 0x01;
noAsynchronismAlarmState = 0x00;
}
else
{
AsynchronismAlarmState = 0x00;
noAsynchronismAlarmState = 0x01;
}
// 下行输出功率实际值
Syncdata3G.DownOutputLevel = pdata[9];
break;
case 0x02:
if (pdata[3] == 0x00)
{
return 0;
}
else
{
return -1;
}
break;
case 0x03:
Querydata3G.DeviceType = pdata[4]; // 系统单元类别型号
Querydata3G.DeviceSerialNo[0] = pdata[5]; // 设备生产序列号
Querydata3G.DeviceSerialNo[1] = pdata[6];
Querydata3G.DeviceSerialNo[2] = pdata[7];
Querydata3G.Version = pdata[8]; // 系统单元当前版本
Syncdata3G.RFSignalSwitch = pdata[9];//射频开关
Querydata3G.UpAtt = pdata[10]; // 上行衰减值
Querydata3G.DownAtt = pdata[11]; // 下行衰减值
Querydata3G.DownOutputOverPowerMax = pdata[12]; // 下行输出过功率门限
Querydata3G.DownOutputLessPowerMax = pdata[13]; // 下行输出欠功率门限
Querydata3G.NO2ChangePoint = pdata[14]; // 第二时隙切换点
break;
default:
return -1;
break;
}
break;
default:
return -1;
break;
}
}
else
{
return -1;
}
}
else
{
return -1;
}
return 0;
}
/********************************************************************************
** 函数名称: void TaskNorth(void *pdata)
** 功能描述:
** 输 入:
** 输 出:
** 全局变量:
** 调用模块:
** 作 者:
** 日 期:
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
** 内 容:
**-------------------------------------------------------------------------------
********************************************************************************/
void TaskNorth(void *pdata)
{
uint8 i = 0,j = 0;
uint32 count = 0;
uint8 bufGSM[6][8]={
{0x7e, 0x02, 0x01, 0x00, 0x51, 0x5d, 0x7e}, //同步GSM模块
{0x7e, 0x03, 0x01, 0x00, 0x61, 0x6a, 0x7e}, //同步DCS模块
{0x7e, 0x04, 0x01, 0x00, 0xf1, 0xef, 0x7e}, //同步CDMA800模块
{0x7e, 0x05, 0x01, 0x00, 0xc1, 0xd8, 0x7e}, //同步CDMA2000模块
{0x7e, 0x07, 0x01, 0x00, 0xa1, 0xb6, 0x7e},//同步WCDMA模块
{0x7e, 0x06, 0x01, 0x00, 0x91, 0x81, 0x7e}};//同步TDSCDMA模块
uint8 bufTD[8] = {0x7e, 0x06, 0x01, 0x00, 0x91, 0x81, 0x7e};//同步TDSCDMA模块
pdata = pdata;
OS_ENTER_CRITICAL();
Com_North = InitUart(1,19200,8,1,0,VIC_UART0); // 初始化串口0
OS_EXIT_CRITICAL();
if(Com_North == NULL)
{
while(1)
{
ResetCpu();
}
}
while(1)
{
for(i = 0; i < 6; i++)
{
if (i == 5)
{
WriteCom(Com_North, bufTD, 7, 200);
}
else
{
WriteCom(Com_North, (INT8U *)&bufGSM[i][0], 7, 200);
}
OSTimeDly(OS_TICKS_PER_SEC/5); // 延时200毫秒
count = TD_GetNorthData(); // 获取GSM的同步数据
if( count > 8 )
{//有数据
if (0 == Datadisposal(RecNorthPortData[1], &RecNorthPortData[0], count))
{
j = RecNorthPortData[1];
NO2GState[j] = 1;
QuerMoudule(i); // 查询模块信息
OSTimeDly(OS_TICKS_PER_SEC/5);
// 延时200毫秒
count = TD_GetNorthData();
if (count > 8)
{
Datadisposal(RecNorthPortData[1], &RecNorthPortData[0], count);
}
}
else
{
NO2GState[i] = 0;
}
}
else
{//无数据
}
}
OSTimeDly(OS_TICKS_PER_SEC/20);
}
}
/********************************************************************************
** 函数名称: void TD_Set(uint8 state)
** 功能描述:
** 输 入:
** 输 出:
** 全局变量:
** 调用模块:
** 作 者:
** 日 期:
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
** 内 容:
**-------------------------------------------------------------------------------
********************************************************************************/
//state是设备类型,频分设备的设置
void TD_Set(uint8 state)
{
uint8 buftd[20];
uint16 crc;
buftd[0] = 0x7e;
buftd[1] = state;//设备类型
buftd[2] = 0x02;//命令标识
buftd[3] = 0x0A;//数据长度16
buftd[4] = Querydata2G[state].DeviceType;//数据体,单元型号
buftd[5] = Querydata2G[state].DeviceSerialNo[0];// 生产序列号
buftd[6] = Querydata2G[state].DeviceSerialNo[1];//
buftd[7] = Querydata2G[state].DeviceSerialNo[2];//
//buftd[8] = Querydata2G[state].Version;//当前版本序列号
buftd[8] = Syncdata2G[state].RFSignalSwitch;//射频开关
buftd[9] = Querydata2G[state].UpAtt;// 上行衰减值
buftd[10] = Querydata2G[state].DownAtt;// 下行衰减值
buftd[11] = Querydata2G[state].DownOutputOverPowerMax;// 下行输出过功率门限
buftd[12] = Querydata2G[state].DownOutputLessPowerMax;// 下行输出欠功率门限
buftd[13] = SysGain;// 下行输出欠功率门限
crc = CRC16(&buftd[1], 13);
buftd[14] = (uint8)(crc&0x00ff);
buftd[15] = (uint8)((crc>>8)&0x00ff);
buftd[16] = 0x7e;
WriteCom(Com_North, buftd, 17, 200);//发送设置命令
OSTimeDly(OS_TICKS_PER_SEC/5);// 延时200毫秒
}
//TD设备的设置
void TD3G_Set(void)
{
uint8 buftd[20];
uint16 crc;
buftd[0] = 0x7e;
buftd[1] = 0x06;//设备类型
buftd[2] = 0x02;//命令标识
buftd[3] = 0x0B;//数据长度10
buftd[4] = Querydata3G.DeviceType;//数据体,单元型号
buftd[5] = Querydata3G.DeviceSerialNo[0];// 生产序列号
buftd[6] = Querydata3G.DeviceSerialNo[1];//
buftd[7] = Querydata3G.DeviceSerialNo[2];//
//buftd[8] = Querydata2G[state].Version;//当前版本序列号
buftd[8] = Syncdata3G.RFSignalSwitch;//射频开关
buftd[9] = Querydata3G.UpAtt;// 上行衰减值
buftd[10] = Querydata3G.DownAtt;// 下行衰减值
buftd[11] = Querydata3G.DownOutputOverPowerMax;// 下行输出过功率门限
buftd[12] = Querydata3G.DownOutputLessPowerMax;// 下行输出欠功率门限
buftd[13] = Querydata3G.NO2ChangePoint;//第二时隙切换点
buftd[14] = SysGain;// 下行输出欠功率门限
crc = CRC16(&buftd[1], 14);
buftd[15] = (uint8)(crc&0x00ff);
buftd[16] = (uint8)((crc>>8)&0x00ff);
buftd[17] = 0x7e;
WriteCom(Com_North, buftd, 18, 200);//发送设置命令
OSTimeDly(OS_TICKS_PER_SEC/5);// 延时200毫秒
}
/*********************************************************************************************************
** End Of File
**********************************************************************************************************/
/********************************************************************************
** 函数名称: WfdsEUParaSetAnalysis
** 功能描述: 同步命令打包
** 输 入: addr--要发送的地址
prt--目标缓冲区
ctype--要设置的RU类型
** 输 出: 返回的长度
** 全局变量: 无
** 调用模块:
** 作 者: 侍任伟
** 日 期: 2009年2月9日
**------------------------------------------------------------------------------
** 修 改 人:
** 日 期:
** 内 容:
**-------------------------------------------------------------------------------
********************************************************************************/
INT16S WfdsEUParaSetAnalysis(uint8 ctype ,uint8 *ptr, uint8 lenth)
{
INT8S st = 0;
INT32S flag = 0;
INT16U location = 0;
INT16U dataid = 0;
while((lenth - location) > 0)
{
dataid = (INT16U)( *(ptr + 2 + location) ); // 高字节
dataid = (dataid << 8) + (INT16U)( *(ptr + 1 + location) ); // 低字节
switch(dataid)
{
case 0x0004:// 设备型号
{
st = CheckDataTypes( 0 , 0 , 3 , (ptr + location));
if( st == 0 )//正确数据
{
if(ctype != 0x06)//TDD
{
Querydata2G[ctype].DeviceType = *(ptr + 3 + location);
}
else//FDD
{
Querydata3G.DeviceType = *(ptr + 3 + location);
}
location += 4;
}
else if( st == -1 )//非法数据
{
*(ptr + 2 + location) = (*(ptr + 2 + location)) & 0x0F | 0x30;
location += 4;
flag = -1;
}
else if( st == -2 )//非法长度(做不到)
{
*(ptr + 2 + location) = (*(ptr + 2 + location)) & 0x0F | 0x40;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -