Fix errors in magnetometer 14/259514/2
authortaemin.yeom <taemin.yeom@samsung.com>
Wed, 9 Jun 2021 07:09:25 +0000 (16:09 +0900)
committertaemin.yeom <taemin.yeom@samsung.com>
Wed, 9 Jun 2021 07:15:43 +0000 (16:15 +0900)
-fix sign value error
-remove calibration not needed
-change to use shared i2c open

Change-Id: I6248034c3538e4ea4f5374d0331cfb959eeb44d1
Signed-off-by: taemin.yeom <taemin.yeom@samsung.com>
src/magnetometer/magnet_device.cpp

index 3f3a552..8a63775 100644 (file)
@@ -102,7 +102,7 @@ magnet_device::magnet_device()
 
        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;
        }
@@ -145,11 +145,16 @@ bool magnet_device::enable(uint32_t id)
 {
        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};
@@ -191,6 +196,7 @@ bool magnet_device::enable(uint32_t id)
        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();
 
@@ -229,10 +235,10 @@ bool magnet_device::set_interval(uint32_t id, unsigned long val)
 
 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;
@@ -277,7 +283,7 @@ int magnet_device::get_data(uint32_t id, sensor_data_t **data, int *length)
        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);