diff --git a/src/driver.cpp b/src/driver.cpp index 1b898766b0c126e83f810936349467f38bbe1324..e4a43b8169a1ba1fe9d55adb8eb27819ca7803eb 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -292,21 +292,19 @@ void driver::read_data() read_mpu9250_registers(driver::register_mpu9250_type::ACCEL_X_HIGH, 14, atg_buffer); // Parse out accel data. - - //data.accel_x = driver::m_accel_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[0]) << 8) | static_cast<short>(atg_buffer[1])) / 32768.0f; - data.accel_x = driver::m_accel_fsr * static_cast<float>(be16toh(*reinterpret_cast<short*>(&atg_buffer[0]))) / 32768.0f; - data.accel_y = driver::m_accel_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[2]) << 8) | static_cast<short>(atg_buffer[3])) / 32768.0f; - data.accel_z = driver::m_accel_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[4]) << 8) | static_cast<short>(atg_buffer[5])) / 32768.0f; + data.accel_x = driver::m_accel_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[0])))) / 32768.0f; + data.accel_y = driver::m_accel_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[2])))) / 32768.0f; + data.accel_z = driver::m_accel_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[4])))) / 32768.0f; // Parse out temperature data. // Formula is DegC = ((raw - roomtemp_offset)/temp_sensitivity) + 21 // Apparently, roomtemp_offset = 0, and temp sensitivty = 321 - data.temp = static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[6]) << 8) | static_cast<short>(atg_buffer[7])) / 321.0f + 21.0f; + data.temp = static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[6])))) / 321.0f + 21.0f; // Parse out gyro data. - data.gyro_x = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[8]) << 8) | static_cast<short>(atg_buffer[9])) / 32768.0f; - data.gyro_y = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[10]) << 8) | static_cast<short>(atg_buffer[11])) / 32768.0f; - data.gyro_z = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(static_cast<unsigned short>(atg_buffer[12]) << 8) | static_cast<short>(atg_buffer[13])) / 32768.0f; + data.gyro_x = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[8])))) / 32768.0f; + data.gyro_y = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[10])))) / 32768.0f; + data.gyro_z = driver::m_gyro_fsr * static_cast<float>(static_cast<short>(be16toh(*reinterpret_cast<unsigned short*>(&atg_buffer[12])))) / 32768.0f; // Burst read magnetometer data. char magneto_buffer[7]; @@ -335,9 +333,9 @@ void driver::read_data() } // Store measurements. - data.magneto_x = 4900.0f * static_cast<float>(static_cast<short>(static_cast<unsigned short>(magneto_buffer[1]) << 8 | static_cast<short>(magneto_buffer[0]))) / resolution; - data.magneto_y = 4900.0f * static_cast<float>(static_cast<short>(static_cast<unsigned short>(magneto_buffer[3]) << 8 | static_cast<short>(magneto_buffer[2]))) / resolution; - data.magneto_z = 4900.0f * static_cast<float>(static_cast<short>(static_cast<unsigned short>(magneto_buffer[5]) << 8 | static_cast<short>(magneto_buffer[4]))) / resolution; + data.magneto_x = 4900.0f * static_cast<float>(static_cast<short>(le16toh(*reinterpret_cast<unsigned short*>(&magneto_buffer[0])))) / resolution; + data.magneto_y = 4900.0f * static_cast<float>(static_cast<short>(le16toh(*reinterpret_cast<unsigned short*>(&magneto_buffer[2])))) / resolution; + data.magneto_z = 4900.0f * static_cast<float>(static_cast<short>(le16toh(*reinterpret_cast<unsigned short*>(&magneto_buffer[4])))) / resolution; } // Read interrupt status register to clear interrupt.