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

📄 simmotep.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
/* * "Copyright (c) 2005 Stanford 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 STANFORD 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 STANFORD UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. *  * STANFORD 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 STANFORD UNIVERSITY * HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, * ENHANCEMENTS, OR MODIFICATIONS." *//** * The TOSSIM abstraction of a mote. By putting simulation state into * a component, we can scale and reference this state automatically * using nesC's rewriting, rather than managing and indexing into * arrays manually. * * @author Phil Levis * @date   August 19 2005 */// $Id: SimMoteP.nc,v 1.5 2007/10/08 20:10:09 idgay Exp $module SimMoteP {  provides interface SimMote;}implementation {  long long int euid;  long long int startTime;  bool isOn;  sim_event_t* bootEvent;    async command long long int SimMote.getEuid() {    return euid;  }  async command void SimMote.setEuid(long long int e) {    euid = e;  }  async command long long int SimMote.getStartTime() {    return startTime;  }  async command bool SimMote.isOn() {    return isOn;  }  async command int SimMote.getVariableInfo(char* name, void** addr, size_t* size) {    return __nesc_nido_resolve(sim_node(), name, (uintptr_t*)addr, (size_t*)size);  }  command void SimMote.turnOn() {    if (!isOn) {      if (bootEvent != NULL) {	bootEvent->cancelled = TRUE;      }      __nesc_nido_initialise(sim_node());      startTime = sim_time();      dbg("SimMoteP", "Setting start time to %llu\n", startTime);      isOn = TRUE;      sim_main_start_mote();    }  }  async command void SimMote.turnOff() {    isOn = FALSE;  }    long long int sim_mote_euid(int mote) @C() @spontaneous() {    long long int result;    int tmp = sim_node();    sim_set_node(mote);    result = call SimMote.getEuid();    sim_set_node(tmp);    return result;  }  void sim_mote_set_euid(int mote, long long int id)  @C() @spontaneous() {    int tmp = sim_node();    sim_set_node(mote);    call SimMote.setEuid(id);    sim_set_node(tmp);  }    long long int sim_mote_start_time(int mote) @C() @spontaneous() {    long long int result;    int tmp = sim_node();    sim_set_node(mote);    result = call SimMote.getStartTime();    sim_set_node(tmp);    return result;  }  int sim_mote_get_variable_info(int mote, char* name, void** ptr, size_t* len) @C() @spontaneous() {    int result;    int tmpID = sim_node();    sim_set_node(mote);    result = call SimMote.getVariableInfo(name, ptr, len);    dbg("SimMoteP", "Fetched %s of %i to be %p with len %i (result %i)\n", name, mote, *ptr, *len, result);    sim_set_node(tmpID);    return result;  }    void sim_mote_set_start_time(int mote, long long int t) @C() @spontaneous() {    int tmpID = sim_node();    sim_set_node(mote);    startTime = t;    dbg("SimMoteP", "Setting start time to %llu\n", startTime);    sim_set_node(tmpID);    return;  }    bool sim_mote_is_on(int mote) @C() @spontaneous() {    bool result;    int tmp = sim_node();    sim_set_node(mote);    result = call SimMote.isOn();    sim_set_node(tmp);    return result;  }    void sim_mote_turn_on(int mote) @C() @spontaneous() {    int tmp = sim_node();    sim_set_node(mote);    call SimMote.turnOn();    sim_set_node(tmp);  }    void sim_mote_turn_off(int mote) @C() @spontaneous() {    int tmp = sim_node();    sim_set_node(mote);    call SimMote.turnOff();    sim_set_node(tmp);  }  void sim_mote_boot_handle(sim_event_t* e) {    char buf[128];    sim_print_now(buf, 128);	       bootEvent = (sim_event_t*)NULL;    dbg("SimMoteP", "Turning on mote %i at time %s.\n", (int)sim_node(), buf);    call SimMote.turnOn();  }    void sim_mote_enqueue_boot_event(int mote) @C() @spontaneous() {    int tmp = sim_node();    sim_set_node(mote);    if (bootEvent != NULL)  {      if (bootEvent->time == startTime) {	// In case we have a cancelled boot event.	bootEvent->cancelled = FALSE;	return;      }      else {	bootEvent->cancelled = TRUE;      }    }        bootEvent = (sim_event_t*) malloc(sizeof(sim_event_t));    bootEvent->time = startTime;    bootEvent->mote = mote;    bootEvent->force = TRUE;    bootEvent->data = NULL;    bootEvent->handle = sim_mote_boot_handle;    bootEvent->cleanup = sim_queue_cleanup_event;    sim_queue_insert(bootEvent);        sim_set_node(tmp);  }}

⌨️ 快捷键说明

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