/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef BOSCH_BMM150_H_ #define BOSCH_BMM150_H_ #include #include #ifdef __cplusplus extern "C" { #endif #define BMM150_REG_DATA 0x42 #define BMM150_REG_CTRL_1 0x4b #define BMM150_REG_CTRL_2 0x4c #define BMM150_REG_REPXY 0x51 #define BMM150_REG_REPZ 0x52 #define BMM150_REG_DIG_X1 0x5d #define BMM150_REG_DIG_Y1 0x5e #define BMM150_REG_DIG_Z4_LSB 0x62 #define BMM150_REG_DIG_Z4_MSB 0x63 #define BMM150_REG_DIG_X2 0x64 #define BMM150_REG_DIG_Y2 0x65 #define BMM150_REG_DIG_Z2_LSB 0x68 #define BMM150_REG_DIG_Z2_MSB 0x69 #define BMM150_REG_DIG_Z1_LSB 0x6a #define BMM150_REG_DIG_Z1_MSB 0x6b #define BMM150_REG_DIG_XYZ1_LSB 0x6c #define BMM150_REG_DIG_XYZ1_MSB 0x6d #define BMM150_REG_DIG_Z3_LSB 0x6e #define BMM150_REG_DIG_Z3_MSB 0x6f #define BMM150_REG_DIG_XY2 0x70 #define BMM150_REG_DIG_XY1 0x71 #define BMM150_MAG_FLIP_OVERFLOW_ADCVAL ((int16_t)-4096) #define BMM150_MAG_HALL_OVERFLOW_ADCVAL ((int16_t)-16384) #define BMM150_MAG_OVERFLOW_OUTPUT ((int16_t)-32768) #define BMM150_CALIB_HEX_LACKS 0x100000 #define BMM150_MAG_OVERFLOW_OUTPUT_S32 ((int32_t)(-2147483647-1)) struct MagTask { uint16_t dig_z1; int16_t dig_z2, dig_z3, dig_z4; uint16_t dig_xyz1; uint8_t raw_dig_data[24]; int8_t dig_x1, dig_y1, dig_x2, dig_y2; uint8_t dig_xy1; int8_t dig_xy2; }; #define MAG_I2C_ADDR 0x10 #define MAG_REG_DATA BMM150_REG_DATA void bmm150SaveDigData(struct MagTask *magTask, uint8_t *data, size_t offset); void parseMagData(struct MagTask *magTask, uint8_t *buf, float *x, float *y, float *z); #ifdef __cplusplus } #endif #endif // BOSCH_BMM150_H_