--- /dev/null
+#include "mts300.h"\r
+#include "Timer.h"\r
+#include "I2C.h"\r
+\r
+module MagP\r
+{\r
+ provides interface Init;\r
+ provides interface StdControl;\r
+ provides interface Mag;\r
+ provides interface Atm128AdcConfig as ConfigX;\r
+ provides interface Atm128AdcConfig as ConfigY;\r
+ provides interface ResourceConfigure as ResourceX;\r
+ provides interface ResourceConfigure as ResourceY;\r
+\r
+ uses interface GeneralIO as MagPower;\r
+ uses interface MicaBusAdc as MagAdcX;\r
+ uses interface MicaBusAdc as MagAdcY;\r
+ uses interface I2CPacket<TI2CBasicAddr>;\r
+ uses interface Resource;\r
+}\r
+\r
+implementation\r
+{\r
+ uint8_t gainData[2];\r
+\r
+ command error_t Init.init()\r
+ {\r
+ call MagPower.makeOutput();\r
+ call MagPower.clr();\r
+\r
+ return SUCCESS;\r
+ }\r
+\r
+ command error_t StdControl.start()\r
+ {\r
+ call MagPower.set();\r
+ return SUCCESS;\r
+ }\r
+\r
+ command error_t StdControl.stop()\r
+ {\r
+ call MagPower.clr();\r
+ call MagPower.makeInput();\r
+\r
+ return SUCCESS;\r
+ }\r
+\r
+ command error_t Mag.gainAdjustX(uint8_t val)\r
+ {\r
+ gainData[0] = 1; // pot subaddr\r
+ gainData[1] = val; // value to write\r
+ return call Resource.request();\r
+ }\r
+ command error_t Mag.gainAdjustY(uint8_t val)\r
+ {\r
+ gainData[0] = 0; // pot subaddr\r
+ gainData[1] = val; // value to write\r
+ return call Resource.request();\r
+ }\r
+ /**\r
+ * Resource request\r
+ *\r
+ */\r
+ event void Resource.granted()\r
+ {\r
+ if ( call I2CPacket.write(0x3,TOS_MAG_POT_ADDR, 2, gainData) == SUCCESS)\r
+ {\r
+ return ;\r
+ }\r
+ }\r
+ /**\r
+ * I2CPot2\r
+ *\r
+ */\r
+ async event void I2CPacket.readDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data)\r
+ {\r
+ return ;\r
+ }\r
+\r
+ async event void I2CPacket.writeDone(error_t error, uint16_t addr, uint8_t length, uint8_t* data)\r
+ {\r
+ call Resource.release();\r
+ if (gainData[0] ==1)\r
+ {\r
+ signal Mag.gainAdjustXDone(error);\r
+ }\r
+ if (gainData[0] ==0)\r
+ {\r
+ signal Mag.gainAdjustYDone(error);\r
+ }\r
+ return ;\r
+ }\r
+\r
+ async command uint8_t ConfigX.getChannel() {\r
+ return call MagAdcX.getChannel();\r
+ }\r
+\r
+ async command uint8_t ConfigX.getRefVoltage() {\r
+ return ATM128_ADC_VREF_OFF;\r
+ }\r
+\r
+ async command uint8_t ConfigX.getPrescaler() {\r
+ return ATM128_ADC_PRESCALE;\r
+ }\r
+\r
+ async command uint8_t ConfigY.getChannel() {\r
+ return call MagAdcY.getChannel();\r
+ }\r
+\r
+ async command uint8_t ConfigY.getRefVoltage() {\r
+ return ATM128_ADC_VREF_OFF;\r
+ }\r
+\r
+ async command uint8_t ConfigY.getPrescaler() {\r
+ return ATM128_ADC_PRESCALE;\r
+ }\r
+\r
+ async command void ResourceX.configure() { } \r
+ async command void ResourceX.unconfigure() { } \r
+ async command void ResourceY.configure() { } \r
+ async command void ResourceY.unconfigure() {}\r
+}
\ No newline at end of file