📄 mhpacketm.nc
字号:
/* * Copyright (c) 2007 Romain Thouvenin <romain.thouvenin@gmail.com> * Published under the terms of the GNU General Public License (GPLv2). */#include "mhpacket.h"#define HEADER ((mhpacket_header_t *)(call SubPacket.getPayload(amsg, call SubPacket.maxPayloadLength())))/** * MHPacketM - Implements ActiveMessage on top of ActiveMessage, * to transport data in a multihop network. * * @author Romain Thouvenin */module MHPacketM { provides { interface Packet; interface AMPacket as MHPacket; } uses { interface Packet as SubPacket; interface AMPacket; }}implementation { /********** * Packet * **********/ command void Packet.clear(message_t *msg){ call SubPacket.clear(msg); } command void * Packet.getPayload(message_t *msg, uint8_t len){ nx_uint8_t * p = call SubPacket.getPayload(msg, len); return (void *)(p + sizeof(mhpacket_header_t)); } command uint8_t Packet.maxPayloadLength(){ return call SubPacket.maxPayloadLength() - sizeof(mhpacket_header_t); } command uint8_t Packet.payloadLength(message_t *amsg){ return HEADER->len; } command void Packet.setPayloadLength(message_t *amsg, uint8_t len){ HEADER->len = len; call SubPacket.setPayloadLength(amsg, len + sizeof(mhpacket_header_t)); } /********** * AMPacket * **********/ command am_addr_t MHPacket.address(){ return call AMPacket.address(); } command am_addr_t MHPacket.destination(message_t *amsg){ return HEADER->dest; } command bool MHPacket.isForMe(message_t *amsg){ return ((HEADER->dest == call MHPacket.address()) || (HEADER->dest == AM_BROADCAST_ADDR)); } command void MHPacket.setDestination(message_t *amsg, am_addr_t addr){ HEADER->dest = addr; } command void MHPacket.setSource(message_t *amsg, am_addr_t addr){ HEADER->src = addr; } command void MHPacket.setType(message_t *amsg, am_id_t t){ HEADER->type = t; call AMPacket.setType(amsg, AM_MULTIHOP); } command am_addr_t MHPacket.source(message_t *amsg){ return HEADER->src; } command am_id_t MHPacket.type(message_t *amsg){ return HEADER->type; } /* *** UNIMPLEMENTED ! *** */ //TODO what to do with this? command am_group_t MHPacket.group(message_t* amsg) { return 0; } command void MHPacket.setGroup(message_t* amsg, am_group_t grp) { } command am_group_t MHPacket.localGroup() { return 0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -