⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fakeblockwriterp.nc

📁 tinyos-2.x.rar
💻 NC
字号:
/* Copyright (c) 2007 Johns Hopkins 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 (updated) modification history and the author appear in
*  all copies of this source code.
*
*  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 COPYRIGHT HOLDERS OR CONTRIBUTORS
*  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
*  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,
*  OR PROFITS) 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 Chieh-Jan Mike Liang <cliang4@cs.jhu.edu>
 * @author Razvan Musaloiu-E. <razvanm@cs.jhu.edu>
 */

generic module FakeBlockWriterP(uint32_t size)
{
  provides interface BlockWrite;
  uses interface Leds;
}

implementation
{
  enum {
    S_IDLE,
    S_BUSY
  };
  
  storage_addr_t saddr;
  uint8_t *oribuf;
  uint8_t *sbuf;
  storage_len_t slen;
  uint8_t state;
  
  task void task_write()
  {
    error_t error = SUCCESS;
    
    while (slen > 0) {
      if (*sbuf != (saddr & 0xFF)) {
        error = FAIL;
call Leds.led2Toggle();
      }
      saddr++;
      sbuf++;
      slen--;
    }
    
    signal BlockWrite.writeDone(saddr, oribuf, slen, error);
    state = S_IDLE;
  }
  
  command error_t BlockWrite.write(storage_addr_t addr,
				   void* buf,
				   storage_len_t len)
  {
    if (state != S_IDLE) {
      return FAIL;
    }
    
    state = S_BUSY;
    saddr = addr;
    sbuf = buf;
    oribuf = buf;
    slen = len;
    post task_write();
    return SUCCESS;
  }
  
  task void task_erase()
  {
    signal BlockWrite.eraseDone(SUCCESS);
  }
  
  command error_t BlockWrite.erase()
  {
    post task_erase();
    return SUCCESS;
  }
  
  task void task_sync()
  {
    signal BlockWrite.syncDone(SUCCESS);
  }
  
  command error_t BlockWrite.sync()
  {
    post task_sync();
    return SUCCESS;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -