查看: 2912|回复: 2
打印 上一主题 下一主题

TinyOS 学习笔记6- 基本的通信接口

[复制链接]
跳转到指定楼层
沙发
发表于 2015-3-25 17:17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基本的通信接口:
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 );
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表