| 
 | 
 
基本的通信接口: 
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 ); 
} 
 |   
 
 
 
 |