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

📄 cc1000rssip.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
/* $Id: CC1000RssiP.nc,v 1.6 2007/02/08 17:52:33 idgay Exp $ * "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) 2002-2005 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE      * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,  * 94704.  Attention:  Intel License Inquiry. *//** *   RSSI fun. It's used for lots of things, and a request to read it *   for one purpose may have to be discarded if conditions change. For *   example, if we've initiated a noise-floor measure, but start  *   receiving a packet, we have to:<ul> *   <li>cancel the noise-floor measure (we don't know if the value will *     reflect the received packet or the previous idle state) *   <li>start an RSSI measurement so that we can report signal strength *     to the application *   </ul><p> *   This module hides the complexities of cancellation from the rest of *   the stack. */module CC1000RssiP{  provides {    interface ReadNow<uint16_t> as Rssi[uint8_t reason];    async command void cancel();  }  uses {    interface Resource;    interface ReadNow<uint16_t> as ActualRssi;  }}implementation{  enum {    IDLE = unique(UQ_CC1000_RSSI),    CANCELLED = unique(UQ_CC1000_RSSI)  };  /* All commands are called within atomic sections */  uint8_t currentOp = IDLE;  uint8_t nextOp;  async command void cancel() {    if (currentOp != IDLE)      currentOp = CANCELLED;  }  event void Resource.granted() {    call ActualRssi.read();  }  async command error_t Rssi.read[uint8_t reason]() {    if (currentOp == IDLE)      {	currentOp = reason;	if (call Resource.immediateRequest() == SUCCESS)	  call ActualRssi.read();	else	  call Resource.request();      }    else      nextOp = reason;    return SUCCESS;  }  void startNextOp() {    currentOp = nextOp;    if (nextOp != IDLE)      {	nextOp = IDLE;	call ActualRssi.read();      }    else      call Resource.release();  }  async event void ActualRssi.readDone(error_t result, uint16_t data) {    atomic      {	/* The RSSI measurements are assumed to be 10-bits */	signal Rssi.readDone[currentOp](result, data);	startNextOp();      }  }  default async event void Rssi.readDone[uint8_t reason](error_t result, uint16_t data) { }}

⌨️ 快捷键说明

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