S_SETCONVMODE,
S_SETCLK,
S_SETREF,
+ S_ENALERT,
+ S_GETSTATUS,
};
uint8_t state = S_IDLE;
error_t clientResult;
+ task void alert_Task() {
+ signal HalMAX136xAdvanced.alertThreshold();
+ }
+
task void signalDone_Task() {
switch(state) {
case S_SETSCANMODE:
call Resource.release();
signal HalMAX136xAdvanced.setRefDone(clientResult);
break;
+ case S_ENALERT:
+ state = S_IDLE;
+ call Resource.release();
+ signal HalMAX136xAdvanced.enableAlertDone(clientResult);
+ break;
+ case S_GETSTATUS:
+ state = S_IDLE;
+ call Resource.release();
+ signal HalMAX136xAdvanced.getStatusDone(clientResult, mI2CBuffer[0], 0);
+ break;
default:
break;
}
return status;
state = S_SETSCANMODE;
- configByteShadow &= ~MAX136X_CONFIG_SCAN(3);
- configByteShadow |= MAX136X_CONFIG_SCAN(mode);
-
- configByteShadow &= ~MAX136X_CONFIG_CS(3);
+ configByteShadow &= ~(MAX136X_CONFIG_SCAN(0x3) | MAX136X_CONFIG_CS(0xF));
+ configByteShadow |= MAX136X_CONFIG_SCAN(0x0);
configByteShadow |= MAX136X_CONFIG_CS(chanhigh);
mI2CBuffer[0] = configByteShadow;
return status;
state = S_SETMONMODE;
- configByteShadow &= ~MAX136X_CONFIG_CS(3);
+ configByteShadow &= ~(MAX136X_CONFIG_SCAN(0x3) | MAX136X_CONFIG_CS(0xF));
+ configByteShadow |= MAX136X_CONFIG_SCAN(0x2);
configByteShadow |= MAX136X_CONFIG_CS(chanhigh);
monitorByteShadow &= ~MAX136X_MONITOR_DELAY(7);
setupByteShadow &= ~MAX136X_SETUP_REFAIN3SEL(3);
setupByteShadow |= MAX136X_SETUP_REFAIN3SEL(sel);
+
+ mI2CBuffer[0] = setupByteShadow;
+ call HplMAX136x.setConfig(mI2CBuffer, 1);
+ return SUCCESS;
}
command error_t HalMAX136xAdvanced.getStatus() {
- // STUB
+ error_t status;
+ if(state != S_IDLE)
+ return FAIL;
+ status = call Resource.immediateRequest();
+ if(status != SUCCESS)
+ return status;
+ state = S_GETSTATUS;
+
+ return call HplMAX136x.readStatus(mI2CBuffer, 2);
}
command error_t HalMAX136xAdvanced.enableAlert(bool bEnable) {
- // STUB
+ error_t status;
+ if(state != S_IDLE)
+ return FAIL;
+ status = call Resource.immediateRequest();
+ if(status != SUCCESS)
+ return status;
+ state = S_ENALERT;
+
+ if(bEnable)
+ monitorByteShadow |= MAX136X_MONITOR_INTEN;
+ else
+ monitorByteShadow &= ~MAX136X_MONITOR_INTEN;
+
+ mI2CBuffer[0] = setupByteShadow;
+ mI2CBuffer[1] = (0xF0 | monitorByteShadow);
+
+ call HplMAX136x.setConfig(mI2CBuffer, 2);
+ return SUCCESS;
}
event void Resource.granted() {
// intentionally left blank
}
+ async event void HplMAX136x.readStatusDone(error_t error, uint8_t* buf) {
+ clientResult = error;
+ post signalDone_Task();
+ }
+
async event void HplMAX136x.measureChannelsDone( error_t error, uint8_t *buf, uint8_t len ) { /* intentionally left blank */ }
async event void HplMAX136x.setConfigDone( error_t error , uint8_t *cfgbuf, uint8_t len) {
clientResult = error;
post signalDone_Task();
}
- async event void HplMAX136x.alertThreshold() {}
+ async event void HplMAX136x.alertThreshold() {
+ post alert_Task();
+ }
}