/************************************************************************************************** * @fn HalMagTest * * @brief Run a sensor self-test * * @return TRUE if passed, FALSE if failed **************************************************************************************************/ bool HalMagTest(void) { uint8 val; // Select this sensor on the I2C bus HalMagSelect(); // Check who-am-i register ST_ASSERT(HalSensorReadReg(MAG_REG_ADDR_WHO_AM_I, &val, sizeof(val))); ST_ASSERT(val==WHO_AM_I_VALUE); // Check CTRL_REG1 in standby mode ST_ASSERT(HalSensorReadReg(MAG_REG_ADDR_CTRL_1, &val, sizeof(val))); ST_ASSERT(val==MAG_REG_CTRL_OFF); // Check that CTRL_REG1 can be written val = CTRL1_TEST_VALUE; ST_ASSERT(HalSensorWriteReg(MAG_REG_ADDR_CTRL_1, &val, sizeof(val))); ST_ASSERT(HalSensorReadReg(MAG_REG_ADDR_CTRL_1, &val, sizeof(val))); ST_ASSERT(val==CTRL1_TEST_VALUE); // Restore default value val = MAG_REG_CTRL_OFF; ST_ASSERT(HalSensorWriteReg(MAG_REG_ADDR_CTRL_1, &val, sizeof(val))); // Check that the sensor is in standby mode ST_ASSERT(HalSensorReadReg(MAG_REG_ADDR_SYSMOD, &val, sizeof(val))); ST_ASSERT(val==0); return TRUE; }
/************************************************************************************************** * @fn HalMagTurnOn * * @brief Turn on the MAG3110. * * @return none */ void HalMagTurnOn(void) { HalMagSelect(); HalSensorWriteReg(MAG_REG_ADDR_CTRL_1, &halMagSensorConfig, sizeof(halMagSensorConfig)); HalSensorWriteReg(MAG_REG_ADDR_CTRL_2, &halMagAutoMrstEn, sizeof(halMagAutoMrstEn)); sensorState = MAG3110_IDLE; }
/************************************************************************************************** * @fn HalMagTurnOff * * @brief Turn off the MAG3110. * * @return none */ void HalMagTurnOff(void) { HalMagSelect(); HalSensorWriteReg(MAG_REG_ADDR_CTRL_1, &halMagSensorOff, sizeof(halMagSensorOff)); sensorState = MAG3110_OFF; }
/************************************************************************************************** * @fn HalIRTempTurnOff * * @brief Turn the sensor off * * @return none **************************************************************************************************/ void HalIRTempTurnOff(void) { HalIRTempSelect(); if (HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff, IRTEMP_REG_LEN)) { irtSensorState = TMP006_OFF; } HalDcDcControl(ST_IRTEMP,false); }
/************************************************************************************************** * @fn HalIRTempTurnOn * * @brief Turn the sensor on * * @return none **************************************************************************************************/ void HalIRTempTurnOn(void) { HalDcDcControl(ST_IRTEMP,true); HalIRTempSelect(); if (HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOn, IRTEMP_REG_LEN)) { irtSensorState = TMP006_IDLE; } }
/************************************************************************************************** * @fn HalHumiInit * * @brief Initialise the humidity sensor driver * * @return none **************************************************************************************************/ void HalHumiInit(void) { HalHumiSelect(); // Set 11 bit resolution HalSensorReadReg(SHT21_CMD_READ_U_R,&usr,1); usr &= USR_REG_RES_MASK; usr |= USR_REG_11BITRES; HalSensorWriteReg(SHT21_CMD_WRITE_U_R,&usr,1); success = FALSE; }
/************************************************************************************************** * @fn HalIRTempTest * * @brief Run a sensor self-test * * @return TRUE if passed, FALSE if failed **************************************************************************************************/ bool HalIRTempTest(void) { uint16 val; // Select this sensor on the I2C bus HalIRTempSelect(); // Check manufacturer ID ST_ASSERT(HalSensorReadReg(TMP006_REG_MANF_ID, (uint8 *)&val, IRTEMP_REG_LEN)); val = (LO_UINT16(val) << 8) | HI_UINT16(val); ST_ASSERT(val == TMP006_VAL_MANF_ID); // Reset sensor ST_ASSERT(HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorReset, IRTEMP_REG_LEN)); // Check config register (reset) ST_ASSERT(HalSensorReadReg(TMP006_REG_ADDR_CONFIG, (uint8 *)&val, IRTEMP_REG_LEN)); val = ((LO_UINT16(val) << 8) | HI_UINT16(val)); ST_ASSERT(val == TMP006_VAL_CONFIG_RESET); // Turn sensor off ST_ASSERT(HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff,IRTEMP_REG_LEN)); // Check config register (off) ST_ASSERT(HalSensorReadReg(TMP006_REG_ADDR_CONFIG, (uint8 *)&val, IRTEMP_REG_LEN)); val = ((LO_UINT16(val) << 8) | HI_UINT16(val)); ST_ASSERT(val == TMP006_VAL_CONFIG_OFF); // Turn sensor on ST_ASSERT(HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOn, IRTEMP_REG_LEN)); // Check config register (on) ST_ASSERT(HalSensorReadReg(TMP006_REG_ADDR_CONFIG, (uint8 *)&val, IRTEMP_REG_LEN)); val = ((LO_UINT16(val) << 8) | HI_UINT16(val)); ST_ASSERT(val == TMP006_VAL_CONFIG_ON); // Turn sensor off ST_ASSERT(HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff, IRTEMP_REG_LEN)); return TRUE; }
/************************************************************************************************** * @fn HalIRTempRead * * @brief Read the sensor voltage and sensor temperature registers * * @param Voltage and temperature in raw format (2 + 2 bytes) * * @return TRUE if valid data **************************************************************************************************/ bool HalIRTempRead(uint8 *pBuf) { uint16 v; uint16 t; bool success; if (irtSensorState != TMP006_DATA_READY) { return FALSE; } HalIRTempSelect(); // Read the sensor registers success = HalSensorReadReg(TMP006_REG_ADDR_VOLTAGE, (uint8 *)&v,IRTEMP_REG_LEN ); if (success) { success = HalSensorReadReg(TMP006_REG_ADDR_TEMPERATURE, (uint8 *)&t,IRTEMP_REG_LEN ); } if (success) { // Store values pBuf[0] = HI_UINT16( v ); pBuf[1] = LO_UINT16( v ); pBuf[2] = HI_UINT16( t ); pBuf[3] = LO_UINT16( t ); } // Turn off sensor if (HalSensorWriteReg(TMP006_REG_ADDR_CONFIG, configSensorOff, IRTEMP_REG_LEN)) { irtSensorState = TMP006_OFF; } HalDcDcControl(ST_IRTEMP,false); return success; }
/************************************************************************************************** * @fn HalINFWrite * * @brief Read the sensor voltage and sensor temperature registers * * @param Voltage and temperature in raw format (2 + 2 bytes) * * @return TRUE if valid data **************************************************************************************************/ bool HalINFWrite(uint8 addr, uint8 *pBuf, uint8 nBytes) { bool success; HalINFTurnOn(); success = HalSensorWriteReg(addr, pBuf, nBytes); return success; }