已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 秘书实务训练教程
- 2025年牙科牙齿美白服务合同协议
- 2025年西峡县教师招聘笔试参考试题及答案解析
- 2025年上海安全员C3考前冲刺备考速记速练500题-含答案
- 怎样介绍搏击
- 2025年常山县教师招聘参考题库及答案解析
- 2025年虚拟校园系统运营合同
- 2025年西安市临潼区中小学教师招聘笔试参考试题及答案解析
- 温州乐成寄宿中学2025-2026学年数学高一上期末学业质量监测模拟试题含解析
- 2025年中职教师资格证考试(科目一:综合素质)核心考点集训卷(附答案详解)
- 新入职消防培训
- 2025年福鼎时代面试题及答案
- 2025年垫江县辅警招聘考试题库含答案详解
- 2023年武汉科技大学353卫生综合考研真题(A卷)含答案解析
- 肺动脉栓塞的急救处理流程
- 2025年中国建筑项目关键岗位专题培训试题及答案
- 安徽省华师联盟2025~2026学年秋季学期高一期中质量检测含答案(9科试卷)
- 雨课堂学堂云在线《政府预算(中央财大 )》单元测试考核答案
- 2025年甘肃省省直及部分省辖市事业单位招聘考试真题试卷 公共基础知识含答案详解(考试直接用)
- 2025年山东省济南市高考生物二模试卷
- 医学常用统计方法
评论
0/150
提交评论