12dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung/* 22dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * Copyright (C) 2016 The Android Open Source Project 32dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * 42dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * Licensed under the Apache License, Version 2.0 (the "License"); 52dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * you may not use this file except in compliance with the License. 62dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * You may obtain a copy of the License at 72dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * 82dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * http://www.apache.org/licenses/LICENSE-2.0 92dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * 102dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * Unless required by applicable law or agreed to in writing, software 112dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * distributed under the License is distributed on an "AS IS" BASIS, 122dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * See the License for the specific language governing permissions and 142dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung * limitations under the License. 152dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung */ 162dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 172dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#ifndef BOSCH_BMM150_H_ 182dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 192dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BOSCH_BMM150_H_ 202dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 212dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#include <stdio.h> 222dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#include <stdint.h> 232dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 242dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#ifdef __cplusplus 252dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chungextern "C" { 262dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#endif 272dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 28b0ae54e9a706aa28060b1fdbb8ad19e37c4f4c34Ben Fennema#define kScale_mag 0.0625f // 1.0f / 16.0f; 29b0ae54e9a706aa28060b1fdbb8ad19e37c4f4c34Ben Fennema 302dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DATA 0x42 312dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_CTRL_1 0x4b 322dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_CTRL_2 0x4c 332dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_REPXY 0x51 342dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_REPZ 0x52 352dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_X1 0x5d 362dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Y1 0x5e 372dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z4_LSB 0x62 382dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z4_MSB 0x63 392dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_X2 0x64 402dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Y2 0x65 412dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z2_LSB 0x68 422dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z2_MSB 0x69 432dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z1_LSB 0x6a 442dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z1_MSB 0x6b 452dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_XYZ1_LSB 0x6c 462dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_XYZ1_MSB 0x6d 472dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z3_LSB 0x6e 482dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_Z3_MSB 0x6f 492dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_XY2 0x70 502dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_REG_DIG_XY1 0x71 512dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 522dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_MAG_FLIP_OVERFLOW_ADCVAL ((int16_t)-4096) 532dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_MAG_HALL_OVERFLOW_ADCVAL ((int16_t)-16384) 542dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_MAG_OVERFLOW_OUTPUT ((int16_t)-32768) 552dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_CALIB_HEX_LACKS 0x100000 562dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define BMM150_MAG_OVERFLOW_OUTPUT_S32 ((int32_t)(-2147483647-1)) 572dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 588b327e24bc4e85979d47a2c039c174aa6a45e1a9Andrew Rossignolstruct MagTask { 592dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung uint16_t dig_z1; 602dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung int16_t dig_z2, dig_z3, dig_z4; 612dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung uint16_t dig_xyz1; 622dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung uint8_t raw_dig_data[24]; 632dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung int8_t dig_x1, dig_y1, dig_x2, dig_y2; 642dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung uint8_t dig_xy1; 652dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung int8_t dig_xy2; 668b327e24bc4e85979d47a2c039c174aa6a45e1a9Andrew Rossignol}; 672dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 682dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define MAG_I2C_ADDR 0x10 692dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#define MAG_REG_DATA BMM150_REG_DATA 702dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 718b327e24bc4e85979d47a2c039c174aa6a45e1a9Andrew Rossignolvoid bmm150SaveDigData(struct MagTask *magTask, uint8_t *data, size_t offset); 728b327e24bc4e85979d47a2c039c174aa6a45e1a9Andrew Rossignolvoid parseMagData(struct MagTask *magTask, uint8_t *buf, float *x, float *y, float *z); 732dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 742dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#ifdef __cplusplus 752dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung} 762dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#endif 772dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung 782dc0e097c87ff97bb623e3339bde2a0b072885e2Meng-hsuan Chung#endif // BOSCH_BMM150_H_ 79