backup3.c

来自「LWIP在STM32裸机上的移植」· C语言 代码 · 共 434 行

C
434
字号
//backup3.c

//================ 12-09 ================//

//		if(tim_2)
//		{
//			printf("\nTxData[0] = 0x%X\n",TxData[0]);
//			printf("TxData[1] = 0x%X\n\n",TxData[1]);
//			printf("RxData[0] = 0x%X\n",RxData[0]);
//			printf("RxData[1] = 0x%X\n",RxData[1]);
//			printf("RxData[39] = 0x%X\n\n",RxData[39]);
//			for(i=0;i<40;i++)
//				printf("RxData[%d] = 0x%X\n",i,RxData[i]);
//			printf("=================================\n");
//			tim_2 = 0;
//		}

		//输入模块S1-S4的LED灯
		h = 0;
		k = 0;
		for(i=0;i<40;i++)
		{
			if((i>0)&&(i%8 == 0))
			{ 
				h++;
				k = 0;
			}
			if(RxData[i]>0xD8 || RxData[i]<0x18)	//范围:-40 ~ 24
				LR_Show[h] |= 1<<k;
			else if((RxData[i] == 0xD8)||(RxData[i] == 0x80))	//值为:-128 表示模块没有接
				LR_Show[h] &= ~(1<<k);
			else
			{
				k++;
				continue;  							//否则,保持前一时刻的值
			}
			k++;
		}
		TxMessage.StdId = 0x01;
		TxMessage.RTR = CAN_RTR_DATA;
		TxMessage.IDE = CAN_ID_STD;
		TxMessage.DLC = 7;
		for(h=0;h<5;h++)		//5个输入板卡
		{
			TxMessage.Data[h] = LR_Show[h];	//LR_Show[h];
//			if(tim_1)
//			{
//				printf("LR_Show[%d] = 0x%X\n",h,LR_Show[h]);
//			}
		}
		TxMessage.Data[5] = 0xA5;			//前四路输出总线(播出、热线、辅助、主持人监听)
		TxMessage.Data[6] = 0x5F;			//后两路输出总线(导播监听、直播室监听)
		CAN_Transmit(CAN2, &TxMessage);		//发送IO信号状态帧

//================ 12-12 ================//

	//============================== 输出模块 ===============================//

	//============================== 输入模块 ===============================//

//u8 revtim[3] = {0};			//设置时间
//u8 revIP[12] = {0};			//设置IP地址
//u8 Cmd71_SetDataFlg = 0;		//协议0x71:设置调音台数据
//u8 Cmd77_SetIPFlg = 0;		//协议0x77:设置调音台IP地址

			case (0x77):	//设置调音台IP地址
//				SetIPFlag = 1;
//				for(i=0;i<len;i++)
//					revIP[i] = revdata[i];
				I2C_EE_BufferWrite(revdata,EEP_IP_Address,len);
				NVIC_SystemReset();
				break;

//================= 12-14 ====================//
	printf("\n\nThe InputState Data:\n");
	for(i=0;i<240;i++)
	{
		if((i>0)&&(i%12 ==0))printf("\n");
		printf("0x%X ",ReadEEPData[i]);
	}

	printf("\n\nThe HotFire Data:\n");
	for(i=0;i<4;i++)
		printf("0x%X ",ReadEEPData[i]);
	printf("\n");

	printf("\n\nThe OutputSet Data:\n");
	for(i=0;i<20;i++)
		printf("0x%X ",ReadEEPData[i]);
	printf("\n");

	printf("\n\nThe OutputGain Data:\n");
	for(i=0;i<6;i++)
		printf("0x%X ",ReadEEPData[i]);
	printf("\n\n");

				//第一帧
				TxMessage.Data[0] = 0x1;		//高4位:信号格式; 低4位:数据包编号
				TxMessage.Data[1] = 0x0;		//输入模块的物理地址
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;	//6字节汉字码
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第二帧
				TxMessage.Data[0] = 0x2;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第三帧
				TxMessage.Data[0] = 0x3;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第四帧
				TxMessage.Data[0] = 0x4;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
			
			if(TuiziAddr[1] != 0)
			{
				printf("\rTuiziAddr[1] = 0x%X\n",TuiziAddr[1]);	
				TxMessage.StdId = TuiziAddr[1];
				//第一帧
				TxMessage.Data[0] = 0x1;		//高4位:信号格式; 低4位:数据包编号
				TxMessage.Data[1] = 0x0;		//输入模块的物理地址
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;	//6字节汉字码
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第二帧
				TxMessage.Data[0] = 0x2;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第三帧
				TxMessage.Data[0] = 0x3;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第四帧
				TxMessage.Data[0] = 0x4;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
				
				startflg1 &= ~(1<<1);		//0xFD;
			}
			if(TuiziAddr[2] != 0)
			{
				printf("\rTuiziAddr[2] = 0x%X\n",TuiziAddr[2]);	
				TxMessage.StdId = TuiziAddr[2];
				
				//第一帧
				TxMessage.Data[0] = 0x1;		//高4位:信号格式; 低4位:数据包编号
				TxMessage.Data[1] = 0x0;		//输入模块的物理地址
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;	//6字节汉字码
				CAN_Transmit(CAN1, &TxMessage);

				//第二帧
				TxMessage.Data[0] = 0x2;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				h = CAN_Transmit(CAN1, &TxMessage);

				//第三帧
				TxMessage.Data[0] = 0x3;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				CAN_Transmit(CAN1, &TxMessage);
				
				//第四帧
				TxMessage.Data[0] = 0x4;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				startflg1 &= ~(1<<2);		//0xFB;
			}
			if(TuiziAddr[3] != 0)
			{
				printf("\rTuiziAddr[3] = 0x%X\n",TuiziAddr[3]);	
				TxMessage.StdId = TuiziAddr[3];
				//第一帧
				TxMessage.Data[0] = 0x1;		//高4位:信号格式; 低4位:数据包编号
				TxMessage.Data[1] = 0x0;		//输入模块的物理地址
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;	//6字节汉字码
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第二帧
				TxMessage.Data[0] = 0x2;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第三帧
				TxMessage.Data[0] = 0x3;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第四帧
				TxMessage.Data[0] = 0x4;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				startflg1 &= ~(1<<3);		//0xF7;
			}
			if(TuiziAddr[4] != 0)
			{
				printf("\rTuiziAddr[4] = 0x%X\n",TuiziAddr[4]);	
				TxMessage.StdId = TuiziAddr[4];
				//第一帧
				TxMessage.Data[0] = 0x1;		//高4位:信号格式; 低4位:数据包编号
				TxMessage.Data[1] = 0x0;		//输入模块的物理地址
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;	//6字节汉字码
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第二帧
				TxMessage.Data[0] = 0x2;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第三帧
				TxMessage.Data[0] = 0x3;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);

				//第四帧
				TxMessage.Data[0] = 0x4;
				TxMessage.Data[1] = 0x0;
				for(i=2;i<8;i++)
					TxMessage.Data[i] = 0xA0;
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);
				
				startflg1 &= ~(1<<4);		//0xEF;
			}

//================== 12-19 =======================//

			if(TalkKey)		//对讲按键(四个按键,每次可以显示多个按键)
			{
				for(i=0;i<4;i++)		
				{
					if(((TalkKey>>i)& 0x01) == 0x01)
						TalkKeyBK ^= 1<<i;
				}
				TalkKey = 0;
			}

//======================= 12-20 =============================//

//原来的测试程序
		//当总控模块"主页"按键触发时,转发数据(0x78指令)
		if((FaceKeySet & 0x01) == 0x01)
		{								
			Tablen = Tablen/6;
										
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 7;
			TxMessage.StdId = 0x021;
			for(L=0;L<Tablen;L++)
			{							
				TxMessage.Data[0] = L+1;
				for(i=0;i<6;i++)
					TxMessage.Data[i+1] = PlayTable[L][i];
				while(((CAN1->TSR>>26)& 0x07) == 0);
				CAN_Transmit(CAN1, &TxMessage);					
			}
			
			TxMessage.DLC = 4;
			TxMessage.StdId = 0x02B;
			TxMessage.Data[0] = RxOutdBData[0]-24;	//播出dBFS
			TxMessage.Data[1] = RxOutdBData[1]-24;	
			TxMessage.Data[2] = RxOutdBData[6]-24;	//主持人监听dBFS
			TxMessage.Data[3] = RxOutdBData[7]-24;
			while(((CAN1->TSR>>26)& 0x07) == 0);
			CAN_Transmit(CAN1, &TxMessage);
			
			FaceKeySet &= ~(1<<0);	//清除"主页"键(bit0)
			FaceKeySet &= 0x0F;		//清除高4位
			FaceKeySet |= 1<<4;		//主页界面显示		
		}


//New (说明:发送邮箱满的时候,可以等到下一轮循环再次发送)

		u8 MainPage = 0;
		u8 TabNum = 0;
		u8 TransMailBox = 0;
		
		//当总控模块"主页"按键触发时,转发数据(0x78指令)
		if((FaceKeySet & 0x01) == 0x01)
		{
			FaceKeySet &= ~(1<<0);	//清除"主页"键(bit0)
			FaceKeySet &= 0x0F;		//清除高4位
			FaceKeySet |= 1<<4;		//主页界面显示

			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 4;
			TxMessage.StdId = 0x02B;
			TxMessage.Data[0] = RxOutdBData[0]-24;	//播出dBFS
			TxMessage.Data[1] = RxOutdBData[1]-24;	
			TxMessage.Data[2] = RxOutdBData[6]-24;	//主持人监听dBFS
			TxMessage.Data[3] = RxOutdBData[7]-24;
			while(((CAN1->TSR>>26)& 0x07) == 0);
			CAN_Transmit(CAN1, &TxMessage);

			MainPage = 1;		//"主页"按键触发标志
			TabNum = 0;			//序号
			Tablen = Tablen/6;	//总数
		}
		if(MainPage)	//"主页"按键触发
		{											
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 7;
			TxMessage.StdId = 0x021;
			while(Tablen)
			{			
				TxMessage.Data[0] = TabNum+1;
				for(i=0;i<6;i++)
					TxMessage.Data[i+1] = PlayTable[TabNum][i];
				TransMailBox = CAN_Transmit(CAN1, &TxMessage);
				if(TransMailBox == CAN_NO_MB)break;
				Tablen--;
				TabNum++;	
			}				
			if(Tablen == 0)MainPage = 0;
		}

//==================== 12-21 ========================//

//源程序(CAN发送,等待):								
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 8;
			if(TuiziAddr[0] != 0)
			{		
				printf("\rTuiziAddr[0] = 0x%X\n",TuiziAddr[0]);	
				TxMessage.StdId = TuiziAddr[0];
				for(i=0;i<4;i++)
				{
					TxMessage.Data[0] = (InputState[i][7]<<4)|(i+1); //高4位信号格式,低4位数据包编号
					TxMessage.Data[1] = InputState[i][8];			 //输入模块地址
					for(h=2;h<8;h++)
						TxMessage.Data[h] = InputState[i][h-1];		 //6字节汉字码
					while(((CAN1->TSR>>26)& 0x07) == 0);
					CAN_Transmit(CAN1, &TxMessage);
				}							
				startflg1 &= ~(1<<0);
			}

//New(说明:发送邮箱满的时候,可以等到下一轮循环再次发送):
			TxMessage.RTR = CAN_RTR_DATA;
			TxMessage.IDE = CAN_ID_STD;
			TxMessage.DLC = 8;
			if(TuiziAddr[0] != 0)
			{		
				printf("\rTuiziAddr[0] = 0x%X\n",TuiziAddr[0]);	
				TxMessage.StdId = TuiziAddr[0];
				if((startflg1 & 0x01) == 0x01)
				{
					Tuizi1_Cnt = 4;
					Tuizi1_Num = 0;
					startflg1 &= ~(1<<0);
				}
				while(Tuizi1_Cnt)
				{
					TxMessage.Data[0] = (InputState[Tuizi1_Num][7]<<4)|(Tuizi1_Num+1); //高4位信号格式,低4位数据包编号
					TxMessage.Data[1] = InputState[Tuizi1_Num][8];		//输入模块地址
					for(h=2;h<8;h++)
						TxMessage.Data[h] = InputState[Tuizi1_Num][h-1];//6字节汉字码
					TransMailBox = CAN_Transmit(CAN1, &TxMessage);
					if(TransMailBox == CAN_NO_MB)break;
					Tuizi1_Cnt--;
					Tuizi1_Num++;
				}
				if(Tuizi1_Cnt == 0);								
			}

								printf("The BindADData[6] = 0x%X\n",BindADData[6]);
								printf("The BindADData[7] = 0x%X\n",BindADData[7]);
								printf("The BindADData[4] = 0x%X\n",BindADData[4]);
								printf("The BindADData[5] = 0x%X\n",BindADData[5]);
								printf("The BindADData[2] = 0x%X\n",BindADData[2]);
								printf("The BindADData[3] = 0x%X\n",BindADData[3]);
								printf("The BindADData[0] = 0x%X\n",BindADData[0]);
								printf("The BindADData[1] = 0x%X\n",BindADData[1]);
								printf("\nThe ADGainData3C = 0x%X\n\n",ADGainData[i]);
								printf("\nThe ADGainData3A = 0x%X\n\n",ADGainData[i]);

⌨️ 快捷键说明

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