From: klueska Date: Tue, 17 Jun 2008 19:07:48 +0000 (+0000) Subject: Update to TestCollection for C based API X-Git-Tag: release_tinyos_2_1_0_0~261 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=0e9650435759d038896419f3aabfb5805d81b22d Update to TestCollection for C based API --- diff --git a/apps/tosthreads/apps/TestCollection/Makefile b/apps/tosthreads/apps/TestCollection/Makefile index 90b778a5..05eb49ae 100644 --- a/apps/tosthreads/apps/TestCollection/Makefile +++ b/apps/tosthreads/apps/TestCollection/Makefile @@ -1,7 +1,11 @@ COMPONENT=TestCollectionAppC CFLAGS += -I$(TOSDIR)/lib/tosthreads/sensorboards/universal + CFLAGS += -I$(TOSDIR)/lib/tosthreads/lib/net/ -CFLAGS += -I$(TOSDIR)/lib/net/ -I$(TOSDIR)/lib/net/ctp -I$(TOSDIR)/lib/net/4bitle +CFLAGS += -I$(TOSDIR)/lib/net/ + +CFLAGS += -I$(TOSDIR)/lib/tosthreads/lib/net/ctp +CFLAGS += -I$(TOSDIR)/lib/net/ctp -I$(TOSDIR)/lib/net/4bitle include $(MAKERULES) diff --git a/apps/tosthreads/apps/TestCollection/TestCollectionAppC.nc b/apps/tosthreads/apps/TestCollection/TestCollectionAppC.nc index d6dab922..4db9f298 100644 --- a/apps/tosthreads/apps/TestCollection/TestCollectionAppC.nc +++ b/apps/tosthreads/apps/TestCollection/TestCollectionAppC.nc @@ -40,6 +40,7 @@ implementation { MainC, BlockingSerialActiveMessageC, new BlockingSerialAMSenderC(AM_OSCILLOSCOPE); + TestCollectionC.MainThread -> MainThread; TestCollectionC.Boot -> MainC; diff --git a/apps/tosthreads/capps/SenseAndSend/SenseAndSend.c b/apps/tosthreads/capps/SenseAndSend/SenseAndSend.c index 9546781d..242d6503 100644 --- a/apps/tosthreads/capps/SenseAndSend/SenseAndSend.c +++ b/apps/tosthreads/capps/SenseAndSend/SenseAndSend.c @@ -78,8 +78,7 @@ void tosthread_main(void* arg) { barrier_reset(&send_barrier, NUM_SENSORS+1); barrier_reset(&sense_barrier, NUM_SENSORS+1); sensor_data = radioGetPayload(&send_msg, sizeof(sensor_data_t)); - //sensor_data->seq_no = 0; - __nesc_hton_uint32((unsigned char *)&sensor_data->seq_no, (unsigned long )0); + sensor_data->seq_no = 0; amRadioStart(); tosthread_create(&humidity, humidity_thread, NULL, 200); @@ -94,8 +93,7 @@ void read_sensor(error_t (*read)(uint16_t*), nx_uint16_t* nx_val) { for(;;) { (*read)(&val); mutex_lock(&data_mutex); - // *nx_val = val; - __nesc_hton_uint16((unsigned char *)&*nx_val, val); + *nx_val = val; mutex_unlock(&data_mutex); barrier_block(&send_barrier); barrier_block(&sense_barrier); @@ -115,17 +113,12 @@ void photo_active_thread(void* arg) { read_sensor(hamamatsuS1087_par_read, &(sensor_data->par)); } void send_thread(void* arg) { - //Only needed for nesC magic.... I hate this hack..... - unsigned long __nesc_temp43; - unsigned char *__nesc_temp42; - for(;;) { barrier_block(&send_barrier); barrier_reset(&send_barrier, NUM_SENSORS + 1); if(amRadioSend(AM_BROADCAST_ADDR, &send_msg, sizeof(sensor_data_t), AM_SENSOR_DATA_MSG) == SUCCESS) { - //sensor_data->seq_no++; - (__nesc_temp42 = (unsigned char *)&sensor_data->seq_no, __nesc_hton_uint32(__nesc_temp42, (__nesc_temp43 = __nesc_ntoh_uint32(__nesc_temp42)) + 1), __nesc_temp43); + sensor_data->seq_no++; led0Toggle(); } //tosthread_sleep(SAMPLING_PERIOD); diff --git a/apps/tosthreads/capps/SenseCompressForward/Sensor/SenseStoreAndForward.c b/apps/tosthreads/capps/SenseCompressForward/Sensor/SenseStoreAndForward.c index 7640490d..71d78c06 100644 --- a/apps/tosthreads/capps/SenseCompressForward/Sensor/SenseStoreAndForward.c +++ b/apps/tosthreads/capps/SenseCompressForward/Sensor/SenseStoreAndForward.c @@ -62,7 +62,7 @@ void tosthread_main(void* arg) { barrier_reset(&send_barrier, NUM_SENSORS+1); barrier_reset(&sense_barrier, NUM_SENSORS+1); - __nesc_hton_uint32((unsigned char *)&storing_sensor_data.seq_no, (unsigned long )0); + storing_sensor_data.seq_no = 0; amRadioStart(); led0Toggle(); @@ -82,8 +82,7 @@ void read_sensor(error_t (*read)(uint16_t*), nx_uint16_t* nx_val) { for(;;) { (*read)(&val); mutex_lock(&data_mutex); - // *nx_val = val; - __nesc_hton_uint16((unsigned char *)&*nx_val, val); + *nx_val = val; mutex_unlock(&data_mutex); barrier_block(&send_barrier); barrier_block(&sense_barrier); @@ -106,10 +105,6 @@ void store_thread(void* arg) { storage_len_t sensor_data_len; bool sensor_records_lost; - //Only needed for nesC magic.... I hate this hack..... - unsigned long __nesc_temp43; - unsigned char *__nesc_temp42; - for(;;) { barrier_block(&send_barrier); barrier_reset(&send_barrier, NUM_SENSORS + 1); @@ -119,8 +114,7 @@ void store_thread(void* arg) { while( volumeLogAppend(VOLUME_SENSORLOG, &storing_sensor_data, &sensor_data_len, &sensor_records_lost) != SUCCESS ); mutex_unlock(&log_mutex); - //storing_sensor_data.seq_no++ - (__nesc_temp42 = (unsigned char *)&storing_sensor_data.seq_no, __nesc_hton_uint32(__nesc_temp42, (__nesc_temp43 = __nesc_ntoh_uint32(__nesc_temp42)) + 1), __nesc_temp43); + storing_sensor_data.seq_no++; led0Toggle(); //tosthread_sleep(SAMPLING_PERIOD); diff --git a/apps/tosthreads/capps/SenseStoreAndForward/SenseStoreAndForward.c b/apps/tosthreads/capps/SenseStoreAndForward/SenseStoreAndForward.c index 2aa52d17..5b9e5bb2 100644 --- a/apps/tosthreads/capps/SenseStoreAndForward/SenseStoreAndForward.c +++ b/apps/tosthreads/capps/SenseStoreAndForward/SenseStoreAndForward.c @@ -84,8 +84,7 @@ void tosthread_main(void* arg) { barrier_reset(&send_barrier, NUM_SENSORS+1); barrier_reset(&sense_barrier, NUM_SENSORS+1); sending_sensor_data = radioGetPayload(&send_msg, sizeof(sensor_data_t)); - //storing_sensor_data->seq_no = 0; - __nesc_hton_uint32((unsigned char *)&storing_sensor_data.seq_no, (unsigned long )0); + storing_sensor_data.seq_no = 0; amRadioStart(); led0Toggle(); @@ -104,8 +103,7 @@ void read_sensor(error_t (*read)(uint16_t*), nx_uint16_t* nx_val) { for(;;) { (*read)(&val); mutex_lock(&data_mutex); - // *nx_val = val; - __nesc_hton_uint16((unsigned char *)&*nx_val, val); + *nx_val = val; mutex_unlock(&data_mutex); barrier_block(&send_barrier); barrier_block(&sense_barrier); @@ -128,10 +126,6 @@ void store_thread(void* arg) { storage_len_t sensor_data_len; bool sensor_records_lost; - //Only needed for nesC magic.... I hate this hack..... - unsigned long __nesc_temp43; - unsigned char *__nesc_temp42; - for(;;) { barrier_block(&send_barrier); barrier_reset(&send_barrier, NUM_SENSORS + 1); @@ -141,8 +135,7 @@ void store_thread(void* arg) { while( volumeLogAppend(VOLUME_SENSORLOG, &storing_sensor_data, &sensor_data_len, &sensor_records_lost) != SUCCESS ); mutex_unlock(&log_mutex); - //storing_sensor_data.seq_no++ - (__nesc_temp42 = (unsigned char *)&storing_sensor_data.seq_no, __nesc_hton_uint32(__nesc_temp42, (__nesc_temp43 = __nesc_ntoh_uint32(__nesc_temp42)) + 1), __nesc_temp43); + storing_sensor_data.seq_no++; led0Toggle(); //tosthread_sleep(SAMPLING_PERIOD); diff --git a/apps/tosthreads/capps/TestCollection/Makefile b/apps/tosthreads/capps/TestCollection/Makefile index 533681da..66efa2d3 100644 --- a/apps/tosthreads/capps/TestCollection/Makefile +++ b/apps/tosthreads/capps/TestCollection/Makefile @@ -1,3 +1,11 @@ TOSTHREAD_MAIN=TestCollection.c +CFLAGS += -I$(TOSDIR)/lib/tosthreads/sensorboards/universal + +CFLAGS += -I$(TOSDIR)/lib/tosthreads/lib/net/ +CFLAGS += -I$(TOSDIR)/lib/net/ + +CFLAGS += -I$(TOSDIR)/lib/tosthreads/lib/net/ctp +CFLAGS += -I$(TOSDIR)/lib/net/ctp -I$(TOSDIR)/lib/net/4bitle + include $(MAKERULES) diff --git a/apps/tosthreads/capps/TestCollection/MultihopOscilloscope.h b/apps/tosthreads/capps/TestCollection/MultihopOscilloscope.h new file mode 100644 index 00000000..5f040539 --- /dev/null +++ b/apps/tosthreads/capps/TestCollection/MultihopOscilloscope.h @@ -0,0 +1,36 @@ +/* + * 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. + */ + +/** + * @author David Gay + * @author Kyle Jamieson + */ + +#ifndef MULTIHOP_OSCILLOSCOPE_H +#define MULTIHOP_OSCILLOSCOPE_H + +enum { + /* Number of readings per message. If you increase this, you may have to + increase the message_t size. */ + NREADINGS = 5, + /* Default sampling period. */ + DEFAULT_INTERVAL = 1024, + AM_OSCILLOSCOPE = 0x93 +}; + +typedef nx_struct oscilloscope { + nx_uint16_t version; /* Version of the interval. */ + nx_uint16_t interval; /* Samping period. */ + nx_uint16_t id; /* Mote id of sending mote. */ + nx_uint16_t count; /* The readings are samples count * NREADINGS onwards */ + nx_uint16_t readings[NREADINGS]; +} oscilloscope_t; + +#endif diff --git a/apps/tosthreads/capps/TestCollection/TestCollection.c b/apps/tosthreads/capps/TestCollection/TestCollection.c index 889ffabe..f0b417fb 100644 --- a/apps/tosthreads/capps/TestCollection/TestCollection.c +++ b/apps/tosthreads/capps/TestCollection/TestCollection.c @@ -1,29 +1,110 @@ /* - * Copyright (c) 2008 Johns Hopkins University. + * Copyright (c) 2008 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 (updated) modification history and the author appear in - * all copies of this source code. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * - Neither the name of the Stanford University nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * - * 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. -*/ + * 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 STANFORD + * UNIVERSITY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * 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 + * @author Kevin Klues */ #include "tosthread.h" +#include "tosthread_amradio.h" +#include "tosthread_amserial.h" +#include "tosthread_leds.h" +#include "tosthread_collection.h" +#include "tosthread_sinesensor.h" +#include "MultihopOscilloscope.h" + +void fatal_problem(); +void report_problem(); +void report_sent(); +void report_received(); + +oscilloscope_t local; +uint8_t reading = 0; /* 0 to NREADINGS */ +message_t sendbuf; +message_t recvbuf; + +void tosthread_main(void* arg) { + local.interval = DEFAULT_INTERVAL; + local.id = TOS_NODE_ID; + local.version = 0; + + while ( amRadioStart() != SUCCESS ); + while ( collectionRoutingStart() != SUCCESS ); + + if (local.id % 500 == 0) { + while ( amSerialStart() != SUCCESS); + collectionSetRoot(); + for (;;) { + if ( collectionReceive(&recvbuf, 0, AM_OSCILLOSCOPE) == SUCCESS) { + amSerialSend(AM_BROADCAST_ADDR, &recvbuf, sizeof(local), AM_OSCILLOSCOPE); + report_received(); + } + } + } else { + uint16_t var; + + for (;;) { + if (reading == NREADINGS) { + oscilloscope_t *o = o; + o = (oscilloscope_t *) collectionGetPayload(&sendbuf, sizeof(oscilloscope_t)); + if (o == NULL) { + fatal_problem(); + return; + } + memcpy(o, &local, sizeof(local)); + if (collectionSend(&sendbuf, sizeof(local), AM_OSCILLOSCOPE) == SUCCESS) { + report_sent(); + } else { + report_problem(); + } + + reading = 0; + } + + if (sinesensor_read(&var) == SUCCESS) { + local.readings[reading++] = var; + } + + tosthread_sleep(local.interval); + } + } +} + +// Use LEDs to report various status issues. +void fatal_problem() { + led0On(); + led1On(); + led2On(); +} -void tosthread_main(void* arg) {} +void report_problem() { led0Toggle(); } +void report_sent() { led1Toggle(); } +void report_received() { led2Toggle(); }