已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*Filename: radio.cTarget: cc2430Revised: 16/12-2005Revision: 1.0*/#include cul.hextern volatile BYTE sppRxStatus;extern volatile BYTE sppTxStatus;_no_init SPP_RX_STRUCT rxData PM0_XDATA; /rxData_no_init SPP_TX_STRUCT txData PM0_XDATA; /txData/*typedef struct BYTE payloadLength; BYTE destAddress; BYTE flags; BYTE *payload;SPP_TX_STRUCT;typedef struct BYTE payloadLength; BYTE destAddress; BYTE srcAddress; BYTE flags; BYTE payloadSPP_MAX_PAYLOAD_LENGTH + SPP_FOOTER_LENGTH;SPP_RX_STRUCT;*/-/ See cul.h for a description of this function./*This function initializes the radio by calling sppInit.The frequency of operation is set andthis nodes address isstored. The radio is set up for handling non-IEEE 802.15.4 packets.这个函数初始化radio(运行SPP模式时):设置频率及节点地址。*/-void radioInit(UINT32 frequency, BYTE localAddress) sppInit(frequency,localAddress); return;/-/ See cul.h for a description of this function./*This function sends data of a given length either to a specified recipient (may be broadcast)using the radio. If the number of bytes to be transferred is larger than the size of the TX FIFO,the data is split over an adequate number of packets. The function uses the SPP library. If theradio is busy, or the packet is sent but not ACKed, the transmission is retried. If the retiresfails, the function returns FALSE. If the packet is ACKed correctly by the receiver, thefunction returns TRUE.transmitData:指向将被传送的数据。dataLenght:被传送数据的长度。remoteAddress:接收数据包的节点地址。doAck:设置是否需要应答。*/-/*contionuousMode()调用的radioSend():res = radioSend(sendBuffer, sizeof(sendBuffer), remoteAddr, DO_NOT_ACK );其中sendBuffer = Hello;即为所要发送的数据,transmitData指向sendBuffer首地址,然后通过指针transmitData为结构体txData进行配置(要注意txData为所发送数据的描述性结构体,要把结构体txData内各项都配置好);配置好后radioSend()调用sppSend(&txData),&txData即为结构体txData的首地址;而sppSend()形式为sppSend(SPP_TX_STRUCT* pPacketPointer),因此结构体指针pPacketPointer指向的是结构体txData的首地址,可以这么想象:结构体pPacketPointer等同于结构体txData;数据的传递过程是这样的: sendBuffer -*transmitData-txData-&txData-*pPacketPointer-pPacketPointer*/BOOL radioSend(BYTE* transmitData, WORD dataLength, BYTE remoteAddress, BYTE doAck) WORD sent = 0; /发送字节数 BOOL status = TRUE; /状态标志位 WORD remaining; /剩余字节数 BYTE retries; /重试次数 BYTE res; / txData.destAddress = remoteAddress; /接收数据的节点地址置为目的地址 txData.flags = doAck; /需要应答 while(sent SPP_MAX_PAYLOAD_LENGTH) /如果剩余数据长度SPP限定的最大数据长度 txData.payloadLength = SPP_MAX_PAYLOAD_LENGTH; /则此次发送中SPP数据包里的数据的长度=SPP限定的最大数据长度 sent += SPP_MAX_PAYLOAD_LENGTH; /已经发送了的数据长度=已经发送了的数据长度+此次发送的数据的长度 else /如果剩余数据长度dataLength,则必定跳出while();/也即当剩余数据小于SPP_MAX_PAYLOAD_LENGTH时,数据发送完后就跳出while了。 while(retries) /未到最大重发次数 res = sppSend(&txData);/*调用sppSend()发送数据,txData为所发送 数据的结构体,见开头*/ if(res = CHANNEL_BUSY) /如果当前通道状态为忙碌 halWait(10); /等待 retries-; if(retries = 0) status = FALSE; /所有重试完后仍忙碌,直接返回FALSE状态 else /不忙碌 retries = 0; /则停止重试,直接发送 while(sppTxStatus = TX_IN_PROGRESS); /正在发送过程中,等待 /发送完成,跳出 if(sppTxStatus = DEST_UNREACHABLE) /发送完,但返回未发送到目的地 status = FALSE; /返回FALSE状态 return status; /返回状态值/-/ See cul.h for a description of this function./*This function turns on the radio receiver and waits until either a correctly addressed packetpacket is received or the unit has been waiting for a specified time period. The function employsthe SPP library for radio access.receiveData:双指针指向接收数据length:指向接收数据的长度timeout:接收器接收等待时间;若在等待时间内未接收到数据间,则返回FALSE; 若设其值为0,则将会一直等到接收到数据。sender:函数将数据包源地址赋给此sender*/-BOOL radioReceive(BYTE* receiveData, BYTE* length, WORD timeout, BYTE* sender) BOOL status = TRUE; BOOL continueWaiting = TRUE; /是否连续等待状态字 BOOL useTimeout = FALSE; /是否使用超时状态字 if(timeout) /如果设置了等待时间,则useTimeout=TRUE useTimeout = TRUE; sppReceive(&rxData); /接收数据 while(sppRxStatus != RX_COMPLETE) & (continueWaiting) /接收未完成并且连续等待 if(useTimeout) /如果使用超时 halWait(0x01); timeout-; if(timeout = 0) /超时结束 continueWaiting = FALSE; status = FALSE; STOP_RADIO(); if(status = TRUE)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国涡流泵行业新进入者威胁与壁垒分析报告
- 2026中国物流自动化设备市场现状与未来发展趋势及投资战略分析报告
- 2026中国印刷包装制造行业市场供需现状走势分析及产业持续发展规划
- 2026汽车维修保养行业市场深度调研及投资前景与投资策略研究报告
- 2026年初中化学模拟练习卷
- 2026中国洗衣液市场竞争格局与主要厂商策略对比报告
- 2026青岛地铁线网客流预测智能调整优化持续提升线网服务能力分析研究报告
- 2026母婴用品市场消费行为分析及投资组合调整策略
- 2026食品添加剂行业供需关系演变研究及投资测算行业布局报告
- 2026欧洲通信基站建设行业市场供需分析及产业投资政策规划研究报告
- GB/T 4111-2026混凝土砌块和砖试验方法
- 2026年高三上学期数学秋季开学摸底考(江苏专用)
- GB/T 6904-2026工业循环冷却水及锅炉用水中pH的测定
- 2026年“麻醉药品、精神药品”管理和使用培训考核试题(含答案)
- 幼儿教师招聘考试全套试题及答案
- 2026-2030中国电子束装备行业市场发展分析及前景趋势与投资战略研究报告
- 浙江省舟山市2025-2026学年高二下学期6月期末考试技术试题含答案
- 2026年山东省临沂市重点中学小升初英语考试试卷及答案
- 石家庄城市经济职业学院教师招聘考试笔试试题及答案
- 2026年《保安员》上岗证考试题库及答案
- 餐饮储值卡销售合同
评论
0/150
提交评论