TinyOS节点间通信相关接口和组件介绍
//tos/interfaces/Packet.nc:
#include
interface Packet {
command void clear(message_t* msg); //清空数据包,将msg的数据清空重新使用
command uint8_t payloadLength(message_t* msg); //返回信息负载的长度
command void setPayloadLength(message_t* msg, uint8_t len); //设置负载长度
command uint8_t maxPayloadLength(); //返回最大负载
command void* getPayload(message_t* msg, uint8_t len); //获取负载,len为需要的负载长度
}
//tos/interfaces/Send.nc:
#include
#include
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); //获取负载
}
//tos/interfaces/Receive.nc:
#include
#include
interface Receive {
event message_t* receive(message_t* msg, void* payload, uint8_t len);
}
//tos/interfaces/PacketAcknowledgements.nc:
interface PacketAcknowledgements {
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); //判断传输的数据包是否为ACK
}
//tos/interfaces/RadioTimeStamping.nc:
interface RadioTimeStamping
{
async event void transmittedSFD( uint16_t time, message_t* p_msg );
async event void receivedSFD( uint16_t time ); //开始接收帧的时间
}
//tos/interfaces/AMPacket.nc:
#include
#include
interface AMPacket {
command am_addr_t address();//返回AM栈中节点的AM地址
command am_addr_t destination(message_t* amsg);//返回AM数据包的目的地址的AM地址
command am_addr_t source(message_t* amsg);//返回AM数据包的源地址的AM地址
command void setDestination(message_t* amsg, am_addr_t addr);//设置AM数据包的目的地址的AM地址
command void setSource(message_t* amsg, am_addr_t addr);//设置AM数据包的源地址的AM地址
command bool isForMe(message_t* amsg);
command am_id_t type(message_t* amsg);//返回AM数据包的AM类型,也就是说数据包的类型
command void setType(message_t* amsg, am_id_t t);//设置包的类型
command am_group_t group(message_t* amsg);//获得AM数据包的AM组
command void setGroup(message_t* amsg, am_group_t grp);//设置AM数据包的AM组
command am_group_t localGroup();//返回本节点的AM组
}
//tos/interfaces/AMSend.nc:
#include
#include
#include
interface AMSend {
command error_t send(am_addr_t addr, message_t* msg, uint8_t len);//发送负载长度为len的数据,addr为发送地址
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);//获取负载
}
AMReceiverC:提供支持以下的接口:Receive,Packet和AMPacket。
AMSenderC:提供支持以下的接口:AMSend,Packet,AMPacket和Acks(即PacketAckowledgements)
AMSnooperC:提供支持以下的接口:Receive,Packet和AMPacket,进行嗅探的组件功能,和组件AMReceiverC功能相同,用于接收数据。
AMSnoopingReceiverC:提供支持以下的接口:Receive,Packet和AMPacket。与AMSnooperC组件比,多了一个ActiveMessageC.Receive[AMId]。
ActiveMessageAddressC:本模块提供了一些指令可以用来获取和设置节点的AM地址。这个模块不是为一般用户提供的,它容易破坏网络栈,所以如果不清楚操作的情况下要避免使用它。
TinyOS节点间通信相关接口和组件介绍的更多相关文章
- RAC 安装完成后 节点间通信不依赖于SSH
RAC 安装完成后,想修改ssh 的端口.google了一下.原文https://community.oracle.com/thread/2444594?tstart=0 原文说的是11g,10g也好 ...
- elasticsearch节点间通信的基础transport
在前一篇中我们分析了cluster的一些元素.接下来的章节会对cluster的运作机制做详细分析.本节先分析一些transport,它是cluster间通信的基础.它有两种实现,一种是基于netty实 ...
- 使用WebSocket帮助应用程序群集节点间通信
[序列化message传输方式]两种方式都是转成二进制. 1.使用Java序列化器,ObjectXXXputStream 2.使用ByteBuffer.wrap(bytes). 在一个标准群集场景中, ...
- Blazor入门笔记(6)-组件间通信
1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 在使用B ...
- react系列(三)组件间通信
组件间通信 React的基本组件元素是一个个组件,组件之间可能存在关联.组合等关系.不同的组件之间,经常会发生数据传递或者交换,我们称之为组件间通信. 根据传递的复杂程度,可以分为三种情况: 父子间通 ...
- Angular : 响应式编程, 组件间通信, 表单
Angular 响应式编程相关 ------------------------------------------------------------------------------------ ...
- vue之父子组件间通信实例讲解(props、$ref、$emit)
组件间如何通信,也就成为了vue中重点知识了.这篇文章将会通过props.$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信. 组件是 vue.js 最强大的功能之一,而组件实例 ...
- BFT-SMaRt:用Java做节点间的可靠信道
目录 一.引子 二.名词统一 1. 节点id 2. 节点 3. 本地节点 4. 配置域 5. TTP 6. 陌生域 三.节点服务类 四.节点通信系统概览 五.节点通信层准备 1. 创建socket服务 ...
- 集群节点间网络通信TIPC
1. TIPC背景介绍 TIPC主要是用于集群网络环境之中,它这个协议有一些前提假设包括: 协议发送的大部分message都是直接到达目的地(无路由): message的传输时间都很短; messag ...
随机推荐
- GM11灰色模型
作者:桂. 时间:2017-08-12 08:34:06 链接:http://www.cnblogs.com/xingshansi/p/7348714.html 前言 灰色模型(Gray model ...
- [Jobdu] 题目1369:字符串的排列
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个 ...
- js下拉框二级关联菜单效果代码具体实现
这篇文章介绍了js下拉框二级关联菜单效果代码具体实现,有需要的朋友可以参考一下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- [na]二层+tcp/udp数据包格式
标准:6+6+2+3 =17 3 思科:6+6+2+3+3=20 6 ip首部格式 tcp首部格式
- rabbitmq 常用的一些命令
rabbitmqctl set_user_tags admin administrator #给用户设置角色 rabbitmqctl set_permissions -p emove admin &q ...
- tomcat 源码分析
Tomcat源码分析——Session管理分析(下) Tomcat源码分析——Session管理分析(上) Tomcat源码分析——请求原理分析(下) Tomcat源码分析——请 ...
- Java多线程和并发基础
第一:Java多线程面试问题 1:进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运 ...
- 利用U盘进行软件加密的方法
利用U盘进行软件加密的方法 一般的U盘不具备加密的功能,虽然U盘和加密狗外形有一些相似,但是内部完全不一样的,U盘只是一个存储器芯片和简单的附属电路,而现在的智能卡加密狗都具有一个单独的CPU或者加密 ...
- redis使用日志(3):如何设置持久化
Redis 持久化 Redis虽然是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 工作目录 ...
- iOS网络_优化请求性能
iOS网络_优化请求性能 一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以 描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所 ...