AKM Development Platform / AK9752_tkstreet

Fork of AK9752 by AKM Development Platform

Committer:
tkstreet
Date:
Tue Nov 01 17:03:31 2016 +0000
Revision:
1:2035a4a54d3f
Parent:
0:51fa46d39a3e
Added comments and documentation to library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masahikofukasawa 0:51fa46d39a3e 1 #ifndef __AK9752_H__
masahikofukasawa 0:51fa46d39a3e 2 #define __AK9752_H__
masahikofukasawa 0:51fa46d39a3e 3
masahikofukasawa 0:51fa46d39a3e 4 #include "mbed.h"
masahikofukasawa 0:51fa46d39a3e 5
tkstreet 1:2035a4a54d3f 6 /**
tkstreet 1:2035a4a54d3f 7 * Device driver for AK9752.
tkstreet 1:2035a4a54d3f 8 * @note AK9752 is an IR sensor with I2C interface.
tkstreet 1:2035a4a54d3f 9 * Example:
tkstreet 1:2035a4a54d3f 10 * @code
tkstreet 1:2035a4a54d3f 11 * #include "mbed.h"
tkstreet 1:2035a4a54d3f 12 * #include "ak9752_reg.h"
tkstreet 1:2035a4a54d3f 13 * #include "ak9752.h"
tkstreet 1:2035a4a54d3f 14 *
tkstreet 1:2035a4a54d3f 15 * int main()
tkstreet 1:2035a4a54d3f 16 * {
tkstreet 1:2035a4a54d3f 17 * // Coming soon
tkstreet 1:2035a4a54d3f 18 * return 0;
tkstreet 1:2035a4a54d3f 19 * }
tkstreet 1:2035a4a54d3f 20 * @endcode
tkstreet 1:2035a4a54d3f 21 *
tkstreet 1:2035a4a54d3f 22 */
masahikofukasawa 0:51fa46d39a3e 23 class AK9752
masahikofukasawa 0:51fa46d39a3e 24 {
masahikofukasawa 0:51fa46d39a3e 25 public:
masahikofukasawa 0:51fa46d39a3e 26 /**
masahikofukasawa 0:51fa46d39a3e 27 * Enum for return status.
masahikofukasawa 0:51fa46d39a3e 28 */
masahikofukasawa 0:51fa46d39a3e 29 typedef enum {
masahikofukasawa 0:51fa46d39a3e 30 SUCCESS, /**< Success */
masahikofukasawa 0:51fa46d39a3e 31 ERROR, /**< Error */
masahikofukasawa 0:51fa46d39a3e 32 ERROR_I2C_WRITE, /**< I2C write error */
masahikofukasawa 0:51fa46d39a3e 33 ERROR_I2C_READ, /**< I2C read error */
masahikofukasawa 0:51fa46d39a3e 34 ERROR_ARG_OUT_OF_BOUNDS, /**< An argument is out of bounds */
masahikofukasawa 0:51fa46d39a3e 35 } Status;
masahikofukasawa 0:51fa46d39a3e 36
masahikofukasawa 0:51fa46d39a3e 37 /**
masahikofukasawa 0:51fa46d39a3e 38 * Enum for slave address of AK9752.
masahikofukasawa 0:51fa46d39a3e 39 */
masahikofukasawa 0:51fa46d39a3e 40 typedef enum {
masahikofukasawa 0:51fa46d39a3e 41 SLAVE_ADDR_1 = 0x64, /**< CAD1=0, CAD0=0 */
masahikofukasawa 0:51fa46d39a3e 42 } SlaveAddress;
masahikofukasawa 0:51fa46d39a3e 43
masahikofukasawa 0:51fa46d39a3e 44 /**
masahikofukasawa 0:51fa46d39a3e 45 * Enum for operation mode of measurement.
masahikofukasawa 0:51fa46d39a3e 46 */
masahikofukasawa 0:51fa46d39a3e 47 typedef enum {
tkstreet 1:2035a4a54d3f 48 MODE_STANDBY = 0x00, /**< MODE_STANDBY: 0x00 */
tkstreet 1:2035a4a54d3f 49 MODE_CONTINUOUS = 0x01, /**< MODE_CONTINUOUS: 0x01 */
tkstreet 1:2035a4a54d3f 50 MODE_SINGLE_SHOT = 0x02, /**< MODE_SINGLE_SHOT: 0x02 */
masahikofukasawa 0:51fa46d39a3e 51 } OperationMode;
masahikofukasawa 0:51fa46d39a3e 52
masahikofukasawa 0:51fa46d39a3e 53 /**
masahikofukasawa 0:51fa46d39a3e 54 * Enum for Cut-off frequency for tempearature sensor setting.
masahikofukasawa 0:51fa46d39a3e 55 */
masahikofukasawa 0:51fa46d39a3e 56 typedef enum {
masahikofukasawa 0:51fa46d39a3e 57 FCTMP_NOFILTER = 0x00, /**< No Filter */
masahikofukasawa 0:51fa46d39a3e 58 FCTMP_2P5HZ = 0x01, /**< Fc = 2.5 Hz */
masahikofukasawa 0:51fa46d39a3e 59 FCTMP_0P9HZ = 0x02, /**< Fc = 0.9 Hz */
masahikofukasawa 0:51fa46d39a3e 60 FCTMP_0P45HZ = 0x03, /**< Fc = 0.45 Hz */
masahikofukasawa 0:51fa46d39a3e 61 FCTMP_0P22HZ = 0x04, /**< Fc = 0.22 Hz */
masahikofukasawa 0:51fa46d39a3e 62 } FcTmp;
masahikofukasawa 0:51fa46d39a3e 63
masahikofukasawa 0:51fa46d39a3e 64 /**
masahikofukasawa 0:51fa46d39a3e 65 * Enum for Cut-off frequency for IR sensor setting.
masahikofukasawa 0:51fa46d39a3e 66 */
masahikofukasawa 0:51fa46d39a3e 67 typedef enum {
masahikofukasawa 0:51fa46d39a3e 68 FCIR_NOFILTER = 0x00, /**< No Filter */
masahikofukasawa 0:51fa46d39a3e 69 FCIR_2P5HZ = 0x01, /**< Fc = 2.5 Hz */
masahikofukasawa 0:51fa46d39a3e 70 FCIR_0P9HZ = 0x02, /**< Fc = 0.9 Hz */
masahikofukasawa 0:51fa46d39a3e 71 FCIR_0P45HZ = 0x03, /**< Fc = 0.45 Hz */
masahikofukasawa 0:51fa46d39a3e 72 } FcIr;
masahikofukasawa 0:51fa46d39a3e 73
masahikofukasawa 0:51fa46d39a3e 74 /**
tkstreet 1:2035a4a54d3f 75 * Structure for interrupt status.
masahikofukasawa 0:51fa46d39a3e 76 */
masahikofukasawa 0:51fa46d39a3e 77 typedef struct {
tkstreet 1:2035a4a54d3f 78 bool irh; /**< IR Sensor crossed high threshold. */
tkstreet 1:2035a4a54d3f 79 bool irl; /**< IR Sensor crossed low threshold. */
tkstreet 1:2035a4a54d3f 80 bool tmph; /**< Tempearture Sensor crossed high threshold. */
tkstreet 1:2035a4a54d3f 81 bool tmpl; /**< Temperature Sensor crossed low threshold. */
tkstreet 1:2035a4a54d3f 82 bool dr; /**< Data Ready. */
masahikofukasawa 0:51fa46d39a3e 83 } InterruptStatus;
masahikofukasawa 0:51fa46d39a3e 84
masahikofukasawa 0:51fa46d39a3e 85 /**
tkstreet 1:2035a4a54d3f 86 * Structure to hold threshold levels.
masahikofukasawa 0:51fa46d39a3e 87 */
masahikofukasawa 0:51fa46d39a3e 88 typedef struct {
tkstreet 1:2035a4a54d3f 89 int16_t thirh; /**< High Threshold level for IR sensor. */
tkstreet 1:2035a4a54d3f 90 int16_t thirl; /**< Low Threshold level of IR sensor. */
masahikofukasawa 0:51fa46d39a3e 91 int16_t thtmph; /**< High Threshold level of temperature sensor. */
masahikofukasawa 0:51fa46d39a3e 92 int16_t thtmpl; /**< Low Threshold level of temperature sensor. */
masahikofukasawa 0:51fa46d39a3e 93 } Threshold;
masahikofukasawa 0:51fa46d39a3e 94
masahikofukasawa 0:51fa46d39a3e 95 /**
tkstreet 1:2035a4a54d3f 96 * Structure to hold all sensor data: IR, temperature, and interrupt flags.
masahikofukasawa 0:51fa46d39a3e 97 */
masahikofukasawa 0:51fa46d39a3e 98 typedef struct {
tkstreet 1:2035a4a54d3f 99 InterruptStatus intStatus; /**< Interrupt status object */
tkstreet 1:2035a4a54d3f 100 int16_t ir; /**< IR Sensor Data (pA) */
tkstreet 1:2035a4a54d3f 101 int16_t temperature; /**< Temperature Data (deg C) */
tkstreet 1:2035a4a54d3f 102 bool dor; /**< Data Overrun: 1:data skip, 0:after ST2 read*/
masahikofukasawa 0:51fa46d39a3e 103 } SensorData;
tkstreet 1:2035a4a54d3f 104
masahikofukasawa 0:51fa46d39a3e 105 /**
masahikofukasawa 0:51fa46d39a3e 106 * Constructor.
masahikofukasawa 0:51fa46d39a3e 107 *
tkstreet 1:2035a4a54d3f 108 * @param conn Instance of I2C
tkstreet 1:2035a4a54d3f 109 * @param addr Slave address of the device
masahikofukasawa 0:51fa46d39a3e 110 */
masahikofukasawa 0:51fa46d39a3e 111 AK9752();
masahikofukasawa 0:51fa46d39a3e 112
tkstreet 1:2035a4a54d3f 113 /**
tkstreet 1:2035a4a54d3f 114 * Initialize AK9752 connection.
tkstreet 1:2035a4a54d3f 115 *
tkstreet 1:2035a4a54d3f 116 * @param conn Instance of I2C
tkstreet 1:2035a4a54d3f 117 * @param addr I2C slave address
tkstreet 1:2035a4a54d3f 118 */
masahikofukasawa 0:51fa46d39a3e 119 void init(I2C *conn, SlaveAddress addr);
masahikofukasawa 0:51fa46d39a3e 120
masahikofukasawa 0:51fa46d39a3e 121 /**
masahikofukasawa 0:51fa46d39a3e 122 * Checks AK9752 connection.
tkstreet 1:2035a4a54d3f 123 *
tkstreet 1:2035a4a54d3f 124 * @return SUCCESS if connection is confirmed, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 125 */
masahikofukasawa 0:51fa46d39a3e 126 Status checkConnection();
masahikofukasawa 0:51fa46d39a3e 127
masahikofukasawa 0:51fa46d39a3e 128 /**
masahikofukasawa 0:51fa46d39a3e 129 * Gets interrupt enable/disable status.
tkstreet 1:2035a4a54d3f 130 *
tkstreet 1:2035a4a54d3f 131 * @param intStatus Interrupt enable status
tkstreet 1:2035a4a54d3f 132 *
masahikofukasawa 0:51fa46d39a3e 133 * @return SUCCESS if the interrupt status is obtained successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 134 */
masahikofukasawa 0:51fa46d39a3e 135 Status getInterruptEnable(InterruptStatus *intStatus);
masahikofukasawa 0:51fa46d39a3e 136
masahikofukasawa 0:51fa46d39a3e 137 /**
masahikofukasawa 0:51fa46d39a3e 138 * Sets interrupt enable/disable status.
tkstreet 1:2035a4a54d3f 139 *
masahikofukasawa 0:51fa46d39a3e 140 * @param intStatus interrupt status
tkstreet 1:2035a4a54d3f 141 *
masahikofukasawa 0:51fa46d39a3e 142 * @return SUCCESS if the interrupt status is set successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 143 */
masahikofukasawa 0:51fa46d39a3e 144 Status setInterruptEnable(const InterruptStatus *intStatus);
masahikofukasawa 0:51fa46d39a3e 145
masahikofukasawa 0:51fa46d39a3e 146 /**
tkstreet 1:2035a4a54d3f 147 * Gets sensor operation mode: Standby, Continuous or Single-Shot.
tkstreet 1:2035a4a54d3f 148 *
masahikofukasawa 0:51fa46d39a3e 149 * @param mode Pointer to the operation mode.
masahikofukasawa 0:51fa46d39a3e 150 * @param fc_tmp Pointer to the tempearture sensor filter setting.
masahikofukasawa 0:51fa46d39a3e 151 * @param fc_ir Pointer to the IR sensor filter setting.
tkstreet 1:2035a4a54d3f 152 *
masahikofukasawa 0:51fa46d39a3e 153 * @return SUCCESS if operation mode is set successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 154 */
masahikofukasawa 0:51fa46d39a3e 155 Status getOperationMode(OperationMode *mode, FcTmp *fc_tmp, FcIr *fc_ir);
masahikofukasawa 0:51fa46d39a3e 156
masahikofukasawa 0:51fa46d39a3e 157 /**
tkstreet 1:2035a4a54d3f 158 * Sets sensor Operation mode: Standby, Continuous or Single-Shot.
tkstreet 1:2035a4a54d3f 159 *
tkstreet 1:2035a4a54d3f 160 * @param mode Operation mode to be set.
tkstreet 1:2035a4a54d3f 161 * @param fc_tmp Filter cut-off frequency setting for temperature sensor.
tkstreet 1:2035a4a54d3f 162 * @param fc_ir Filter cut-off frequency setting for IR sensor.
tkstreet 1:2035a4a54d3f 163 *
masahikofukasawa 0:51fa46d39a3e 164 * @return SUCCESS if operation mode is set successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 165 */
masahikofukasawa 0:51fa46d39a3e 166 Status setOperationMode(OperationMode mode, FcTmp fc_tmp = FCTMP_NOFILTER, FcIr fc_ir = FCIR_NOFILTER);
masahikofukasawa 0:51fa46d39a3e 167
masahikofukasawa 0:51fa46d39a3e 168 /**
tkstreet 1:2035a4a54d3f 169 * Sets threshold of IR/temperature sensor.
tkstreet 1:2035a4a54d3f 170 *
masahikofukasawa 0:51fa46d39a3e 171 * @param th Pointer to the threshold structure to be set.
tkstreet 1:2035a4a54d3f 172 *
masahikofukasawa 0:51fa46d39a3e 173 * @return SUCCESS if threshold is set successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 174 */
masahikofukasawa 0:51fa46d39a3e 175 Status setThreshold(const Threshold *th);
masahikofukasawa 0:51fa46d39a3e 176
masahikofukasawa 0:51fa46d39a3e 177 /**
tkstreet 1:2035a4a54d3f 178 * Gets threshold of IR/temperature sensor.
tkstreet 1:2035a4a54d3f 179 *
masahikofukasawa 0:51fa46d39a3e 180 * @param th Pointer to the threshold structure to store the read data.
tkstreet 1:2035a4a54d3f 181 *
masahikofukasawa 0:51fa46d39a3e 182 * @return SUCCESS if threshold is read successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 183 */
masahikofukasawa 0:51fa46d39a3e 184 Status getThreshold(Threshold *th);
masahikofukasawa 0:51fa46d39a3e 185
masahikofukasawa 0:51fa46d39a3e 186 /**
tkstreet 1:2035a4a54d3f 187 * Resets the AK9752.
tkstreet 1:2035a4a54d3f 188 *
masahikofukasawa 0:51fa46d39a3e 189 * @return SUCCESS if the device is reset successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 190 */
masahikofukasawa 0:51fa46d39a3e 191 Status reset();
masahikofukasawa 0:51fa46d39a3e 192
masahikofukasawa 0:51fa46d39a3e 193 /**
tkstreet 1:2035a4a54d3f 194 * Retrieves all sensor data: IR & Temperature data, and ST1, ST2, & INTCAUSE
tkstreet 1:2035a4a54d3f 195 * registers.
tkstreet 1:2035a4a54d3f 196 *
masahikofukasawa 0:51fa46d39a3e 197 * @param data Pointer to the SensorData structure object to store the read data.
tkstreet 1:2035a4a54d3f 198 *
masahikofukasawa 0:51fa46d39a3e 199 * @return SUCCESS if data is obtained successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 200 */
masahikofukasawa 0:51fa46d39a3e 201 Status getSensorData(SensorData *data);
masahikofukasawa 0:51fa46d39a3e 202
masahikofukasawa 0:51fa46d39a3e 203 /**
tkstreet 1:2035a4a54d3f 204 * Reads indicated AK9752 register(s).
tkstreet 1:2035a4a54d3f 205 *
masahikofukasawa 0:51fa46d39a3e 206 * @param registerAddress Register address to be read.
tkstreet 1:2035a4a54d3f 207 * @param buf Buffer to store the register data.
masahikofukasawa 0:51fa46d39a3e 208 * @param length Length in bytes to be read.
tkstreet 1:2035a4a54d3f 209 *
masahikofukasawa 0:51fa46d39a3e 210 * @return SUCCESS if data is read successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 211 */
masahikofukasawa 0:51fa46d39a3e 212 Status read(char registerAddress, char *buf, int length);
masahikofukasawa 0:51fa46d39a3e 213
masahikofukasawa 0:51fa46d39a3e 214 /**
tkstreet 1:2035a4a54d3f 215 * Writes data into AK9752 register(s).
tkstreet 1:2035a4a54d3f 216 *
masahikofukasawa 0:51fa46d39a3e 217 * @param registerAddress Register address to be written.
masahikofukasawa 0:51fa46d39a3e 218 * @param buf Data to be written.
masahikofukasawa 0:51fa46d39a3e 219 * @param length Length in bytes to be written.
tkstreet 1:2035a4a54d3f 220 *
masahikofukasawa 0:51fa46d39a3e 221 * @return SUCCESS if data is written successfully, otherwise returns other value.
masahikofukasawa 0:51fa46d39a3e 222 */
masahikofukasawa 0:51fa46d39a3e 223 Status write(char registerAddress, const char *buf, int length);
masahikofukasawa 0:51fa46d39a3e 224
masahikofukasawa 0:51fa46d39a3e 225 private:
masahikofukasawa 0:51fa46d39a3e 226 /**
tkstreet 1:2035a4a54d3f 227 * I2C connection.
masahikofukasawa 0:51fa46d39a3e 228 */
masahikofukasawa 0:51fa46d39a3e 229 I2C *connection;
masahikofukasawa 0:51fa46d39a3e 230
masahikofukasawa 0:51fa46d39a3e 231 /**
tkstreet 1:2035a4a54d3f 232 * Slave address.
masahikofukasawa 0:51fa46d39a3e 233 */
masahikofukasawa 0:51fa46d39a3e 234 SlaveAddress slaveAddress;
masahikofukasawa 0:51fa46d39a3e 235
masahikofukasawa 0:51fa46d39a3e 236 // const static uint8_t IR_DATA_LEN = 7; /**<! Data length of IR sensor. From ST1 to ST2. */
masahikofukasawa 0:51fa46d39a3e 237
masahikofukasawa 0:51fa46d39a3e 238 };
masahikofukasawa 0:51fa46d39a3e 239
masahikofukasawa 0:51fa46d39a3e 240 #endif // __AK9752_H__