diff --git a/flight/PiOS/Common/pios_bma180.c b/flight/PiOS/Common/pios_bma180.c index 1a28eaae4..e2d6fe727 100644 --- a/flight/PiOS/Common/pios_bma180.c +++ b/flight/PiOS/Common/pios_bma180.c @@ -149,11 +149,12 @@ void PIOS_BMA180_Init() /** * @brief Read a single set of values from the x y z channels + * @param[out] data Int16 array of (x,y,z) sensor values * @returns 0 if successful * @retval -1 unable to claim bus * @retval -2 unable to transfer data */ -int32_t PIOS_BMA180_Read(struct pios_bma180_data * data) +int32_t PIOS_BMA180_ReadAccels(int16_t * data) { // To save memory use same buffer for in and out but offset by // a byte @@ -167,9 +168,12 @@ int32_t PIOS_BMA180_Read(struct pios_bma180_data * data) PIOS_BMA180_ReleaseBus(); // | MSB | LSB | 0 | new_data | - data->x = ( (rec[2] << 8) | rec[1] ) / 4; - data->y = ( (rec[4] << 8) | rec[3] ) / 4; - data->z = ( (rec[6] << 8) | rec[5] ) / 4; + data[0] = (rec[2] << 8) | rec[1]; + data[1] = (rec[4] << 8) | rec[3]; + data[2] = (rec[6] << 8) | rec[5]; + data[0] /= 4; + data[1] /= 4; + data[2] /= 4; return 0; // return number of remaining entries } @@ -200,8 +204,8 @@ int32_t PIOS_BMA180_Test() return -2; PIOS_BMA180_ReleaseBus(); - struct pios_bma180_data data; - if(PIOS_BMA180_Read(&data) != 0) + int16_t data[3]; + if(PIOS_BMA180_ReadAccels(data) != 0) return -3; if(rec[1] != 0x3) diff --git a/flight/PiOS/Common/pios_imu3000.c b/flight/PiOS/Common/pios_imu3000.c index 7c672ab3a..d19ac8883 100644 --- a/flight/PiOS/Common/pios_imu3000.c +++ b/flight/PiOS/Common/pios_imu3000.c @@ -132,8 +132,14 @@ static void PIOS_IMU3000_Config(PIOS_IMU3000_ConfigTypeDef * IMU3000_Config_Stru * \param[out] int16_t array of size 3 to store X, Z, and Y magnetometer readings * \returns The number of samples remaining in the fifo */ -uint8_t PIOS_IMU3000_ReadGyros(struct pios_imu3000_data * data) +int32_t PIOS_IMU3000_ReadGyros(int16_t * data) { + uint8_t buf[6]; + if(PIOS_IMU3000_Read(PIOS_IMU3000_GYRO_X_OUT_MSB, (uint8_t *) buf, sizeof(buf)) < 0) + return -1; + data[0] = buf[0] << 8 | buf[1]; + data[1] = buf[2] << 8 | buf[3]; + data[2] = buf[4] << 8 | buf[5]; return 0; } diff --git a/flight/PiOS/inc/pios_bma180.h b/flight/PiOS/inc/pios_bma180.h index 66717d4a0..e46bd2d18 100644 --- a/flight/PiOS/inc/pios_bma180.h +++ b/flight/PiOS/inc/pios_bma180.h @@ -77,7 +77,7 @@ struct pios_bma180_data { /* Public Functions */ void PIOS_BMA180_Attach(uint32_t spi_id); void PIOS_BMA180_Init(); -int32_t PIOS_BMA180_Read(struct pios_bma180_data * data); +int32_t PIOS_BMA180_ReadAccels(int16_t * data); int32_t PIOS_BMA180_Test(); #endif /* PIOS_BMA180_H */ diff --git a/flight/PiOS/inc/pios_imu3000.h b/flight/PiOS/inc/pios_imu3000.h index 40b7ed5b5..04666729f 100644 --- a/flight/PiOS/inc/pios_imu3000.h +++ b/flight/PiOS/inc/pios_imu3000.h @@ -119,7 +119,7 @@ struct pios_imu3000_data { /* Public Functions */ extern void PIOS_IMU3000_Init(void); extern bool PIOS_IMU3000_NewDataAvailable(void); -extern uint8_t PIOS_IMU3000_ReadGyros(struct pios_imu3000_data * data); +extern int32_t PIOS_IMU3000_ReadGyros(int16_t * data); extern int32_t PIOS_IMU3000_ReadID(); extern uint8_t PIOS_IMU3000_Test();