From f8ae01fd4f70e95f24de55046a339c8a26ae9654 Mon Sep 17 00:00:00 2001 From: pipeng Date: Wed, 14 Mar 2007 07:02:47 +0000 Subject: [PATCH] Change to follow TEP 109 . --- tos/sensorboards/mts300/PhotoTempControlP.nc | 61 ++++++++++++++++++++ tos/sensorboards/mts300/PhotoTempDeviceC.nc | 45 +++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 tos/sensorboards/mts300/PhotoTempControlP.nc create mode 100644 tos/sensorboards/mts300/PhotoTempDeviceC.nc diff --git a/tos/sensorboards/mts300/PhotoTempControlP.nc b/tos/sensorboards/mts300/PhotoTempControlP.nc new file mode 100644 index 00000000..b21fbbd6 --- /dev/null +++ b/tos/sensorboards/mts300/PhotoTempControlP.nc @@ -0,0 +1,61 @@ +generic module PhotoTempControlP() +{ + provides { + interface SplitControl; + interface Read[uint8_t client]; + } + uses { + interface Resource as PhotoTempResource; + interface Timer; + interface GeneralIO as Power; + interface Read as ActualRead; + } +} +implementation +{ + uint8_t rflag=0; + + command error_t SplitControl.start() { + call PhotoTempResource.request(); + return SUCCESS; + } + + event void PhotoTempResource.granted() { + call Power.makeOutput(); + call Power.set(); + call Timer.startOneShot(10); + } + + event void Timer.fired() { + signal SplitControl.startDone(SUCCESS); + } + + task void stopDone() { + call PhotoTempResource.release(); + signal SplitControl.stopDone(SUCCESS); + } + + command error_t SplitControl.stop() { + call Power.clr(); + call Power.makeInput(); + post stopDone(); + return SUCCESS; + } + + uint8_t id; + + command error_t Read.read[uint8_t client]() { + id = client; + atomic rflag=1; + return call ActualRead.read(); + } + + event void ActualRead.readDone(error_t result, uint16_t val) { + if(rflag != 1) return; + atomic rflag=0; + call SplitControl.stop(); + signal Read.readDone[id](result, val); + } + + default event void Read.readDone[uint8_t x](error_t result, uint16_t val) { } +} diff --git a/tos/sensorboards/mts300/PhotoTempDeviceC.nc b/tos/sensorboards/mts300/PhotoTempDeviceC.nc new file mode 100644 index 00000000..28c1520b --- /dev/null +++ b/tos/sensorboards/mts300/PhotoTempDeviceC.nc @@ -0,0 +1,45 @@ +#include "mts300.h" + +configuration PhotoTempDeviceC +{ + provides interface Resource as PhotoResource[uint8_t client]; + provides interface Resource as TempResource[uint8_t client]; + provides interface Read as ReadPhoto[uint8_t client]; + provides interface Read as ReadTemp[uint8_t client]; +} +implementation +{ + components MicaBusC, PhotoTempP, + new RoundRobinArbiterC(UQ_PHOTOTEMP_RESOURCE) as SharingArbiter, + new RoundRobinArbiterC(UQ_PHOTO_RESOURCE) as PhotoArbiter, + new RoundRobinArbiterC(UQ_TEMP_RESOURCE) as TempArbiter, + new SplitControlPowerManagerC() as PhotoPower, + new SplitControlPowerManagerC() as TempPower, + new PhotoTempControlP() as PhotoControl, + new PhotoTempControlP() as TempControl, + new TimerMilliC() as WarmupTimer, + new AdcReadClientC() as Adc; + + PhotoResource = PhotoArbiter; + PhotoPower.ResourceDefaultOwner -> PhotoArbiter; + PhotoPower.ArbiterInfo -> PhotoArbiter; + PhotoPower.SplitControl -> PhotoControl; + PhotoControl.PhotoTempResource -> SharingArbiter.Resource[unique(UQ_PHOTOTEMP_RESOURCE)]; + PhotoControl.Timer -> WarmupTimer; + PhotoControl.Power -> MicaBusC.Int1; + ReadPhoto = PhotoControl; + PhotoControl.ActualRead -> Adc; + + TempResource = TempArbiter; + TempPower.ResourceDefaultOwner -> TempArbiter; + TempPower.ArbiterInfo -> TempArbiter; + TempPower.SplitControl -> TempControl; + TempControl.PhotoTempResource -> SharingArbiter.Resource[unique(UQ_PHOTOTEMP_RESOURCE)]; + TempControl.Timer -> WarmupTimer; + TempControl.Power -> MicaBusC.Int2; + ReadTemp = TempControl; + TempControl.ActualRead -> Adc; + + Adc.Atm128AdcConfig -> PhotoTempP; + PhotoTempP.PhotoTempAdc -> MicaBusC.Adc1; +} -- 2.39.2