📄 sendpack.c
字号:
#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 + -