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

📄 portdirection.c

📁 基于ARM7的ucos-ii移动收发通信编程ADS开发源码
💻 C
📖 第 1 页 / 共 5 页
字号:
								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 + -