Sample program for interfacing with PNI's RM3100 Breakout Board

Dependencies:   mbed

Committer:
ddelsuc
Date:
Thu Oct 26 18:40:57 2017 +0000
Revision:
0:6ddf88b49483
Sample program for interfacing with PNI's RM3100 Breakout Board

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ddelsuc 0:6ddf88b49483 1 /**
ddelsuc 0:6ddf88b49483 2 * @file RM3100MagDriver.h
ddelsuc 0:6ddf88b49483 3 *
ddelsuc 0:6ddf88b49483 4 * @brief RM3100 driver
ddelsuc 0:6ddf88b49483 5 * @authors Betty Zhang, Daniel Delsuc
ddelsuc 0:6ddf88b49483 6 * @date 03/03/2017
ddelsuc 0:6ddf88b49483 7 * @copyright (C) 2017 PNI Corp
ddelsuc 0:6ddf88b49483 8 *
ddelsuc 0:6ddf88b49483 9 * @copyright This sample code is provided "as is" without express or implied warranty.
ddelsuc 0:6ddf88b49483 10 *
ddelsuc 0:6ddf88b49483 11 */
ddelsuc 0:6ddf88b49483 12 #ifndef __RM3100_H_
ddelsuc 0:6ddf88b49483 13 #define __RM3100_H_
ddelsuc 0:6ddf88b49483 14
ddelsuc 0:6ddf88b49483 15 #include "main.h"
ddelsuc 0:6ddf88b49483 16
ddelsuc 0:6ddf88b49483 17
ddelsuc 0:6ddf88b49483 18 #define MAX_I2C_WRITE 32
ddelsuc 0:6ddf88b49483 19
ddelsuc 0:6ddf88b49483 20 #define RM3100_I2C_ADDRESS_7bit 0x20
ddelsuc 0:6ddf88b49483 21 #define RM3100_I2C_ADDRESS_8bit 0x20 << 1 // MBED uses 8 bit address
ddelsuc 0:6ddf88b49483 22
ddelsuc 0:6ddf88b49483 23 #define RM3100_MAG_REG 0x00
ddelsuc 0:6ddf88b49483 24 #define RM3100_BEACON_REG 0x01
ddelsuc 0:6ddf88b49483 25 #define RM3100_TMRC_REG 0x0B
ddelsuc 0:6ddf88b49483 26
ddelsuc 0:6ddf88b49483 27 #define RM3100_REVID_REG 0x36
ddelsuc 0:6ddf88b49483 28 #define RM3100_TEST3_REG 0x72
ddelsuc 0:6ddf88b49483 29
ddelsuc 0:6ddf88b49483 30 #define RM3100_LROSCADJ_REG 0x63
ddelsuc 0:6ddf88b49483 31
ddelsuc 0:6ddf88b49483 32 #define RM3100_LROSCADJ_VALUE 0xA7
ddelsuc 0:6ddf88b49483 33 #define RM3100_SLPOSCADJ_VALUE 0x08
ddelsuc 0:6ddf88b49483 34
ddelsuc 0:6ddf88b49483 35 #define RM3100_ENABLED 0x79
ddelsuc 0:6ddf88b49483 36 #define RM3100_DISABLED 0x00
ddelsuc 0:6ddf88b49483 37
ddelsuc 0:6ddf88b49483 38 #define RM3100_QX2_REG 0x24
ddelsuc 0:6ddf88b49483 39 #define RM3100_QX1_REG 0x25
ddelsuc 0:6ddf88b49483 40 #define RM3100_QX0_REG 0x26
ddelsuc 0:6ddf88b49483 41 #define RM3100_QY2_REG 0x27
ddelsuc 0:6ddf88b49483 42 #define RM3100_QY1_REG 0x28
ddelsuc 0:6ddf88b49483 43 #define RM3100_QY0_REG 0x29
ddelsuc 0:6ddf88b49483 44 #define RM3100_QZ2_REG 0x2A
ddelsuc 0:6ddf88b49483 45 #define RM3100_QZ1_REG 0x2B
ddelsuc 0:6ddf88b49483 46 #define RM3100_QZ0_REG 0x2C
ddelsuc 0:6ddf88b49483 47
ddelsuc 0:6ddf88b49483 48 #define RM3100_PNI_KEY1_REG 0x2D
ddelsuc 0:6ddf88b49483 49 #define RM3100_PNI_KEY2_REG 0x2E
ddelsuc 0:6ddf88b49483 50
ddelsuc 0:6ddf88b49483 51 #define RM3100_CCPX1_REG 0x04
ddelsuc 0:6ddf88b49483 52 #define RM3100_CCPX0_REG 0x05
ddelsuc 0:6ddf88b49483 53 #define RM3100_CCPY1_REG 0x06
ddelsuc 0:6ddf88b49483 54 #define RM3100_CCPY0_REG 0x07
ddelsuc 0:6ddf88b49483 55 #define RM3100_CCPZ1_REG 0x08
ddelsuc 0:6ddf88b49483 56 #define RM3100_CCPZ0_REG 0x09
ddelsuc 0:6ddf88b49483 57
ddelsuc 0:6ddf88b49483 58 #define RM3100_NOS_REG 0x0A
ddelsuc 0:6ddf88b49483 59
ddelsuc 0:6ddf88b49483 60 #define CCP0 0xC8 /* 200 Cycle Count */
ddelsuc 0:6ddf88b49483 61 #define CCP1 0x00
ddelsuc 0:6ddf88b49483 62 #define NOS 0x01 /* Number of Samples for averaging*/
ddelsuc 0:6ddf88b49483 63
ddelsuc 0:6ddf88b49483 64 #define TMRC 0x04 /* Default rate 125 Hz */
ddelsuc 0:6ddf88b49483 65
ddelsuc 0:6ddf88b49483 66 /************************/
ddelsuc 0:6ddf88b49483 67 /* Enumerations */
ddelsuc 0:6ddf88b49483 68 /************************/
ddelsuc 0:6ddf88b49483 69 /**
ddelsuc 0:6ddf88b49483 70 * @enum SensorPowerMode
ddelsuc 0:6ddf88b49483 71 *
ddelsuc 0:6ddf88b49483 72 * @brief Possible sensor power modes supported.
ddelsuc 0:6ddf88b49483 73 *
ddelsuc 0:6ddf88b49483 74 */
ddelsuc 0:6ddf88b49483 75 typedef enum {
ddelsuc 0:6ddf88b49483 76 SensorPowerModePowerDown = 0,
ddelsuc 0:6ddf88b49483 77 SensorPowerModeSuspend = 1,
ddelsuc 0:6ddf88b49483 78 SensorPowerModeActive = 255,
ddelsuc 0:6ddf88b49483 79 } SensorPowerMode;
ddelsuc 0:6ddf88b49483 80
ddelsuc 0:6ddf88b49483 81 /**
ddelsuc 0:6ddf88b49483 82 * @enum SensorStatus
ddelsuc 0:6ddf88b49483 83 *
ddelsuc 0:6ddf88b49483 84 * @brief Sensor status results.
ddelsuc 0:6ddf88b49483 85 */
ddelsuc 0:6ddf88b49483 86 typedef enum {
ddelsuc 0:6ddf88b49483 87 /* Valid Responses */
ddelsuc 0:6ddf88b49483 88 SensorOK, /**< @brief Sensor responded with expected data. */
ddelsuc 0:6ddf88b49483 89 SensorInitialized, /**< @brief Sensor has been initialized. */
ddelsuc 0:6ddf88b49483 90
ddelsuc 0:6ddf88b49483 91 /* Error Responses */
ddelsuc 0:6ddf88b49483 92 SensorUnknownError, /**< @brief An unknown error has occurred. */
ddelsuc 0:6ddf88b49483 93 SensorErrorNonExistant, /**< @brief Unable to communicate with sensor, sensor did not ACK. */
ddelsuc 0:6ddf88b49483 94 SensorErrorUnexpectedDevice, /**< @brief A different sensor was detected at the address. */
ddelsuc 0:6ddf88b49483 95
ddelsuc 0:6ddf88b49483 96 SensorStatusPending = 255, /**< @brief Reserved for internal used */
ddelsuc 0:6ddf88b49483 97 } SensorStatus;
ddelsuc 0:6ddf88b49483 98
ddelsuc 0:6ddf88b49483 99 #endif /* __RM3100_H_ */
ddelsuc 0:6ddf88b49483 100