[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
- Previous message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/AT45DB/tests Makefile,
NONE, 1.1 RandRW.nc, NONE, 1.1 RandRWC.nc, NONE, 1.1
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/Drain Drain.h, 1.7,
1.8 DrainLinkEstM.nc, 1.11, 1.12 DrainM.nc, 1.10, 1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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
};
- Previous message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/AT45DB/tests Makefile,
NONE, 1.1 RandRW.nc, NONE, 1.1 RandRWC.nc, NONE, 1.1
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/Drain Drain.h, 1.7,
1.8 DrainLinkEstM.nc, 1.11, 1.12 DrainM.nc, 1.10, 1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-beta-commits
mailing list