[Tinyos-beta-commits] CVS: tinyos-1.x/beta/AT45DB BlockRead.nc, 1.1, 1.2 BlockStorageM.nc, 1.3, 1.4 BlockWrite.nc, 1.1, 1.2 Mount.nc, 1.1, 1.2 Storage.h, 1.1, 1.2

David Gay idgay at users.sourceforge.net
Mon Jun 6 17:30:27 PDT 2005


Update of /cvsroot/tinyos/tinyos-1.x/beta/AT45DB
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27201

Modified Files:
	BlockRead.nc BlockStorageM.nc BlockWrite.nc Mount.nc Storage.h 
Log Message:
block storage for at45db
still need volume management
test code triggers scheduler bug


Index: BlockRead.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/AT45DB/BlockRead.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** BlockRead.nc	22 Jan 2005 00:26:30 -0000	1.1
--- BlockRead.nc	7 Jun 2005 00:30:23 -0000	1.2
***************
*** 1,6 ****
  // $Id$
  
! /*									tab:4
!  * "Copyright (c) 2000-2004 The Regents of the University  of California.  
   * All rights reserved.
   *
--- 1,6 ----
  // $Id$
  
! /*									tab:2
!  * "Copyright (c) 2000-2005 The Regents of the University  of California.  
   * All rights reserved.
   *
***************
*** 29,39 ****
  
  interface BlockRead {
!   command result_t read(block_addr_t addr, uint8_t* buf, block_addr_t len);
!   event   result_t readDone(result_t result);
  
    command result_t verify();
!   event   result_t verifyDone(result_t result);
  
    command result_t computeCrc(block_addr_t addr, block_addr_t len);
!   event result_t computeCrcDone(result_t result, uint16_t crc);
  }
--- 29,43 ----
  
  interface BlockRead {
! 
!   command result_t read(block_addr_t addr, void* buf, block_addr_t len);
!   event void readDone(storage_result_t result, block_addr_t addr, void* buf, block_addr_t len);
  
    command result_t verify();
!   event void verifyDone(storage_result_t result);
  
    command result_t computeCrc(block_addr_t addr, block_addr_t len);
!   event void computeCrcDone(storage_result_t result, uint16_t crc, block_addr_t addr, block_addr_t len);
! 
!   command block_addr_t getSize();
! 
  }

Index: BlockStorageM.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/AT45DB/BlockStorageM.nc,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** BlockStorageM.nc	4 Jun 2005 00:04:34 -0000	1.3
--- BlockStorageM.nc	7 Jun 2005 00:30:23 -0000	1.4
***************
*** 50,54 ****
      S_COMMIT, S_COMMIT2, S_COMMIT3,
      S_READ,
!     S_VERIFY,
      S_CRC,
    };
--- 50,54 ----
      S_COMMIT, S_COMMIT2, S_COMMIT3,
      S_READ,
!     S_VERIFY, S_VERIFY2,
      S_CRC,
    };
***************
*** 59,81 ****
    uint8_t* bufPtr;
    block_addr_t curAddr;
!   block_addr_t bytesRemaining;
    uint16_t crc;
    block_addr_t maxAddr[uniqueCount("StorageManager")];
  
    void commitSignature();
    void commitSync();
  
!   result_t actualSignal(result_t result) {
      uint8_t tmpState = state;
  
      state = S_IDLE;
      switch(tmpState)
        {
!       case S_READ: return signal BlockRead.readDone[client](result);
!       case S_WRITE: return signal BlockWrite.writeDone[client](result);
!       case S_ERASE: return signal BlockWrite.eraseDone[client](result);
!       case S_CRC: return signal BlockRead.computeCrcDone[client](result, crc);
        case S_COMMIT: case S_COMMIT2: case S_COMMIT3:
! 	return signal BlockWrite.commitDone[client](result);
        }
  
--- 59,100 ----
    uint8_t* bufPtr;
    block_addr_t curAddr;
!   block_addr_t bytesRemaining, requestedLength;
    uint16_t crc;
    block_addr_t maxAddr[uniqueCount("StorageManager")];
+   uint8_t sig[8];
  
+   void verifySignature();
    void commitSignature();
    void commitSync();
  
!   result_t actualSignal(storage_result_t result) {
      uint8_t tmpState = state;
+     block_addr_t actualLength;
  
      state = S_IDLE;
+     actualLength = requestedLength - bytesRemaining;
+     curAddr -= actualLength;
+     bufPtr -= actualLength;
+ 
      switch(tmpState)
        {
!       case S_READ:
! 	signal BlockRead.readDone[client](result, curAddr, bufPtr, actualLength);
! 	break;
!       case S_WRITE:
! 	signal BlockWrite.writeDone[client](result, curAddr, bufPtr, actualLength);
! 	break;
!       case S_ERASE:
! 	signal BlockWrite.eraseDone[client](result);
! 	break;
!       case S_CRC:
! 	signal BlockRead.computeCrcDone[client](result, crc, curAddr, actualLength);
! 	break;
        case S_COMMIT: case S_COMMIT2: case S_COMMIT3:
! 	signal BlockWrite.commitDone[client](result);
! 	break;
!       case S_VERIFY: case S_VERIFY2: 
! 	signal BlockRead.verifyDone[client](result);
! 	break;
        }
  
***************
*** 83,89 ****
    }
  
!   task void signalSuccess() { actualSignal(SUCCESS); }
    
!   task void signalFail() { actualSignal(FAIL); }
  
    void signalDone(result_t result) {
--- 102,108 ----
    }
  
!   task void signalSuccess() { actualSignal(STORAGE_OK); }
    
!   task void signalFail() { actualSignal(STORAGE_FAIL); }
  
    void signalDone(result_t result) {
***************
*** 93,96 ****
--- 112,122 ----
  	case S_COMMIT: commitSignature(); break;
  	case S_COMMIT2: commitSync(); break;
+ 	case S_VERIFY: verifySignature(); break;
+ 	case S_VERIFY2: 
+ 	  if (crc == (sig[0] | (uint16_t)sig[1] << 8))
+ 	    actualSignal(STORAGE_OK);
+ 	  else
+ 	    actualSignal(STORAGE_INVALID_CRC);
+ 	  break;
  	default: post signalSuccess(); break;
  	}
***************
*** 140,144 ****
  	check(call HALAT45DB.read[client](page, offset, buf, count));
  	break;
!       case S_CRC: case S_COMMIT:
  	check(call HALAT45DB.computeCrc[client](page, offset, count));
  	break;
--- 166,170 ----
  	check(call HALAT45DB.read[client](page, offset, buf, count));
  	break;
!       case S_CRC: case S_COMMIT: case S_VERIFY2:
  	check(call HALAT45DB.computeCrc[client](page, offset, count));
  	break;
***************
*** 153,157 ****
      curAddr = addr;
      bufPtr = buf;
!     bytesRemaining = len;
      crc = 0;
  
--- 179,183 ----
      curAddr = addr;
      bufPtr = buf;
!     bytesRemaining = requestedLength = len;
      crc = 0;
  
***************
*** 161,165 ****
    }
  
!   command result_t BlockWrite.write[uint8_t id](block_addr_t addr, uint8_t* buf, block_addr_t len) {
      result_t ok = newRequest(S_WRITE, id, addr, buf, len);
  
--- 187,191 ----
    }
  
!   command result_t BlockWrite.write[uint8_t id](block_addr_t addr, void* buf, block_addr_t len) {
      result_t ok = newRequest(S_WRITE, id, addr, buf, len);
  
***************
*** 185,212 ****
    /* Called once crc computed. Write crc + signature in block 0. */
    void commitSignature() {
-     static uint8_t sig[4];
- 
      sig[0] = crc;
      sig[1] = crc >> 8;
!     sig[2] = 0xb1; /* block sig: b10c */
!     sig[3] = 0x0c;
      state = S_COMMIT2;
!     /* Note: bytesRemaining is 0, so multipageDone will got straight to
         signalDone */
!     check(call HALAT45DB.write[client](0, 1 << AT45_PAGE_SIZE_LOG2, sig, 4));
    }
  
    /* Called once signature written. Ensure writes complete. */
!   void commitSunc() {
      state = S_COMMIT3;
      check(call HALAT45DB.syncAll[client]());
    }
  
!   command result_t BlockRead.read[uint8_t id](block_addr_t addr, uint8_t* buf, block_addr_t len) {
      return newRequest(S_READ, id, addr, buf, len);
    }
  
    command result_t BlockRead.verify[uint8_t id]() {
!     return FAIL;
    }
  
--- 211,262 ----
    /* Called once crc computed. Write crc + signature in block 0. */
    void commitSignature() {
      sig[0] = crc;
      sig[1] = crc >> 8;
!     sig[2] = maxAddr[client];
!     sig[3] = maxAddr[client] >> 8;
!     sig[4] = maxAddr[client] >> 16;
!     sig[5] = maxAddr[client] >> 24;
!     sig[6] = 0xb1; /* block sig: b10c */
!     sig[7] = 0x0c;
      state = S_COMMIT2;
!     /* Note: bytesRemaining is 0, so multipageDone will go straight to
         signalDone */
!     check(call HALAT45DB.write[client](0, 1 << AT45_PAGE_SIZE_LOG2, sig, sizeof sig));
    }
  
    /* Called once signature written. Ensure writes complete. */
!   void commitSync() {
      state = S_COMMIT3;
      check(call HALAT45DB.syncAll[client]());
    }
  
!   command uint32_t BlockRead.getSize[blockstorage_t blockId]() {
!     return 0;//call StorageManager.getVolumeSize[blockId]();
!   }
! 
!   command result_t BlockRead.read[uint8_t id](block_addr_t addr, void* buf, block_addr_t len) {
      return newRequest(S_READ, id, addr, buf, len);
    }
  
    command result_t BlockRead.verify[uint8_t id]() {
!     if (admitRequest(S_VERIFY, id))
!       {
! 	bytesRemaining = 0;
! 	check(call HALAT45DB.read[client](0, 1 << AT45_PAGE_SIZE_LOG2, sig, sizeof sig));
!       }
!     return SUCCESS;
!   }
! 
!   /* See commitSignature */
!   void verifySignature() {
!     if (sig[6] == 0xb1 && sig[7] == 0x0c)
!       {
! 	maxAddr[client] = sig[2] | (uint32_t)sig[3] << 8 |
! 	  (uint32_t)sig[4] << 16 | (uint32_t)sig[5] << 24;
! 	state = S_IDLE;
! 	newRequest(S_VERIFY2, client, 0, NULL, maxAddr[client]);
!       }
!     else
!       actualSignal(STORAGE_INVALID_SIGNATURE);
    }
  
***************
*** 220,223 ****
--- 270,274 ----
      else
        continueRequest();
+     return SUCCESS;
    }
  
***************
*** 249,258 ****
    }
  
!   default event result_t BlockWrite.writeDone[uint8_t id](result_t result) { return SUCCESS; }
!   default event result_t BlockWrite.eraseDone[uint8_t id](result_t result) { return SUCCESS; }
!   default event result_t BlockWrite.commitDone[uint8_t id](result_t result) { return SUCCESS; }
!   default event result_t BlockRead.readDone[uint8_t id](result_t result) { return SUCCESS; }
!   default event result_t BlockRead.verifyDone[uint8_t id](result_t result) { return SUCCESS; }
!   default event result_t BlockRead.computeCrcDone[uint8_t id](result_t result, uint16_t crcResult) { return SUCCESS; }
  
    command result_t Mount.mount[blockstorage_t blockId](volume_id_t id) {
--- 300,309 ----
    }
  
!   default event void BlockWrite.writeDone[uint8_t id](storage_result_t result, block_addr_t addr, void* buf, block_addr_t len) { }
!   default event void BlockWrite.eraseDone[uint8_t id](storage_result_t result) { }
!   default event void BlockWrite.commitDone[uint8_t id](result_t result) { }
!   default event void BlockRead.readDone[uint8_t id](storage_result_t result, block_addr_t addr, void* buf, block_addr_t len) { }
!   default event void BlockRead.verifyDone[uint8_t id](result_t result) { }
!   default event void BlockRead.computeCrcDone[uint8_t id](storage_result_t result, uint16_t x, block_addr_t addr, block_addr_t len) { }
  
    command result_t Mount.mount[blockstorage_t blockId](volume_id_t id) {
***************
*** 262,266 ****
  
    event void ActualMount.mountDone[blockstorage_t blockId](storage_result_t result, volume_id_t id) {
!     return signal Mount.mountDone[blockId](result, id);
    }
  }
--- 313,320 ----
  
    event void ActualMount.mountDone[blockstorage_t blockId](storage_result_t result, volume_id_t id) {
!     signal Mount.mountDone[blockId](result, id);
!   }
! 
!   default event void Mount.mountDone[blockstorage_t blockId](storage_result_t result, volume_id_t id) {
    }
  }

Index: BlockWrite.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/AT45DB/BlockWrite.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** BlockWrite.nc	22 Jan 2005 00:26:30 -0000	1.1
--- BlockWrite.nc	7 Jun 2005 00:30:23 -0000	1.2
***************
*** 2,6 ****
  
  /*									tab:4
!  * "Copyright (c) 2000-2004 The Regents of the University  of California.  
   * All rights reserved.
   *
--- 2,6 ----
  
  /*									tab:4
!  * "Copyright (c) 2000-2005 The Regents of the University  of California.  
   * All rights reserved.
   *
***************
*** 29,39 ****
  
  interface BlockWrite {
!   command result_t write(block_addr_t addr, uint8_t* buf, block_addr_t len);
!   event result_t writeDone(result_t result);
  
    command result_t erase();
!   event result_t eraseDone(result_t result);
  
    command result_t commit();
!   event result_t commitDone(result_t result);
  }
--- 29,41 ----
  
  interface BlockWrite {
! 
!   command result_t write(block_addr_t addr, void* buf, block_addr_t len);
!   event void writeDone(storage_result_t result, block_addr_t addr, void* buf, block_addr_t len);
  
    command result_t erase();
!   event void eraseDone(storage_result_t result);
  
    command result_t commit();
!   event void commitDone(storage_result_t result);
! 
  }

Index: Mount.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/AT45DB/Mount.nc,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Mount.nc	2 Feb 2005 22:56:40 -0000	1.1
--- Mount.nc	7 Jun 2005 00:30:23 -0000	1.2
***************
*** 1,5 ****
  includes Storage;
! interface Mount 
! {
    command result_t mount(volume_id_t id);
    event void mountDone(storage_result_t result, volume_id_t id);
--- 1,32 ----
+ // $Id$
+ 
+ /*									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>
+  */
+ 
  includes Storage;
! 
! interface Mount {
    command result_t mount(volume_id_t id);
    event void mountDone(storage_result_t result, volume_id_t id);

Index: Storage.h
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/AT45DB/Storage.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** Storage.h	4 Jun 2005 00:04:34 -0000	1.1
--- Storage.h	7 Jun 2005 00:30:23 -0000	1.2
***************
*** 32,35 ****
--- 32,37 ----
    STORAGE_OK,
    STORAGE_FAIL,
+   STORAGE_INVALID_SIGNATURE,
+   STORAGE_INVALID_CRC
  };
  



More information about the Tinyos-beta-commits mailing list