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