|
基本的通信接口:
Packet: 为message_t的抽象数据类型提供访问的接口
Packet.nc的位置为/opt/tinyos-2.1.1/tos/interfaces/Packet.nc
#include <message.h>
interface Packet {
//清空数据包,将msg的数据清空重新使用
command void clear(message_t* msg);
//返回信息负载的长度
command uint8_t payloadLength(message_t* msg);
//设置负载长度
command void setPayloadLength(message_t* msg, uint8_t len);
//返回最大负载
command uint8_t maxPayloadLength();
//获取负载,len为需要的负载的长度
command void* getPayload(message_t* msg, uint8_t len);
}
message.h为于/opt/tinyos-2.1.1/tos/types/message.h,其主要内容如下:
#include "platform_message.h"
typedef nx_struct message_t {
nx_uint8_t header[sizeof(message_header_t)];
nx_uint8_t data[TOSH_DATA_LENGTH];
nx_uint8_t footer[sizeof(message_footer_t)];
nx_uint8_t metadata[sizeof(message_metadata_t)];
} message_t;
platform_message.h为于相应平台下的目录中,例如在telosb中为/opt/tinyos-2.1.1/tos/platforms /telosb/mac/tkn154/platform_message.h
telosb所采用的MAC层为802.15.4的MAC协议,用户无需再关心MAC协议,该Message同样定义了如何于串口通信。
nx_struct为nesC中的结构体,即可理解成C语言中的stuct
nx_uint8_t,为无符号的8位整型数据
Send:提供基本的无地址信息发送接口
#include <TinyError.h>
#include <message.h>
interface Send {
//设置发送数据包的负载长度
command error_t send(message_t* msg, uint8_t len);
//取消数据的传输
command error_t cancel(message_t* msg);
//发送数据完成
event void sendDone(message_t* msg, error_t error);
//返回通讯层允许的最大负载长度
command uint8_t maxPayloadLength();
//获取负载
command void* getPayload(message_t* msg, uint8_t len);
}
Receive:提供基本的信息接收接口
#include <TinyError.h>
#include <message.h>
interface Receive {
//返回数据包的buffer,msg接收的数据包,数据包负载的指针,负载长度。
event message_t* receive(message_t* msg, void* payload, uint8_t len);
}
PacketAcknowledgements:在每个包上为请求ACK提供一个策略
interface PacketAcknowledgements {
//告诉协议,当要发送这个数据包时,使用同步的ACK
async command error_t requestAck( message_t* msg );
//不使用同步ACK
async command error_t noAck( message_t* msg );
//传输的数据包是否为ACK
async command bool wasAcked(message_t* msg);
}
async的含义:同步
RadioTimeStamping:为无线通讯提供时间戳信息
interface RadioTimeStamping
{
//提供帧开始传输的时间,时间单元是a 32kHz clock
async event void transmittedSFD( uint16_t time, message_t* p_msg );
//开始接收帧的时间
async event void receivedSFD( uint16_t time );
}
|
|