[Tinyos-commits] CVS: tinyos-1.x/tos/lib/RegistryStore README, NONE, 1.1 RegistryStore.nc, NONE, 1.1 RegistryStore.template.h, NONE, 1.1 RegistryStoreC.nc, NONE, 1.1 RegistryStoreM.nc, NONE, 1.1

Kamin Whitehouse kaminw at users.sourceforge.net
Fri Sep 23 03:13:57 PDT 2005


Update of /cvsroot/tinyos/tinyos-1.x/tos/lib/RegistryStore
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4228/RegistryStore

Added Files:
	README RegistryStore.nc RegistryStore.template.h 
	RegistryStoreC.nc RegistryStoreM.nc 
Log Message:
These are 5 new tinyos libraries to: 1) automatically define a namespace of node attributes such as location, sensor values, etc, which is exposed through a central 'registry' 2) store these attributes to flash 3) expand that namespace to attributes of neighbors (hood) 4) expose arbitrary functions, including the get/set functions of registry attributes to other nodes and/or the pc through an rpc interface 5) expose arbitrary module variables through the same rpc interface.  These libraries require code generation and must be used with nesc 1.2 or later. the code generation scripts are in tinyos-1.x/tools/scripts/codeGeneration.

--- NEW FILE: README ---
directory: tinyos-1.x/tos/lib/RegistryStore
author: kamin whitehouse
date: 9/23/05

Please see the following wiki page for documentation:
http://today.cs.berkeley.edu/nestfe/index.php/Registry_Store

--- NEW FILE: RegistryStore.nc ---
// $Id: RegistryStore.nc,v 1.1 2005/09/23 10:13:55 kaminw Exp $

/*									tab:2
 *
 *
 * "Copyright (c) 2000-2005 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */

/**
 * @author Kamin Whitehouse
 * @author Jonathan Hui <jwhui at cs.berkeley.edu>
 */

interface RegistryStore {
  command result_t clearAll();
  command result_t save(uint8_t attr);
  command result_t restore(uint8_t attr);
  command result_t saveAll();
  command result_t restoreAll();
}

--- NEW FILE: RegistryStore.template.h ---
// $Id: RegistryStore.template.h,v 1.1 2005/09/23 10:13:55 kaminw Exp $

/*									tab:2
 *
 *
 * "Copyright (c) 2000-2005 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */

/**
 * @author Jonathan Hui <jwhui at cs.berkeley.edu>
 * @author Kamin Whitehouse
 *
 *    This file defines which Registry Attributes are stored to flash.
 *
 *    A copy of this file should be added to your platform directory
 *    because all applications on a particular platform should use the
 *    same set of RegistryStore attributes, otherwise it will not work
 *    well with multiple Deluge images using the same locations in
 *    flash.
 */


#ifdef __REGISTRY_STORE_H__
  You have more than one RegistryStore.h in your path!!
#else
#define __REGISTRY_STORE_H__

/***********
 * This variable holds maximum size of the RegistryStore
 * Do _NOT_ make this value larger or the registry store will interfere with deluge
 ***********/
enum registryStore{
  REGISTRY_STORE_SIZE = 94,
  NUM_STORED_ATTRS = 2,
};


/***********
 * This variable holds the metadata for attributes stored in flash.
 * Format: {AttributeID, AddressInFlash, SizeInFlash (bytes)}
 *
 * ONLY APPEND!  Do not delete from this variable unless you want to
 * clear the entire RegistryStore before restoring anything.
 ***********/
uint8_t storedAttributes[NUM_STORED_ATTRS][3] = {
  {ATTRIBUTE_LOCATION, 0, 8},
  {ATTRIBUTE_GPS_LOCATION, 8, 8}
}

#endif

--- NEW FILE: RegistryStoreC.nc ---
// $Id: RegistryStoreC.nc,v 1.1 2005/09/23 10:13:55 kaminw Exp $

/*									tab:2
 *
 *
 * "Copyright (c) 2000-2005 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */

/**
 * @author Jonathan Hui <jwhui at cs.berkeley.edu>
 * @author Kamin Whitehouse
 * 
 * This file does not need to be copied into your platform directory,
 * as the RegistryStore.h file does.  However, for convenience this
 * file can be copied as well, and all attributes that are defined to
 * be saved in the the RegistryStore.h file can be declared in this
 * file as well (be using its Attribute interface with the correct
 * type).  That solves the problem that may occur when some
 * applications that use the RegistryStore do not declare all
 * attributes that it stores (which would result in a compiler
 * error).  
 */

configuration RegistryStoreC {
  provides {
    interface RegistryStore @rpc();
  }
}

implementation {
  
  components RegistryStoreM;
  components InternalFlashC;
  components RegistryC;

  RegistryStore = RegistryStoreM;
					    
  RegistryStoreM.InternalFlash -> InternalFlashC;

  RegistryStoreM.AttrBackend -> RegistryC.AttrBackend;
}

--- NEW FILE: RegistryStoreM.nc ---
// $Id: RegistryStoreM.nc,v 1.1 2005/09/23 10:13:55 kaminw Exp $

/*									tab:2
 *
 *
 * "Copyright (c) 2000-2005 The Regents of the University  of California.  
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 * 
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */

/**
 * @author Jonathan Hui <jwhui at cs.berkeley.edu>
 * @author Kamin Whitehouse
 */

includes Registry;
includes RegistryStore;

module RegistryStoreM {
  provides {
    interface RegistryStore;
  }
  uses {
    interface InternalFlash;
    interface AttrBackend[AttrID_t attrID];
  }
}

implementation {

  command result_t RegistryStore.clearAll() {
    uint8_t buf[REGISTRY_STORE_SIZE];
    memset(buf, 0, REGISTRY_STORE_SIZE);
    call InternalFlash.write(0, buf, REGISTRY_STORE_SIZE);
    return SUCCESS;
  }

  command result_t RegistryStore.save(uint8_t attr) {
    void *ptr = (void*)call AttrBackend.get[storedAttributes[attr][0]]();
    if (attr >= NUM_STORED_ATTRS) {
      return 2;
    }
    if (ptr == NULL) {
      return 3;
    }
    return call InternalFlash.write( (void*)storedAttributes[attr][1], 
				     ptr, storedAttributes[attr][2]);
  }

  command result_t RegistryStore.restore(uint8_t attr) {
    /*We must set the attribute first, or it might fail on get.
     This means that if this function returns false, the attribute
    will be reset to value 0.  I think this is Ok.*/
    void* ptr;
    uint8_t buf[REGISTRY_STORE_SIZE];
    memset(buf, 0, REGISTRY_STORE_SIZE);
    call AttrBackend.set[storedAttributes[attr][0]]((void*)(&buf));
    ptr = (void*)call AttrBackend.get[storedAttributes[attr][0]]();
    if (attr >= NUM_STORED_ATTRS || ptr == NULL) {
      return FAIL;
    }
    return call InternalFlash.read( (void*)storedAttributes[attr][1], 
				    ptr, storedAttributes[attr][2]);
  }

  command result_t RegistryStore.saveAll() {
    uint8_t attr;
    for (attr=0; attr < NUM_STORED_ATTRS; attr++) {
      if (call RegistryStore.save(attr) == FAIL){
	return FAIL;
      }
    }
    return SUCCESS;
  }

  command result_t RegistryStore.restoreAll() {
    uint8_t attr;
    for (attr=0; attr < NUM_STORED_ATTRS; attr++) {
      if (call RegistryStore.restore(attr) == FAIL){
	return FAIL;
      }
    }
    return SUCCESS;
  }

  event void AttrBackend.updated[AttrID_t attrID](const void* newval){
  }

   default command uint8_t AttrBackend.size[AttrID_t attrID](){return 0;}
   default command const void* AttrBackend.get[AttrID_t attrID](){return NULL;}
   default command result_t AttrBackend.set[AttrID_t attrID](const void* val){return FAIL;}
   default command result_t AttrBackend.update[AttrID_t attrID](){return FAIL;}

}



More information about the Tinyos-commits mailing list