/*
V0.1 Initial Release 10/July/2006 RBR
*/
#include "compiler.h"
#include "lrwpan_config.h" //user configurations
#include "lrwpan_common_types.h" //types common acrosss most files
#include "ieee_lrwpan_defs.h"
#include "console.h"
#include "hal.h"
#include "halstack.h"
#include "phy.h"
#include "mac.h"
#include "sendpack.h"
//#include "nwk.h"
//#include "neighbor.h"
SUB_MAC_FRAME submacCurrentFrame;
/*
typedef enum _MAC_RXSTATE_ENUM {
MAC_RXSTATE_IDLE,
MAC_RXSTATE_NWK_HANDOFF,
MAC_RXSTATE_CMD_PENDING
} MAC_RXSTATE_ENUM;*/
//
//static MAC_RXSTATE_ENUM macRxState;
MAC_PIB mac_pib;
//MAC_SERVICE a_mac_service;
//MAC_STATE_ENUM macState;
NODE_INFO macInfo;
//there can only be one TX in progress at a time, so
//a_mac_tx_data contains the arguments for that TX.
MAC_TX_DATA a_mac_tx_data;
//this is used for parsing of current packet.
MAC_RX_DATA a_mac_rx_data;
LRWPAN_STATUS_ENUM macTxFSM_status;
//locals
//static UINT32 mac_utility_timer; //utility timer
//local functions
//static void macTxData(void);
static void macParseHdr(void);
static void macRxFSM(void);
//does not turn on radio.
void macInit(void){
BYTE *p;
//macState = MAC_STATE_IDLE;
//macRxState = MAC_RXSTATE_IDLE;
mac_pib.flags.val = 0;
mac_pib.rxTail = 0;
mac_pib.rxHead = 0;
mac_pib.macPANID = LRWPAN_DEFAULT_PANID;
//mac_pib.macMaxAckRetries = aMaxFrameRetries;
macInfo.panID.Val=0xffff;
macInfo.panID.Val=0xffff;
p = (BYTE*) &macInfo.longAddr;// Initialize the MAC address
*p++ = (DEFAULTID >>8)&0xFF; //MAC_LONG_ADDR_BYTE1;
*p++ = DEFAULTID & 0xFF; //MAC_LONG_ADDR_BYTE0;
//ntInitAddressMap(); //init the address map
#ifdef LRWPAN_COORDINATOR
mac_pib.depth = 0;
#else
mac_pib.depth = 1; //depth will be at least one
#endif
mac_pib.bcnDepth = 0xFF; //remembers depth of node that responded to beacon
//other capability information
mac_pib.macCapInfo = 0;
#ifdef LRWPAN_ALT_COORDINATOR //not supported, included for completeness
LRWPAN_SET_CAPINFO_ALTPAN(mac_pib.macCapInfo);
#endif
#ifdef LRWPAN_FFD
LRWPAN_SET_CAPINFO_DEVTYPE(mac_pib.macCapInfo);
#endif
#ifdef LRWPAN_ACMAIN_POWERED
LRWPAN_SET_CAPINFO_PWRSRC(mac_pib.macCapInfo);
#endif
#ifdef LRWPAN_RCVR_ON_WHEN_IDLE
LRWPAN_SET_CAPINFO_RONIDLE(mac_pib.macCapInfo);
#endif
#ifdef LRWPAN_SECURITY_CAPABLE
LRWPAN_SET_CAPINFO_SECURITY(mac_pib.macCapInfo);
#endif
//always allocate a short address
LRWPAN_SET_CAPINFO_ALLOCADDR(mac_pib.macCapInfo);
}
//this assumes that phyInit, macInit has previously been called.
//turns on the radio
LRWPAN_STATUS_ENUM macInitRadio(void) {
phy_pib.phyCurrentFrequency = LRWPAN_DEFAULT_FREQUENCY;
phy_pib.phyCurrentChannel = LRWPAN_DEFAULT_START_CHANNEL;
if (phy_pib.phyCurrentChannel < 11){
mac_pib.macAckWaitDuration = SYMBOLS_TO_MACTICKS(120);
}
else {
mac_pib.macAckWaitDuration = SYMBOLS_TO_MACTICKS(54);
}
a_phy_service.args.phy_init_radio_args.radio_flags.bits.listen_mode = 0;
#ifdef LRWPAN_COORDINATOR
a_phy_service.args.phy_init_radio_args.radio_flags.bits.pan_coordinator = 1;
#else
a_phy_service.args.phy_init_radio_args.radio_flags.bits.pan_coordinator = 0;
#endif
halInitRadio(phy_pib.phyCurrentFrequency,
phy_pib.phyCurrentChannel,
a_phy_service.args.phy_init_radio_args.radio_flags);
#ifdef LRWPAN_USE_STATIC_PANID
halSetRadioPANID(LRWPAN_DEFAULT_PANID); //listen on this PANID
#else
halSetRadioPANID(0xFFFF); //broadcast
#endif
halSetRadioShortAddr(0xFFFE); //non-broadcast, reserved
return(a_phy_service.status);
}
void macSetPANID(UINT16 panid){
mac_pib.macPANID = panid;
halSetRadioPANID(mac_pib.macPANID);
}
void macSetChannel(BYTE channel){
phy_pib.phyCurrentChannel = channel;
halSetChannel(channel);
}
BYTE macGetChannel()
{
return phy_pib.phyCurrentChannel;
}
void macSetShortAddr(UINT16 saddr) {
halSetRadioShortAddr(saddr);
}
unsigned char gMacDSN=0;
void MACPutHeader(NODE_INFO *dest, BYTE frameCON)
{
BYTE c;
BYTE dstmode, srcmode;
//DEBUG_STRING(DBG_TX,"macTxData()-header\n");
a_mac_tx_data.fcflsb = frameCON;
a_mac_tx_data.fcfmsb = LRWPAN_FCF_DSTMODE_SADDR|LRWPAN_FCF_SRCMODE_NOADDR;
a_mac_tx_data.DestAddr.saddr = LRWPAN_BCAST_PANID;
a_mac_tx_data.DestPANID = LRWPAN_BCAST_PANID;
a_mac_tx_data.SrcPANID = LRWPAN_BCAST_PANID;
dstmode = LRWPAN_GET_DST_ADDR(a_mac_tx_data.fcfmsb);
srcmode = LRWPAN_GET_SRC_ADDR(a_mac_tx_data.fcfmsb);
if (mac_pib.macPANID == 0xFFFE && srcmode == LRWPAN_ADDRMODE_SADDR)
{
srcmode = LRWPAN_ADDRMODE_LADDR;
a_mac_tx_data.fcfmsb = a_mac_tx_data.fcfmsb & ~LRWPAN_FCF_SRCMODE_MASK;
LRWPAN_SET_SRC_ADDR(a_mac_tx_data.fcfmsb,LRWPAN_ADDRMODE_LADDR);
}
phy_pib.currentTxFrm = tmpTxBuff;
phy_pib.currentTxFlen=0;
//format LSB Fcontrol
//phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = a_mac_tx_data.fcflsb;
//format MSB Fcontrol
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = a_mac_tx_data.fcfmsb;
//format dsn
mac_pib.macDSN = gMacDSN++;
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = mac_pib.macDSN; //set DSN
phy_pib.currentTxFlen = phy_pib.currentTxFlen + 3; //DSN, FCFLSB, FCFMSB
//format dst PANID, will be present if both dst is nonzero
if (dstmode != LRWPAN_ADDRMODE_NOADDR)
{
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)a_mac_tx_data.DestPANID;
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE) (a_mac_tx_data.DestPANID >> 8);
phy_pib.currentTxFlen=phy_pib.currentTxFlen+2;
}
//format dst Address
switch(dstmode)
{
case LRWPAN_ADDRMODE_NOADDR:
break;
case LRWPAN_ADDRMODE_SADDR:
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)a_mac_tx_data.DestAddr.saddr;
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)(a_mac_tx_data.DestAddr.saddr >> 8);
phy_pib.currentTxFlen=phy_pib.currentTxFlen+2;
break;
case LRWPAN_ADDRMODE_LADDR:
for(c=0;c<8;c++) {
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = a_mac_tx_data.DestAddr.laddr.bytes[c];
}
phy_pib.currentTxFlen=phy_pib.currentTxFlen+8;
break;
default:
break;
}
//format src PANID
if ( !LRWPAN_GET_INTRAPAN(a_mac_tx_data.fcflsb) &&
srcmode != LRWPAN_ADDRMODE_NOADDR
)
{
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)a_mac_tx_data.SrcPANID;
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE) (a_mac_tx_data.SrcPANID >> 8);
phy_pib.currentTxFlen=phy_pib.currentTxFlen+2;
}
//format src Address
switch(srcmode)
{
case LRWPAN_ADDRMODE_NOADDR:
break;
case LRWPAN_ADDRMODE_SADDR:
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)a_mac_tx_data.SrcAddr;
phy_pib.currentTxFrm++;
*phy_pib.currentTxFrm = (BYTE)(a_mac_tx_data.SrcAddr >> 8);
phy_pib.currentTxFlen=phy_pib.currentTxFlen+2;
break;
case LRWPAN_ADDRMODE_LADDR:
//this has to be our own long address, get it
halGetProcessorIEEEAddress_ASC(phy_pib.currentTxFrm-8);
phy_pib.currentTxFlen=phy_pib.currentTxFlen+8;
phy_pib.currentTxFrm = phy_pib.currentTxFrm+8;
break;
default:
break;
}
}
void MACPutArray(BYTE *data,BYTE len) //bhj 本函数在数组�
没有合适的资源?快使用搜索试试~ 我知道了~
jiedian.rar_温度
共73个文件
h:16个
r51:12个
c:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 74 浏览量
2022-09-20
17:40:24
上传
评论
收藏 360KB RAR 举报
温馨提示
点对点进行通信,CC2430的无线通信原理的,C语言编写的。
资源推荐
资源详情
资源评论
收起资源包目录
jiedian.rar (73个子文件)
节点
Wlserialport.ewp 53KB
Wlserialport.dep 9KB
lnk51ew_cc2430.xcl 5KB
cc2430.i51 380B
si
wll2430.po 776B
wll2430.imd 688B
wll2430.iad 2KB
wll2430.pfi 100B
wll2430.imb 36KB
wll2430.SearchResults 711B
wll2430.pr 9KB
wll2430.pri 54KB
wll2430.iab 124KB
wll2430.ps 273KB
wll2430.wk3 54KB
src
update_tem_hum.c 11KB
SendPack.h 143B
wllocate.h 72B
halStack.c 20KB
main.c 642B
phy.c 2KB
evboard.h 1KB
generic.h 1KB
mac.c 22KB
lrwpan_config.h 8KB
mac.h 12KB
ieee_lrwpan_defs.h 5KB
ioCC2430.h 39KB
hal.h 33KB
evbConfig.h 862B
halstack.h 2KB
evboard.c 2KB
console.c 3KB
temperature.c 6KB
console.h 2KB
msstate_lrwpan.h 479B
lrwpan_common_types.h 5KB
phy.h 2KB
SendPack.c 2KB
compiler.h 1KB
Wlserialport.ewd 26KB
settings
voice_sender.dbgdt 5KB
temp_getch.wsdt 4KB
Wlserialport.dni 430B
Wlserialport.dbgdt 4KB
wireless_serialport.wsdt 4KB
Wll2430.dbgdt 6KB
voice_sender.dni 275B
Wll2430.dni 336B
voice_sender.wsdt 4KB
Wlserialport.cspy.bat 2KB
Wll2430.wsdt 4KB
Debug
List
voice_sender.map 136KB
Wll2430.map 147KB
Wlserialport.map 146KB
Exe
voice_sender.d51 95KB
Wll2430.d51 102KB
Wll2430.hex 27KB
Wlserialport.d51 86KB
Obj
evboard.r51 6KB
temperature.r51 48KB
mac.r51 104KB
halStack.r51 101KB
Wlserialport.pbd 689B
SendPack.r51 13KB
console.r51 41KB
SensorComm.r51 28KB
debug.r51 76KB
powermode.r51 30KB
halNeighbor.r51 2KB
main.r51 9KB
phy.r51 19KB
temp_getch.eww 166B
共 73 条
- 1
资源评论
刘良运
- 粉丝: 71
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Go语言网络层脚手架代码资料项目间共用的网络层.zip
- 基于monaco-editor的sql编辑器,支持sql语法联想、高亮.zip
- 网络安全相关的RSS订阅列表资料.zip
- 用Vue.js开发微信app项目源代码资料.zip
- 基于YOLO-V4算法与Pytorch的视频多目标跟踪系统的开发.zip
- 雾霾分析的MATLAB GUI仿真程序.zip
- 基于react的618节日网页全屏祝福.zip
- 基于ggml+C++部署Vision-Transformer算法-无依赖+轻量化+4bit+8bit量化源码+项目说明.zip
- 火箭迭代制导MATLAB仿真源码 .zip
- Vue3+Ts+Less 开发的前端UI框架.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功