[Tinyos-2-commits] CVS: tinyos-2.x/apps/tests/mts300/PhotoTemp Makefile, NONE, 1.1 OscilloscopeAppC.nc, NONE, 1.1 OscilloscopeC.nc, NONE, 1.1 README.txt, NONE, 1.1

David Gay idgay at users.sourceforge.net
Wed May 23 16:01:40 PDT 2007


Update of /cvsroot/tinyos/tinyos-2.x/apps/tests/mts300/PhotoTemp
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv18443

Added Files:
	Makefile OscilloscopeAppC.nc OscilloscopeC.nc README.txt 
Log Message:
test code for simultaneous photo and temp sensing


--- NEW FILE: Makefile ---
SENSORBOARD=mts300
COMPONENT=OscilloscopeAppC

include $(MAKERULES)

--- NEW FILE: OscilloscopeAppC.nc ---
/*
 * Copyright (c) 2006 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.
 */

/**
 * Oscilloscope demo application. Uses the demo sensor - change the
 * new DemoSensorC() instantiation if you want something else.
 *
 * See README.txt file in this directory for usage instructions.
 *
 * @author David Gay
 */
configuration OscilloscopeAppC { }
implementation
{
  components OscilloscopeC, MainC, ActiveMessageC, LedsC,
    new TimerMilliC(), new PhotoC() as Sensor1, new TempC() as Sensor2,
    new AMSenderC(AM_OSCILLOSCOPE), new AMReceiverC(AM_OSCILLOSCOPE);

  OscilloscopeC.Boot -> MainC;
  OscilloscopeC.RadioControl -> ActiveMessageC;
  OscilloscopeC.AMSend -> AMSenderC;
  OscilloscopeC.Receive -> AMReceiverC;
  OscilloscopeC.Timer -> TimerMilliC;
  OscilloscopeC.Read1 -> Sensor1;
  OscilloscopeC.Read2 -> Sensor2;
  OscilloscopeC.Leds -> LedsC;

  
}

--- NEW FILE: OscilloscopeC.nc ---
/*
 * Copyright (c) 2006 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.
 */

/**
 * Oscilloscope demo application. See README.txt file in this directory.
 *
 * @author David Gay
 */
#include "Timer.h"
#include "Oscilloscope.h"

module OscilloscopeC
{
  uses {
    interface Boot;
    interface SplitControl as RadioControl;
    interface AMSend;
    interface Receive;
    interface Timer<TMilli>;
    interface Read<uint16_t> as Read1;
    interface Read<uint16_t> as Read2;
    interface Leds;
  }
}
implementation
{
  message_t sendbuf;
  bool sendbusy;

  /* Current local state - interval, version and accumulated readings */
  oscilloscope_t local;

  uint8_t reading; /* 0 to NREADINGS */

  /* When we head an Oscilloscope message, we check it's sample count. If
     it's ahead of ours, we "jump" forwards (set our count to the received
     count). However, we must then suppress our next count increment. This
     is a very simple form of "time" synchronization (for an abstract
     notion of time). */
  bool suppress_count_change;

  // Use LEDs to report various status issues.
  void report_problem() { call Leds.led0Toggle(); }
  void report_sent() { call Leds.led1Toggle(); }
  void report_received() { call Leds.led2Toggle(); }

  event void Boot.booted() {
    local.interval = DEFAULT_INTERVAL;
    local.id = TOS_NODE_ID;
    if (call RadioControl.start() != SUCCESS)
      report_problem();
  }

  void startTimer() {
    call Timer.startPeriodic(local.interval);
    reading = 0;
  }

  event void RadioControl.startDone(error_t error) {
    startTimer();
  }

  event void RadioControl.stopDone(error_t error) {
  }

  event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) {
    oscilloscope_t *omsg = payload;

    report_received();

    /* If we receive a newer version, update our interval. 
       If we hear from a future count, jump ahead but suppress our own change
    */
    if (omsg->version > local.version)
      {
	local.version = omsg->version;
	local.interval = omsg->interval;
	startTimer();
      }
    if (omsg->count > local.count)
      {
	local.count = omsg->count;
	suppress_count_change = TRUE;
      }

    return msg;
  }

  /* At each sample period:
     - if local sample buffer is full, send accumulated samples
     - read next sample
  */
  event void Timer.fired() {
    if (reading == NREADINGS)
      {
	if (!sendbusy && sizeof local <= call AMSend.maxPayloadLength())
	  {
	    memcpy(call AMSend.getPayload(&sendbuf), &local, sizeof local);
	    if (call AMSend.send(AM_BROADCAST_ADDR, &sendbuf, sizeof local) == SUCCESS)
	      sendbusy = TRUE;
	  }
	if (!sendbusy)
	  report_problem();

	reading = 0;
	/* Part 2 of cheap "time sync": increment our count if we didn't
	   jump ahead. */
	if (!suppress_count_change)
	  local.count++;
	suppress_count_change = FALSE;
      }
    if (call Read1.read() != SUCCESS)
      report_problem();
    if (call Read2.read() != SUCCESS)
      report_problem();
  }

  event void AMSend.sendDone(message_t* msg, error_t error) {
    if (error == SUCCESS)
      report_sent();
    else
      report_problem();

    sendbusy = FALSE;
  }

  event void Read1.readDone(error_t result, uint16_t data) {
    if (result != SUCCESS)
      {
	data = 0xffff;
	report_problem();
      }
    local.readings[reading++] = data;
  }

  event void Read2.readDone(error_t result, uint16_t data) {
    if (result != SUCCESS)
      {
	data = 0xffff;
	report_problem();
      }
    local.readings[reading++] = data;
  }
}

--- NEW FILE: README.txt ---
README for PhotoTemp
Author/Contact: tinyos-help at millennium.berkeley.edu

Description:

This is a hacked version of the Oscilloscope application which
simultaneously samples the PhotoC and TempC sensors of the mts300 to
ensure that arbitration is working correctly. Compile and run it like
the usual Oscilloscope application. The output normally looks like
sawteeth because it consists of alternating light and temperature
values.

Tools:

See the regular Oscilloscope tools in apps/Oscilloscope/java.

Known bugs/limitations:

None.


$Id: README.txt,v 1.1 2007/05/23 23:01:38 idgay Exp $



More information about the Tinyos-2-commits mailing list