/******************************************************************************* * @fn sensorHdc1000Test * * @brief Humidity sensor self test * * @return true if test passes *******************************************************************************/ bool sensorHdc1000Test(void) { uint16_t val; SENSOR_SELECT(); // Verify manufacturer ID ST_ASSERT(sensorReadReg(HDC1000_REG_MANF_ID,(uint8_t*)&val,2)); val = SWAP(val); ST_ASSERT(val == HDC1000_VAL_MANF_ID); // Verify device ID ST_ASSERT(sensorReadReg(HDC1000_REG_DEV_ID,(uint8_t*)&val,2)); val = SWAP(val); ST_ASSERT(val == HDC1000_VAL_DEV_ID); SENSOR_DESELECT(); return true; }
/************************************************************************************************** * @fn sensorMpu6500Test * * @brief Run a sensor self-test * * @return TRUE if passed, FALSE if failed */ bool sensorMpu6500Test(void) { // Select this sensor on the I2C bus sensorMpu6500Select(); // Check the WHO AM I register ST_ASSERT(sensorReadReg(WHO_AM_I, &val, 1)); ST_ASSERT(val == 0x70); return true; }
/************************************************************************************************** * @fn sensorSht21Test * * @brief Humidity sensor self test * * @return none **************************************************************************************************/ bool sensorSht21Test(void) { uint8_t val; SENSOR_SELECT(); // Verify write and read val = USR_REG_TEST_VAL; ST_ASSERT(sensorWriteReg(SHT21_CMD_WRITE_U_R,&val,1)); ST_ASSERT(sensorReadReg(SHT21_CMD_READ_U_R,&val,1)); ST_ASSERT(val == USR_REG_TEST_VAL); SENSOR_DESELECT(); return true; }
/************************************************************************************************** * @fn sensorMpu6500AccRead * * @brief Read data from the accelerometer - X, Y, Z - 3 words * * @return TRUE if valid data, FALSE if not */ bool sensorMpu6500AccRead(uint16_t *data ) { bool success; // Select this sensor sensorMpu6500Select(); // Burst read of all acceleromter values success = sensorReadReg(ACCEL_XOUT_H, (uint8_t*)data, DATA_SIZE); if (!success) { sensorSetErrorData((uint8_t*)data,DATA_SIZE); } return success; }
/************************************************************************************************** * @fn sensorSht21Init * * @brief Initialize the humidity sensor driver * * @return True if successful **************************************************************************************************/ bool sensorSht21Init(void) { SENSOR_SELECT(); // Set 11 bit resolution success = sensorReadReg(SHT21_CMD_READ_U_R,&usr,1); if (success) { usr &= USR_REG_RES_MASK; usr |= USR_REG_11BITRES; success = sensorWriteReg(SHT21_CMD_WRITE_U_R,&usr,1); } SENSOR_DESELECT(); return success; }
/************************************************************************************************** * @fn sensorMpu6500GyroRead * * @brief Read data from the gyroscope - X, Y, Z - 3 words * * @return TRUE if valid data, FALSE if not */ bool sensorMpu6500GyroRead(uint16_t *data ) { bool success; // Select this sensor sensorMpu6500Select(); // Burst read of all gyroscope values success = sensorReadReg(GYRO_XOUT_H, (uint8_t*)data, DATA_SIZE); if (!success) { sensorSetErrorData((uint8_t*)data,DATA_SIZE); } return success; }
/********************************************************************* * @fn sensor_readRegister * * @brief Read registers and store the data in 'registerData' * * @return none */ static void sensor_readRegister(void) { uint8_t deviceAddress, interface, len; interface = registerDeviceID[0]; deviceAddress = registerDeviceID[1]; len = registerAddress[0]; switch (interface) { // I2C interfaces case REGISTER_INTERFACE_I2C0: case REGISTER_INTERFACE_I2C1: { uint8_t regaddr; regaddr = registerAddress[1]; bspI2cSelect(interface, deviceAddress); if (!sensorReadReg(regaddr,registerData,len)) { uint8_t i; for (i=0; i<len; i++) { registerData[i]= 0xFF; } } bspI2cDeselect(); } break; case REGISTER_INTERFACE_MCU: { uint32_t addr; addr= *(uint32_t*)(®isterAddress[1]); memcpy(registerData,(uint8_t*)addr,len); } break; default: break; } }