X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fsensorboards%2Fmts300%2FMagP.nc;h=79de78f659f4b2ab946568502c613844b198f52e;hb=ea91d610f54dd99029ce18bdd51649210a78943d;hp=0bef394778167cda7988627b7469084d31533fc5;hpb=805e25939a652bf5fde3f4e8ebdc8d1bd751944f;p=tinyos-2.x.git diff --git a/tos/sensorboards/mts300/MagP.nc b/tos/sensorboards/mts300/MagP.nc index 0bef3947..79de78f6 100644 --- a/tos/sensorboards/mts300/MagP.nc +++ b/tos/sensorboards/mts300/MagP.nc @@ -1,124 +1,124 @@ -#include "mts300.h" -#include "Timer.h" -#include "I2C.h" - -module MagP -{ - provides interface SplitControl; - provides interface Mag; - provides interface Atm128AdcConfig as ConfigX; - provides interface Atm128AdcConfig as ConfigY; - - uses interface Timer; - uses interface GeneralIO as MagPower; - uses interface MicaBusAdc as MagAdcX; - uses interface MicaBusAdc as MagAdcY; - uses interface I2CPacket; - uses interface Resource as I2CResource; -} - -implementation -{ - uint8_t gainData[2]; - - command error_t SplitControl.start() - { - call MagPower.makeOutput(); - call MagPower.set(); - - call Timer.startOneShot(100); - return SUCCESS; - } - - event void Timer.fired() { - signal SplitControl.startDone(SUCCESS); - } - - command error_t SplitControl.stop() - { - call MagPower.clr(); - call MagPower.makeInput(); - - signal SplitControl.stopDone(SUCCESS); - return SUCCESS; - } - - command error_t Mag.gainAdjustX(uint8_t val) - { - gainData[0] = 1; // pot subaddr - gainData[1] = val; // value to write - return call I2CResource.request(); - } - command error_t Mag.gainAdjustY(uint8_t val) - { - gainData[0] = 0; // pot subaddr - gainData[1] = val; // value to write - return call I2CResource.request(); - } - /** - * Resource request - * - */ - event void I2CResource.granted() - { - if ( call I2CPacket.write(0x3,TOS_MAG_POT_ADDR, 2, gainData) == SUCCESS) - { - return ; - } - } - /** - * I2CPot2 - * - */ - async event void I2CPacket.readDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data) - { - return ; - } - - async event void I2CPacket.writeDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data) - { - call I2CResource.release(); - if (gainData[0] ==1) - { - signal Mag.gainAdjustXDone(error); - } - if (gainData[0] ==0) - { - signal Mag.gainAdjustYDone(error); - } - return ; - } - - async command uint8_t ConfigX.getChannel() { - return call MagAdcX.getChannel(); - } - - async command uint8_t ConfigX.getRefVoltage() { - return ATM128_ADC_VREF_OFF; - } - - async command uint8_t ConfigX.getPrescaler() { - return ATM128_ADC_PRESCALE; - } - - async command uint8_t ConfigY.getChannel() { - return call MagAdcY.getChannel(); - } - - async command uint8_t ConfigY.getRefVoltage() { - return ATM128_ADC_VREF_OFF; - } - - async command uint8_t ConfigY.getPrescaler() { - return ATM128_ADC_PRESCALE; - } - - default event error_t Mag.gainAdjustXDone(bool result) - { - return result; - } - default event error_t Mag.gainAdjustYDone(bool result) - { - return result; - } +#include "mts300.h" +#include "Timer.h" +#include "I2C.h" + +module MagP +{ + provides interface SplitControl; + provides interface Mag; + provides interface Atm128AdcConfig as ConfigX; + provides interface Atm128AdcConfig as ConfigY; + + uses interface Timer; + uses interface GeneralIO as MagPower; + uses interface MicaBusAdc as MagAdcX; + uses interface MicaBusAdc as MagAdcY; + uses interface I2CPacket; + uses interface Resource as I2CResource; +} + +implementation +{ + uint8_t gainData[2]; + + command error_t SplitControl.start() + { + call MagPower.makeOutput(); + call MagPower.set(); + + call Timer.startOneShot(100); + return SUCCESS; + } + + event void Timer.fired() { + signal SplitControl.startDone(SUCCESS); + } + + command error_t SplitControl.stop() + { + call MagPower.clr(); + call MagPower.makeInput(); + + signal SplitControl.stopDone(SUCCESS); + return SUCCESS; + } + + command error_t Mag.gainAdjustX(uint8_t val) + { + gainData[0] = 1; // pot subaddr + gainData[1] = val; // value to write + return call I2CResource.request(); + } + command error_t Mag.gainAdjustY(uint8_t val) + { + gainData[0] = 0; // pot subaddr + gainData[1] = val; // value to write + return call I2CResource.request(); + } + /** + * Resource request + * + */ + event void I2CResource.granted() + { + if ( call I2CPacket.write(0x3,TOS_MAG_POT_ADDR, 2, gainData) == SUCCESS) + { + return ; + } + } + /** + * I2CPot2 + * + */ + async event void I2CPacket.readDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data) + { + return ; + } + + async event void I2CPacket.writeDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data) + { + call I2CResource.release(); + if (gainData[0] ==1) + { + signal Mag.gainAdjustXDone(error); + } + if (gainData[0] ==0) + { + signal Mag.gainAdjustYDone(error); + } + return ; + } + + async command uint8_t ConfigX.getChannel() { + return call MagAdcX.getChannel(); + } + + async command uint8_t ConfigX.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t ConfigX.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + async command uint8_t ConfigY.getChannel() { + return call MagAdcY.getChannel(); + } + + async command uint8_t ConfigY.getRefVoltage() { + return ATM128_ADC_VREF_OFF; + } + + async command uint8_t ConfigY.getPrescaler() { + return ATM128_ADC_PRESCALE; + } + + default event error_t Mag.gainAdjustXDone(bool result) + { + return result; + } + default event error_t Mag.gainAdjustYDone(bool result) + { + return result; + } } \ No newline at end of file