m_method = I2C_METHOD;
- if (peripheral_i2c_open(I2C_BUS_ADDRESS, I2C_SLAVE_ADDRESS, &m_i2c_handle) < 0) {
+ if (peripheral_i2c_open_flags(I2C_BUS_ADDRESS, I2C_SLAVE_ADDRESS, PERIPHERAL_OPEN_FLAGS_SHARED, &m_i2c_handle) < 0) {
_ERRNO(errno, _E, "magnet handle open fail for magnet processor");
throw ENXIO;
}
{
retvm_if(id == 0 || id > MAX_ID, false, "%s:Invalid ID Received", SENSOR_NAME);
+ //reset
+ peripheral_i2c_write_register_byte(m_i2c_handle, CTRL_REG2_M, 0b00001100);
+
//turn on the sensor
set_fullscale();
peripheral_i2c_write_register_byte(m_i2c_handle, CTRL_REG3_M, 0);
- //calibration
+
+ //calibration, if you want to calibrate, you have to rotate your device.
+ /*
int16_t bias[3] = {0, 0, 0};
int16_t bias_min[3] = {SHRT_MAX, SHRT_MAX, SHRT_MAX};
int16_t bias_max[3] = {SHRT_MIN, SHRT_MIN, SHRT_MIN};
lsb = bias[2] & 0xFF;
peripheral_i2c_write_register_byte(m_i2c_handle, OFFSET_Z_REG_L_M, lsb);
peripheral_i2c_write_register_byte(m_i2c_handle, OFFSET_Z_REG_H_M, msb);
+ */
m_update_event.start();
bool magnet_device::update_value_i2c(void)
{
- uint16_t temp[3];
- peripheral_i2c_read_register_word(m_i2c_handle, OUT_X_L_M, &temp[0]);
- peripheral_i2c_read_register_word(m_i2c_handle, OUT_Y_L_M, &temp[1]);
- peripheral_i2c_read_register_word(m_i2c_handle, OUT_Z_L_M, &temp[2]);
+ int16_t temp[3];
+ peripheral_i2c_read_register_word(m_i2c_handle, OUT_X_L_M, (uint16_t*) &temp[0]);
+ peripheral_i2c_read_register_word(m_i2c_handle, OUT_Y_L_M, (uint16_t*) &temp[1]);
+ peripheral_i2c_read_register_word(m_i2c_handle, OUT_Z_L_M, (uint16_t*) &temp[2]);
if ((temp[0] == m_x) && (temp[1] == m_y) && (temp[2] == m_z))
return false;
sensor_data->values[1] = m_y;
sensor_data->values[2] = m_z;
- //raw_to_base(sensor_data);
+ raw_to_base(sensor_data);
*data = sensor_data;
*length = sizeof(sensor_data_t);