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

📄 sendpack.c

📁 无线单片机cc2430简化协议的无线收发程序
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "msstate_lrwpan.h"
#include "mac.h"

NODE_INFO dest;


extern BYTE DebugParam[];
extern BYTE DebugParamLen;
extern BYTE IDNUM,STATES;

extern BYTE SensorInfo;
extern BYTE DebugCode;
extern BYTE ChannelIdx,NewChannelIdx,GroupChannelIdx,NewGroupChannel;
void WirelessSendData(BYTE frame)
{
    //数据格式如下:

	//MacPutHeader()函数构造Mac帧头: 帧控制[2byte]+流水号[1byte]+目的PanID+目的Addr+源PanID+源Addr
//-->  //WirelessSendData()构造数据:    数据类型[1Byte]+Dst Addr[2Byte]+Src Addr[2Byte]+data Len[cs+data]+Head Cs[之前6Byte 相加]+Data;
    //MACPutArray()函数:会给data数据在计算一次校验和,追加在data之后;
    //MACFlush函数:会在总包头前增加包数据长度[包含Header+userdata+rssi+crc],最后由2430自动追加RSSI and CRC 共两个字节

    #if defined(USE_TAGRSSI)
    BYTE SendData[MAX_GROUPMENBER_NUM *3+16];
	#else
    BYTE SendData[MAX_GROUPMENBER_NUM *2+16]; 	
	#endif
    BYTE i,rssi,cs;
	


    while (!MACIsPutReady()) ;	
    phyGrabTxLock();


    macInfo.addrMode = MAC_SRC_NO_ADDR;
    dest.addrMode = MAC_DST_SHORT_ADDR;
    dest.shortAddr.Val = 0xffff;
    dest.panID.Val = 0xffff;

    MACPutHeader(&dest,  // Dest
    MAC_FRAME_DATA |  // Frame Control LSB
    MAC_SECURITY | MAC_FRAME_PENDING_NO | MAC_ACK_NO | MAC_INTRA_PAN_NO);
	cs=0;
    SendData[0] = frame;

    switch (frame)
    {
       case MSG_DEBUG_OUT:
            SendData[1] = 0xff;
            SendData[2] = 0xff;
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];
            SendData[5] = 1+1+1+DebugParamLen;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;
			
            SendData[7] = DebugCode; 	
            SendData[8] = DebugParamLen; 				
			for(i=0;i<DebugParamLen;i++)
				SendData[9+i]=DebugParam[i];
			
            MACPutArray(SendData, 9+i);
            MACFlush();

			

            break;
			
        case MSG_SENSOR_IAMSENSOR:
            SendData[1] = 0xff;
            SendData[2] = 0xff;
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];
            SendData[5] = 1+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;
			
            SendData[7] = SensorInfo; 			
            MACPutArray(SendData, 8);

            MACFlush();


            break;
			
        case MSG_SENSOR_RECEIVEDDATA:
            SendData[1] = submacCurrentFrame.sub_source_addr.v[0];
            SendData[2] = submacCurrentFrame.sub_source_addr.v[1];
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];
			
            SendData[5] = 0+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;
			
            MACPutArray(SendData, 7);
            MACFlush();

            break;		

			
        case MSG_TAG_ISANYCAPTAINHERE:
            SendData[1] = 0xff;
            SendData[2] = 0xff;
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];
			
			SendData[5] = 0+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

            MACPutArray(SendData, 7);
            MACFlush();

            break;

        case MSG_TAG_CALLINGACK:
            SendData[1] = 0xff;
            SendData[2] = 0xff;
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[0];
			
			SendData[5] = 0+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;
            MACPutArray(SendData, 8);
            MACFlush();

            break;

        case MSG_TAG_RECVMEMBER:
            SendData[1] = submacCurrentFrame.sub_source_addr.v[0];
            SendData[2] = submacCurrentFrame.sub_source_addr.v[1];
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];
			
			SendData[5] = 0+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

            MACPutArray(SendData, 7);
            MACFlush();

            break;
			
        case MSG_CAPTAIN_IAMCAPTAIN:
			//break;
            SendData[1] = 0xff;
            SendData[2] = 0xff;
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];

			SendData[5] = 4+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

		rssi=ThisNode.RSSI;	rssi+=50; if(rssi>128) rssi=0; rssi/=3;				
            SendData[7] = ((rssi <<3)&0xf8)|(ThisNode.RecSenMsgTimeVal&0x07);
			
			SendData[8] = GroupChannelIdx;	
            SendData[9] = ThisNode.MEMBERNUM;
            SendData[10] = MAX_GROUPMENBER_NUM;
            MACPutArray(SendData, 11);
            MACFlush();

            break;


        case MSG_CAPTAIN_LEAVEACCEPT:
			//break;
            SendData[1] = submacCurrentFrame.sub_source_addr.v[0];
            SendData[2] = submacCurrentFrame.sub_source_addr.v[1];
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];

			SendData[5] = 4+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

			rssi=ThisNode.RSSI;	rssi+=50; if(rssi>128) rssi=0; rssi/=3;				
            SendData[7] = ((rssi <<3)&0xf8)|(ThisNode.RecSenMsgTimeVal&0x07);
			
			SendData[8] = GroupChannelIdx;	
            SendData[9] = ThisNode.MEMBERNUM;
            SendData[10] = MAX_GROUPMENBER_NUM;
            MACPutArray(SendData, 11);
            MACFlush();

            break;

			

        case MSG_CAPTAIN_UNITEINVITE:
			//break;
            SendData[1] = submacCurrentFrame.sub_source_addr.v[0];
            SendData[2] = submacCurrentFrame.sub_source_addr.v[1];
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];

			SendData[5] = 4+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

            rssi=ThisNode.RSSI;	rssi+=50; if(rssi>128) rssi=0; rssi/=3;				
            SendData[7] = ((rssi <<3)&0xf8)|(ThisNode.RecSenMsgTimeVal&0x07);
			SendData[8] = GroupChannelIdx;	
            SendData[9] = ThisNode.MEMBERNUM;
            SendData[10] = MAX_GROUPMENBER_NUM;
            MACPutArray(SendData, 11);
            MACFlush();

            break;

        case MSG_CAPTAIN_SENDDATATOSENSOR:
            SendData[1] = ThisNode.SensorID[0];
            SendData[2] = ThisNode.SensorID[1];
            SendData[3] = macInfo.longAddr.v[0];
            SendData[4] = macInfo.longAddr.v[1];


           #if defined(USE_TAGRSSI)
                //上报的数据中含有RSSI信息
				SendData[5] = 11+ThisNode.MEMBERNUM*3-7+1;//len;
	            for(i=0;i<=5;i++)cs+=SendData[i];
	            SendData[6] = cs;//checksum;
	            rssi=ThisNode.RSSI;	rssi+=50; if(rssi>128) rssi=0; rssi/=3;				
                SendData[7] = ((rssi <<3)&0xf8)|(ThisNode.RecSenMsgTimeVal&0x07);
	            SendData[8] = GroupChannelIdx;
				SendData[9] = ThisNode.MEMBERNUM;
	            SendData[10] = MAX_GROUPMENBER_NUM;
	            for(i=0;i<ThisNode.MEMBERNUM;i++ )
				{
				   SendData[11+i*3]  =ThisNode.MEMBERS[i].ID[0];
				   SendData[11+i*3+1]=ThisNode.MEMBERS[i].ID[1];	
				   SendData[11+i*3+2]=ThisNode.MEMBERS[i].RSSI;	
				}			
	            MACPutArray(SendData, 11+ThisNode.MEMBERNUM*3);
	            MACFlush();
            #else
	             //上报的数据中不含RSSI信息
				SendData[5] = 11+ThisNode.MEMBERNUM*2-7+1;//len;
	            for(i=0;i<=5;i++)cs+=SendData[i];
	            SendData[6] = cs;//checksum;
	            rssi=ThisNode.RSSI;	rssi+=50; if(rssi>128) rssi=0; rssi/=3;				
                SendData[7] = ((rssi <<3)&0xf8)|(ThisNode.RecSenMsgTimeVal&0x07);
	            SendData[8] = GroupChannelIdx;
				SendData[9] = ThisNode.MEMBERNUM;
	            SendData[10] = MAX_GROUPMENBER_NUM;
	            for(i=0;i<ThisNode.MEMBERNUM;i++)
				{
				   SendData[11+i*2]  =ThisNode.MEMBERS[i].ID[0];
				   SendData[11+i*2+1]=ThisNode.MEMBERS[i].ID[1];	
				}			
	            MACPutArray(SendData, 11+ThisNode.MEMBERNUM*2);
	            MACFlush();
			#endif
			

            break;		

⌨️ 快捷键说明

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