⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mhpacketm.nc

📁 tinyos-2.x.rar
💻 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 + sizeof(mhpacket_header_t));
    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 + -