]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/max136x/HalMAX136xControlP.nc
Swapping HEAD and DEVEL branches
[tinyos-2.x.git] / tos / chips / max136x / HalMAX136xControlP.nc
index 1ada0311d011aa477aadcb49bdc35ebb39cdb5ea..46c26c3cc359335ec9405d0889b47b2d1bd03d32 100644 (file)
@@ -51,6 +51,8 @@ implementation {
     S_SETCONVMODE,
     S_SETCLK,
     S_SETREF,
+    S_ENALERT,
+    S_GETSTATUS,
   };
   uint8_t state = S_IDLE;
 
@@ -61,6 +63,10 @@ implementation {
 
   error_t clientResult;
 
+  task void alert_Task() {
+    signal HalMAX136xAdvanced.alertThreshold();
+  }
+
   task void signalDone_Task() {
     switch(state) {
     case S_SETSCANMODE:
@@ -88,6 +94,16 @@ implementation {
       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;
     }
@@ -103,10 +119,8 @@ implementation {
       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;
@@ -126,7 +140,8 @@ implementation {
       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);
@@ -201,24 +216,60 @@ implementation {
 
     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();
+  }
 }