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

📄 mcu6.c

📁 select programe, 1 raw socket2 udp socket.
💻 C
字号:
#include "mcu6.h"

//
//	TITLE:
//
//	DESCRIPTION:
//		disposal of the data with mcu6
//	REFER to	mcu6 v4.1
//
//	FILENAME:
//		mcu6.c
//
//	AUTHOR(S):
//		Andrew Dai(mailto:andrew.x.dai@gmail.com	)
//
//	CREATION DATE:
//		date from: 2007-5-11
//
//	MODIFICATION HISTORY:
//
//
//


void
showOTUmessage(MCU6_TO_ICU *p)
{
//	printHex(p,sizeof(MCU6_TO_ICU),"udp from mcu:");
	printf("-----------udp from mcu6->icu, len=%d----------------\n",sizeof(MCU6_TO_ICU));
	printf("MARK=%2X,\tREMOTE_TYPE=%2X\n",p->MARK,p->REMOTE_TYPE);
	printf("COUNTER=%2X,\tCONFIRMNO=%2X\n",p->COUNTER,p->CONFIRMNO);
	printf("MODEMNO=%2X,\tADDRESSNO=%2X\n",p->MODEMNO,p->ADDRESSNO);
	printf("GBYTE=%2X %2X,\tSDBYTE=%2X %2X\n",p->GBYTE[0],p->GBYTE[1],p->SDBYTE[0],p->SDBYTE[1]);
	printf("STATUS=%2X\n",p->STATUS);
	printHex(p->RUNMODE,sizeof(p->RUNMODE),"RUNMODE");
	printHex(p->CURRENTSTAGE,sizeof(p->CURRENTSTAGE),"CURRENTSTAGE");
	printHex(p->PLANNO,sizeof(p->PLANNO),"PLANNO");
	printHex(p->PHASESTAGE,sizeof(p->PHASESTAGE),"PHASESTAGE");
	printf("VALID=%2X\n",p->VALID);
	printHex(p->IODATA,sizeof(p->IODATA),"IOVALID");
	printHex(p->PHASECURRENT,sizeof(p->PHASECURRENT),"PHASECURRENT");
	printf("VOLTAGE=%2X\n",p->VOLTAGE);
	printf("TEMPERATURE=%2X\n",p->TEMPERATURE);
	printf("-----------udp from mcu6->icu----------------\n");
}

int
verifyMCU6 (unsigned char buf[], ssize_t len)
{
	if (len <= max(6,sizeof(MCU6_TO_ICU))) return -1;
	if (!((buf[0]==0x55) && ((buf[1]==0xaa) | (buf[1]==0xab) ))) return -1;
	return 0;
}

void
fillupOTUmessage(MCU6_TO_ICU *p,  SA *p_udp_mcu6_cli_addr)
{
	unsigned char modemNo;
	unsigned char addressNo;

	modemNo= p->MODEMNO;
	addressNo= p->ADDRESSNO;

	if (modemNo<(unsigned char)64 && addressNo<(unsigned char)8) {
		OTUData[modemNo][addressNo].Type_of_OTU=(p->REMOTE_TYPE==0xAA?0:1);
		if (OTUData[modemNo][addressNo].Ttl>=4) OTUData[modemNo][addressNo].NetCount++;
		OTUData[modemNo][addressNo].Ttl=0;
//		printf("remote udp ip=%s\n",strcpy(ss, inet_ntoa(*(struct in_addr*)&(OTUData[modemNo][addressNo].Ip))));
//		printf("remote udp port=%d\n",ntohs(OTUData[modemNo][addressNo].Port));
		OTUData[modemNo][addressNo].Ip=udp_mcu6_cli_addr.sin_addr.s_addr;
		OTUData[modemNo][addressNo].Port=udp_mcu6_cli_addr.sin_port;
		switch (p->COUNTER)
		{
		case 0:
			if (OTUData[modemNo][addressNo].Type_of_OTU==0)												/*	st800	*/
			{
				int j;
				for(j=0;(j <min(bytes_received-6,20) && j<=OTUData[modemNo][addressNo].RLen-6);j++)				/*	??? size of Rbytes	*/
				{
					OTUData[modemNo][addressNo].Rbytes[j]=(size_1) *(&p+j+6);
				}
			}
			else
			{																																/*	MPC	*/
				OTUData[modemNo][addressNo].Rbytes[0]=p->GBYTE[0];
				OTUData[modemNo][addressNo].Rbytes[1]=p->GBYTE[1];
				int j;
				for (j=0;j<32 ;j+=2 )
				{
					OTUData[modemNo][addressNo].Rbytes[2+j]= \
						(p->IODATA[j*3] & 0x0f)+(p->IODATA[(j+1)*3]<<4 & 0xf0);
				}
			}


		case 1:
			OTUData[modemNo][addressNo].HandSetRet[0]=bytes_received-6;				/*	??? size of HandSetRet	*/
			int j;
			for(j=0;(j <min(bytes_received-6,80));j++)																									
			{
				OTUData[modemNo][addressNo].HandSetRet[j]=(size_1) *(&p+j+5);
			}
            OTUData[modemNo][addressNo].HandSetRet[j]=0x0d;
			OTUData[modemNo][addressNo].HandSetReturn=TRUE;
		}

	}
	else {
		sys_log("in udp packet, !(modemNo<64 & addressNo<8)");
	}
}

void
generateOTUreply()
{
}


⌨️ 快捷键说明

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