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

📄 sendpack.c

📁 该演示程序实现温度的采集与显示功能
💻 C
📖 第 1 页 / 共 2 页
字号:

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


NODE_INFO dest;

extern BYTE UART0rcvBuf[200];
extern BYTE UART0rcvBuf2[200];
extern BYTE datalen;
extern BYTE datalen2;
extern BYTE pakdatalen,train_stat;
extern BYTE trainno;
extern BYTE rcommand;
extern BYTE voiceno;
extern BYTE playtimes;
extern BYTE intevals;
extern float temperture;

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 *2+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] = 1+1;//len;
            for(i=0;i<=5;i++)cs+=SendData[i];
            SendData[6] = cs;//checksum;

            SendData[7]=temperture;

            MACPutArray(SendData, 8);
            MACFlush();

            break;

        case MSG_TAG_CALLINGACK:
            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, 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;

⌨️ 快捷键说明

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