]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Added the ActiveMessageAddress interface, letting components know when address and...
authorrincon <rincon>
Wed, 13 Jun 2007 20:45:29 +0000 (20:45 +0000)
committerrincon <rincon>
Wed, 13 Jun 2007 20:45:29 +0000 (20:45 +0000)
tos/interfaces/ActiveMessageAddress.nc [new file with mode: 0644]
tos/system/ActiveMessageAddressC.nc

diff --git a/tos/interfaces/ActiveMessageAddress.nc b/tos/interfaces/ActiveMessageAddress.nc
new file mode 100644 (file)
index 0000000..7d43d7f
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2005-2006 Rincon Research Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the
+ *   distribution.
+ * - Neither the name of the Rincon Research Corporation nor the names of
+ *   its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
+ * RINCON RESEARCH OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE
+ */
+
+/**
+ * @author Phil Levis
+ * @author David Moss
+ */
+interface ActiveMessageAddress {
+  /**
+   * @return the active message address of this node
+   */
+  async command am_addr_t amAddress();
+  
+  /**
+   * Set the active message address of this node
+   * @param addr The target active message address
+   */
+  async command void setAmAddress(am_addr_t addr);
+  
+  /**
+   * @return the group address of this node
+   */
+  async command am_group_t amGroup();
+  
+  /**
+   * Set the group address of this node
+   * @param group The group address
+   */
+  async command void setAmGroup(am_group_t group);
+  
+  
+  /**
+   * Notification that the address or group settings changed.
+   */
+  async event void changed();
+  
+}
index a6fa6dd64cb3a3b6419f5e7019169e69d6253403..098c26d0a16fd54edec1a26ef9720905c4ef3de3 100644 (file)
  */
 
 /**
- * Component that stores the node's active message address.
+ * Component that stores the node's active message address and group ID.
  *
  * @author Philip Levis
- * @date June 19 2005
+ * @author David Moss
  */
 
 module ActiveMessageAddressC  {
-  provides async command am_addr_t amAddress();
-  provides async command void setAmAddress(am_addr_t a);
+  provides {
+    interface ActiveMessageAddress;
+    async command am_addr_t amAddress();
+    async command void setAmAddress(am_addr_t a);
+  }
 }
 implementation {
+
+  /** Node address */
   am_addr_t addr = TOS_AM_ADDRESS;
 
+  /** Group address */
+  am_group_t group = TOS_AM_GROUP;
+  
+  /***************** ActiveMessageAddress Commands ****************/
+  /**
+   * @return the active message address of this node
+   */
+  async command am_addr_t ActiveMessageAddress.amAddress() {
+    return call amAddress();
+  }
+  
+  /**
+   * Set the active message address of this node
+   * @param a The target active message address
+   */
+  async command void ActiveMessageAddress.setAmAddress(am_addr_t a) {
+    call setAmAddress(a);
+  }
+  
+    
+  /**
+   * @return the group address of this node
+   */
+  async command am_group_t ActiveMessageAddress.amGroup() {
+    return group;
+  }
+  
+  /**
+   * Set the group address of this node
+   * @param group The group address
+   */
+  async command void ActiveMessageAddress.setAmGroup(am_group_t myGroup) {
+    group = myGroup;
+    signal ActiveMessageAddress.changed();
+  }
+
+  /***************** Deprecated Commands ****************/
   /**
    * Get the node's default AM address.
    * @return address
+   * @deprecated Use ActiveMessageAddress.amAddress() instead
    */
   async command am_addr_t amAddress() {
     return addr;
@@ -57,8 +101,19 @@ implementation {
    * Set the node's default AM address.
    *
    * @param a - the address.
+   * @deprecated Use ActiveMessageAddress.setAmAddress() instead
    */
   async command void setAmAddress(am_addr_t a) {
     addr = a;
+    signal ActiveMessageAddress.changed();
   }
+  
+  
+  /***************** Defaults ****************/
+  /**
+   * Notification that the address of this node changed.
+   */
+  default async event void ActiveMessageAddress.changed() {
+  }
+  
 }