📄 wllocate.c
字号:
#ifndef ENABLE_DEBUG
//#define ENABLE_DEBUG
#endif
#include <string.h>
#include "msstate_lrwpan.h"
#include "MAC.h"
#include <stdlib.h>
#include "SensorComm.h"
#define APP_TAG_STARTUP (0)
#define APP_TAG_INITED (1)
#define APP_TAG_JOINREQUESTED (2)
#define APP_TAG_JOINEDGROUP (3)
#define APP_TAG_ADDITIONALlISTEN (4)
#define APP_CAPTAIN_STARTUP (5)
#define APP_CAPTAIN_INITED (6)
#define APP_CAPTAIN_CALLING (7)
#define APP_CAPTAIN_REPLACECAPTAIN (8)
#define STARTUP_MSG "ZigBee Demo RFD Application v1.0 "
#define MAC_RESPONSE_WAITFOR_DURATION (50)
#define MAC_ACK_WAITFOR_DURATION (50)
#define QUERY_INT_DURATION (200)
#define MAC_QUERY_WAIT_DURATION (25)
#define MAC_WAITFOR_QUERY_DURATION (250)
#define PHYSetChannel(x) macSetChannel(x)
#define PHYGetPhyChannel() macGetChannel()
#define PHYSetTxPower(x) halSetTxPower(x)
REPDATTOSENSORREC RepDatToSensorRec[MAXREPRECNUM];
BYTE ChannelIdx=0;
BYTE NewChannelIdx,GroupChannelIdx,NormalChannelIdx,NewGroupChannel;
NODE_STUTAS ThisNode;
TICK LedChangeTime;
TICK TAGLastConnectTime;
TICK TAGAddtionalListenTime;
TICK TAGOnlineStartTime;
TICK CAPTAINBroadcastStartTime;
TICK CAPTAINLastCallingTime;
TICK SENSORLastBroadcastTime;
TICK CAPTAINSingleCallingTime;
TICK SENSORLastReportTime;
BYTE WatchDogReset=0;
TICK CAPTAINLastSleepTime;
TICK ChannelStatiTime;
BYTE APPSTATE;
BYTE SensorInfo=0;
BYTE JoinReqCount=0;
BYTE DebugCode=0;
BYTE mainLoop=0;
extern void WirelessSendData(BYTE frame);
extern void Delay(WORD i);
void _changetochannel(BYTE idx) //切换信道
{
ISRFOFF; //晶振关闭
PHYSetChannel(idx); //切换信道物理层函数
ISRXON; //晶振打开
ChannelIdx=idx;
}
void ChangeToNormalChannel(void) //切换到公用信道函数
{
ConsolePutROMString("切换到公用信道:");
ConsolePutInitData(0,NormalChannelIdx); //输出调试信息
_changetochannel(NormalChannelIdx); //切换信道
}
void ChangeToChannel(BYTE chlidx) //切换到指定信道函数
{
ConsolePutROMString("切换到信道(11~26):");
ConsolePutInitData(0,chlidx);
_changetochannel(chlidx);
}
void SleepSomeTime(int time) //休眠函数
{
ConsolePutROMString("休眠:");
ConsolePutInitData(0,time);
ISRFOFF; //晶振关闭
halSleep(time+100); //休眠
ISRXON; //晶振打开
ConsolePutROMString("唤醒\r\n");
}
BYTE DebugParam[20];
BYTE DebugParamLen;
void WirelesDebugOut(BYTE code) //无线发送调试信息函数
{
BYTE OldChlIdx;
OldChlIdx=ChannelIdx;
DebugCode=code;
ChangeToChannel(DEBUGCHANNEL);
WirelessSendData(MSG_DEBUG_OUT);
DebugParamLen=0;
ChangeToChannel(OldChlIdx);
}
int TickGetDiff(TICK now,TICK start) //返回值单位:50ms
{
return halMACTimerDelta(now,start) *50/LRWPAN_SYMBOLS_PER_SECOND;
}
void MainLoop(void) //主循环函数
{
BYTE TxPower;
BYTE rst;
unsigned int xyz=0;
ConsolePutROMString("Set Channel...\r\n"); //串口输出调试信息
NormalChannelIdx=COMMCHANNEL;
ChangeToNormalChannel(); //切换信道到公用信道
#if defined(IAMTAG) //设置发射功率,标签与节点的功率设置不同
TxPower =TAG_TXPOWER;
#else
TxPower =SENSOR_TXPOWER;
#endif
ConsolePutROMString("设置发射功率(min:0~max:7):");
ConsolePutInitData(0,TxPower);
PHYSetTxPower(TxPower);//设置发射功率//0~7;0-min ; 7-max
ThisNode.NODEID[0] = macInfo.longAddr.v[0]; //节点ID号
ThisNode.NODEID[1] = macInfo.longAddr.v[1];
srand(ThisNode.NODEID[0]*256+ThisNode.NODEID[1]);//
ConsolePutROMString("本节点ID号:");
ConsolePutInitData(ThisNode.NODEID[0], ThisNode.NODEID[1]);
ConsolePutROMString("标签启动...\r\n");
CAPTAINLastSleepTime=TickGet();
SENSORLastReportTime=0;
ConsolePutROMString("开始启动\r\n");
rst=(SLEEP>>0x03)&0x03;
#if defined(IAMTAG)
if(rst==0x02)//看门狗复位
{ ConsolePutROMString("watch dog reset\r\n");
WirelesDebugOut(DEBUG_WATCHDOG_RESET);
WatchDogReset=0;
}
if(rst==0x00)//看门狗复位
{ ConsolePutROMString("Power-on reset\r\n");
WatchDogReset=0;
}
if(rst==0x01)//看门狗复位
{ ConsolePutROMString("External reset\r\n");
WatchDogReset=0;
}
#endif
//WDT_SET_TIMEOUT_PERIOD(M_SEC_250); //设置看门狗时间值
//WDT_ENABLE(); //使能看门狗
ConsolePutROMString("进入主程序...\r\n");
mainLoop=1;
while (1)
{
//WDT_RESET(); //看门狗喂狗
//SleepSomeTime(100); //休眠
macFSM(); //mac层通讯处理
if(submacCurrentFrame.sub_type.Val!=0xff) //若收到数据
{
P0_1=~P0_1; //改变绿灯状态
}
if(xyz==0) //定时时间间隔到
{
P0_0=~P0_0; //改变红灯状态
WirelessSendData(MSG_TAG_ISANYCAPTAINHERE); //无线广播发送数据
}
xyz++;
if(xyz>8000)xyz=0; //记时
continue;
}
}
void ResetsubmacCurrentFrame(void)
{
submacCurrentFrame.sub_type.Val=0xff;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -