From 11c90104bc30d39dd70605809fd4a36f3f7bae6d Mon Sep 17 00:00:00 2001 From: sallai Date: Thu, 24 Jan 2008 20:43:55 +0000 Subject: [PATCH] added iris support for deluge --- tos/lib/TOSBoot/iris/HardwareC.nc | 77 +++++++++++++ tos/lib/TOSBoot/iris/ProgFlashM.nc | 65 +++++++++++ tos/lib/TOSBoot/iris/VoltageC.nc | 79 ++++++++++++++ .../BlockStorageManagerC.nc | 6 +- .../BlockStorageManagerP.nc | 8 +- tos/lib/net/Deluge/DelugePageTransfer.h | 8 +- tos/lib/net/Deluge/extra/iris/NetProgC.nc | 56 ++++++++++ tos/lib/net/Deluge/extra/iris/NetProgM.nc | 102 ++++++++++++++++++ 8 files changed, 393 insertions(+), 8 deletions(-) create mode 100644 tos/lib/TOSBoot/iris/HardwareC.nc create mode 100644 tos/lib/TOSBoot/iris/ProgFlashM.nc create mode 100644 tos/lib/TOSBoot/iris/VoltageC.nc create mode 100644 tos/lib/net/Deluge/extra/iris/NetProgC.nc create mode 100644 tos/lib/net/Deluge/extra/iris/NetProgM.nc diff --git a/tos/lib/TOSBoot/iris/HardwareC.nc b/tos/lib/TOSBoot/iris/HardwareC.nc new file mode 100644 index 00000000..c0c3baa8 --- /dev/null +++ b/tos/lib/TOSBoot/iris/HardwareC.nc @@ -0,0 +1,77 @@ +// $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." + * + */ + +/* + * Copyright (c) 2007, Vanderbilt University + * 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 VANDERBILT UNIVERSITY 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 VANDERBILT + * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE VANDERBILT UNIVERSITY 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 VANDERBILT UNIVERSITY HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + */ + +/** + * @author Jonathan Hui + * @author Janos Sallai + */ + +#include + +module HardwareC { + provides { + interface Hardware; + } +} + +implementation { + + command void Hardware.init() { + // disable watchdog (if accidentally left on) + MCUSR = 0; + wdt_disable(); + } + + command void Hardware.reboot() { + // enable watchdog + wdt_enable(WDTO_1S); + // enter infinite loop + while(1); + } + +} diff --git a/tos/lib/TOSBoot/iris/ProgFlashM.nc b/tos/lib/TOSBoot/iris/ProgFlashM.nc new file mode 100644 index 00000000..75cfd71e --- /dev/null +++ b/tos/lib/TOSBoot/iris/ProgFlashM.nc @@ -0,0 +1,65 @@ +// $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 + */ +#include + +module ProgFlashM { + provides { + interface ProgFlash; + } +} + +implementation { + + + command error_t ProgFlash.write(in_flash_addr_t addr, uint8_t* buf, in_flash_addr_t len) { + + uint16_t* wordBuf = (uint16_t*)buf; + uint32_t i; + + if ( addr + len > TOSBOOT_START ) + return FAIL; + + boot_page_erase( addr ); + while( boot_rww_busy() ) + boot_rww_enable(); + + for ( i = 0; i < len; i += 2 ) + boot_page_fill( addr + i, *wordBuf++ ); + + boot_page_write( addr ); + + while ( boot_rww_busy() ) + boot_rww_enable(); + + return SUCCESS; + + } + +} diff --git a/tos/lib/TOSBoot/iris/VoltageC.nc b/tos/lib/TOSBoot/iris/VoltageC.nc new file mode 100644 index 00000000..ee528708 --- /dev/null +++ b/tos/lib/TOSBoot/iris/VoltageC.nc @@ -0,0 +1,79 @@ +// $Id$ + +/* tab:2 + * + * + * "Copyright (c) 2000-2004 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." + * + */ + +/* + * Copyright (c) 2007, Vanderbilt University + * 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 VANDERBILT UNIVERSITY 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 VANDERBILT + * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE VANDERBILT UNIVERSITY 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 VANDERBILT UNIVERSITY HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + */ + +/** + * @author Jonathan Hui + * @author Janos Sallai + */ + +module VoltageC { + provides { + interface Voltage; + } +} + +implementation { + + command bool Voltage.okToProgram() { + // 250 KHz ADC clock (4MHz/16) + outp( 0x04, ADCSRA ); + // clear interrupt flag by writing a 1 + sbi( ADCSRA, ADIF ); + // setup input channel + outp( VOLTAGE_PORT, ADMUX ); + // adc enable + sbi( ADCSRA, ADEN ); + // adc start conversion + sbi( ADCSRA, ADSC ); + // wait for conversion to complete + while ( !bit_is_set( ADCSRA, ADIF ) ); + + return ( __inw(ADCL) < VTHRESH ); + } + +} diff --git a/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerC.nc b/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerC.nc index 68714cfd..5feb3031 100644 --- a/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerC.nc +++ b/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerC.nc @@ -41,9 +41,9 @@ implementation enum { NUM_CLIENTS = uniqueCount(UQ_BSTORAGEM_CLIENT) }; - + components new BlockStorageManagerP(NUM_CLIENTS); - + BlockRead = BlockStorageManagerP; BlockWrite = BlockStorageManagerP; VolumeId = BlockStorageManagerP; @@ -69,7 +69,7 @@ implementation BlockStorageManagerP.SubStorageMap[VOLUME_DELUGE1] -> BlockStorageC_1; BlockStorageManagerP.SubStorageMap[VOLUME_DELUGE2] -> BlockStorageC_2; BlockStorageManagerP.SubStorageMap[VOLUME_DELUGE3] -> BlockStorageC_3; -#elif defined(PLATFORM_MICAZ) +#elif defined(PLATFORM_MICAZ) || defined(PLATFORM_IRIS) components At45dbStorageManagerC; BlockStorageManagerP.At45dbVolume -> At45dbStorageManagerC; #endif diff --git a/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerP.nc b/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerP.nc index c171a25c..9fbd9e40 100644 --- a/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerP.nc +++ b/tos/lib/net/Deluge/BlockStorageManager/BlockStorageManagerP.nc @@ -37,7 +37,7 @@ generic module BlockStorageManagerP(uint8_t clients) interface VolumeId[uint8_t client]; #if defined(PLATFORM_TELOSB) interface StorageMap as SubStorageMap[volume_id_t volume_id]; -#elif defined(PLATFORM_MICAZ) +#elif defined(PLATFORM_MICAZ) || defined(PLATFORM_IRIS) interface At45dbVolume[volume_id_t volume_id]; #endif } @@ -186,6 +186,12 @@ implementation p_addr = page; p_addr = p_addr << AT45_PAGE_SIZE_LOG2; p_addr += offset; +#elif defined(PLATFORM_IRIS) + at45page_t page = call At45dbVolume.remap[volume_id]((addr >> AT45_PAGE_SIZE_LOG2)); + at45pageoffset_t offset = addr & ((1 << AT45_PAGE_SIZE_LOG2) - 1); + p_addr = page; + p_addr = p_addr << AT45_PAGE_SIZE_LOG2; + p_addr += offset; #endif return p_addr; } diff --git a/tos/lib/net/Deluge/DelugePageTransfer.h b/tos/lib/net/Deluge/DelugePageTransfer.h index e640de4d..1edc880a 100644 --- a/tos/lib/net/Deluge/DelugePageTransfer.h +++ b/tos/lib/net/Deluge/DelugePageTransfer.h @@ -1,17 +1,17 @@ /* - * "Copyright (c) 2000-2004 The Regents of the University of California. + * "Copyright (c) 2000-2004 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 @@ -33,7 +33,7 @@ #if defined(PLATFORM_TELOSB) #include "extra/telosb/TOSBoot_platform.h" -#elif defined(PLATFORM_MICAZ) +#elif defined(PLATFORM_MICAZ) || defined(PLATFORM_IRIS) #include "extra/micaz/TOSBoot_platform.h" #else #error "Target platform is not currently supported by Deluge T2" diff --git a/tos/lib/net/Deluge/extra/iris/NetProgC.nc b/tos/lib/net/Deluge/extra/iris/NetProgC.nc new file mode 100644 index 00000000..1d785b43 --- /dev/null +++ b/tos/lib/net/Deluge/extra/iris/NetProgC.nc @@ -0,0 +1,56 @@ +/* + * "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." + * + * Copyright (c) 2007 Johns Hopkins University. + * All rights reserved. + * + */ + +/** + * @author Jonathan Hui + * @author Chieh-Jan Mike Liang + * @author Razvan Musaloiu-E. + */ + +includes NetProg; +includes TOSBoot; + +configuration NetProgC { + provides { + interface NetProg; + } +} + +implementation { + + components MainC, InternalFlashC as IFlash, CrcP, NetProgM; + + NetProg = NetProgM; + + MainC.SoftwareInit -> NetProgM.Init; + NetProgM.IFlash -> IFlash; + NetProgM.Crc -> CrcP; + + components LedsC; + NetProgM.Leds -> LedsC; + + components ActiveMessageAddressC; + NetProgM.setAmAddress -> ActiveMessageAddressC; +} diff --git a/tos/lib/net/Deluge/extra/iris/NetProgM.nc b/tos/lib/net/Deluge/extra/iris/NetProgM.nc new file mode 100644 index 00000000..c9d0ab63 --- /dev/null +++ b/tos/lib/net/Deluge/extra/iris/NetProgM.nc @@ -0,0 +1,102 @@ +/* + * "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." + * + * Copyright (c) 2007 Johns Hopkins University. + * All rights reserved. + * + */ + +/** + * @author Jonathan Hui + * @author Razvan Musaloiu-E. + * @author Chieh-Jan Mike Liang + */ + +#include "AM.h" + +module NetProgM { + provides { + interface NetProg; + interface Init; + } + uses { + interface InternalFlash as IFlash; + interface Crc; + interface Leds; + async command void setAmAddress(am_addr_t a); + } +} + +implementation { + + command error_t Init.init() + { + BootArgs bootArgs; + call IFlash.read((uint8_t*)TOSBOOT_ARGS_ADDR, &bootArgs, sizeof(bootArgs)); + + // Update the local node ID + if (bootArgs.address != 0xFFFF) { + TOS_NODE_ID = bootArgs.address; + call setAmAddress(bootArgs.address); + } + + return SUCCESS; + } + + command error_t NetProg.reboot() + { + BootArgs bootArgs; + + atomic { + call IFlash.read((uint8_t*)TOSBOOT_ARGS_ADDR, &bootArgs, sizeof(bootArgs)); + + if (bootArgs.address != TOS_NODE_ID) { + bootArgs.address = TOS_NODE_ID; + call IFlash.write((uint8_t*)TOSBOOT_ARGS_ADDR, &bootArgs, sizeof(bootArgs)); + } + netprog_reboot(); + } + + return FAIL; + } + + command error_t NetProg.programImageAndReboot(uint32_t imgAddr) + { + BootArgs bootArgs; + + atomic { + call IFlash.read((uint8_t*)TOSBOOT_ARGS_ADDR, &bootArgs, sizeof(bootArgs)); + + bootArgs.imageAddr = imgAddr; + bootArgs.gestureCount = 0xff; + bootArgs.noReprogram = FALSE; + bootArgs.address = TOS_NODE_ID; + + call IFlash.write((uint8_t*)TOSBOOT_ARGS_ADDR, &bootArgs, sizeof(bootArgs)); + + // reboot + netprog_reboot(); + } + + // couldn't reboot + return FAIL; + } + +} -- 2.39.2