Change to comply with mbed os 5.1, as the attach function as used has been deprecated
Dependents: Barometer-Example LoRaWAN-demo-72-bootcamp
Fork of BMP085 by
BMP085 library supporting mbed os low power
BMP085.h@5:64852447275f, 2017-03-02 (annotated)
- Committer:
- abouillot
- Date:
- Thu Mar 02 14:04:09 2017 +0000
- Revision:
- 5:64852447275f
- Parent:
- 3:4622b90b4657
Fixed some display error in traces and made traces switchable with #define TRACE
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
asmellby | 0:fb197da45ba8 | 1 | /** |
asmellby | 0:fb197da45ba8 | 2 | * Bosch BMP085 Barometer driver |
asmellby | 0:fb197da45ba8 | 3 | */ |
asmellby | 0:fb197da45ba8 | 4 | |
asmellby | 0:fb197da45ba8 | 5 | #ifndef BMP085_H |
asmellby | 0:fb197da45ba8 | 6 | #define BMP085_H |
asmellby | 0:fb197da45ba8 | 7 | |
asmellby | 0:fb197da45ba8 | 8 | #include <stdint.h> |
asmellby | 0:fb197da45ba8 | 9 | #include "mbed.h" |
asmellby | 0:fb197da45ba8 | 10 | |
asmellby | 0:fb197da45ba8 | 11 | #define BMP085_ADDR (0x77<<1) |
asmellby | 0:fb197da45ba8 | 12 | |
asmellby | 0:fb197da45ba8 | 13 | typedef enum { |
asmellby | 0:fb197da45ba8 | 14 | BMP085_CAL_AC1 = 0xAA, |
asmellby | 0:fb197da45ba8 | 15 | BMP085_CAL_AC2 = 0xAC, |
asmellby | 0:fb197da45ba8 | 16 | BMP085_CAL_AC3 = 0xAE, |
asmellby | 0:fb197da45ba8 | 17 | BMP085_CAL_AC4 = 0xB0, |
asmellby | 0:fb197da45ba8 | 18 | BMP085_CAL_AC5 = 0xB2, |
asmellby | 0:fb197da45ba8 | 19 | BMP085_CAL_AC6 = 0xB4, |
asmellby | 0:fb197da45ba8 | 20 | BMP085_CAL_B1 = 0xB6, |
asmellby | 0:fb197da45ba8 | 21 | BMP085_CAL_B2 = 0xB8, |
asmellby | 0:fb197da45ba8 | 22 | BMP085_CAL_MB = 0xBA, |
asmellby | 0:fb197da45ba8 | 23 | BMP085_CAL_MC = 0xBC, |
asmellby | 0:fb197da45ba8 | 24 | BMP085_CAL_MD = 0xBE, |
asmellby | 0:fb197da45ba8 | 25 | BMP085_CHIPID = 0xD0, |
asmellby | 0:fb197da45ba8 | 26 | BMP085_VERSION = 0xD1, |
asmellby | 0:fb197da45ba8 | 27 | BMP085_SOFTRESET = 0xE0, |
asmellby | 0:fb197da45ba8 | 28 | BMP085_CTRL = 0xF4, |
asmellby | 0:fb197da45ba8 | 29 | BMP085_DATA_TEMP = 0xF6, |
asmellby | 0:fb197da45ba8 | 30 | BMP085_DATA_PRESSURE = 0xF6, |
asmellby | 0:fb197da45ba8 | 31 | BMP085_CMD_READ_TEMP = 0x2E, |
asmellby | 0:fb197da45ba8 | 32 | BMP085_CMD_READ_PRESSURE = 0x34 |
asmellby | 0:fb197da45ba8 | 33 | } BMP085_Register; |
asmellby | 0:fb197da45ba8 | 34 | |
asmellby | 0:fb197da45ba8 | 35 | typedef enum { |
asmellby | 0:fb197da45ba8 | 36 | BMP085_MODE_ULTRA_LOW_POWER = 0, |
asmellby | 0:fb197da45ba8 | 37 | BMP085_MODE_STANDARD = 1, |
asmellby | 0:fb197da45ba8 | 38 | BMP085_MODE_HIGH_RESOLUTION = 2, |
asmellby | 0:fb197da45ba8 | 39 | BMP085_MODE_ULTRA_HIGH_RESOLUTION = 3 |
asmellby | 0:fb197da45ba8 | 40 | } BMP085_Mode; |
asmellby | 0:fb197da45ba8 | 41 | |
asmellby | 0:fb197da45ba8 | 42 | typedef enum { |
asmellby | 0:fb197da45ba8 | 43 | BMP085_IDLE, |
abouillot | 3:4622b90b4657 | 44 | BMP085_BUSY, |
abouillot | 3:4622b90b4657 | 45 | BMP085_TIMEOUT |
asmellby | 0:fb197da45ba8 | 46 | } BMP085_State; |
asmellby | 0:fb197da45ba8 | 47 | |
asmellby | 0:fb197da45ba8 | 48 | typedef struct { |
asmellby | 0:fb197da45ba8 | 49 | int16_t ac1; |
asmellby | 0:fb197da45ba8 | 50 | int16_t ac2; |
asmellby | 0:fb197da45ba8 | 51 | int16_t ac3; |
asmellby | 0:fb197da45ba8 | 52 | uint16_t ac4; |
asmellby | 0:fb197da45ba8 | 53 | uint16_t ac5; |
asmellby | 0:fb197da45ba8 | 54 | uint16_t ac6; |
asmellby | 0:fb197da45ba8 | 55 | int16_t b1; |
asmellby | 0:fb197da45ba8 | 56 | int16_t b2; |
asmellby | 0:fb197da45ba8 | 57 | int16_t mb; |
asmellby | 0:fb197da45ba8 | 58 | int16_t mc; |
asmellby | 0:fb197da45ba8 | 59 | int16_t md; |
asmellby | 0:fb197da45ba8 | 60 | } BMP085_Calibration_Data; |
asmellby | 0:fb197da45ba8 | 61 | |
asmellby | 0:fb197da45ba8 | 62 | class BMP085 { |
asmellby | 0:fb197da45ba8 | 63 | public: |
asmellby | 0:fb197da45ba8 | 64 | BMP085(PinName sda, PinName scl, BMP085_Mode mode = BMP085_MODE_STANDARD) : _i2c(sda, scl), _mode(mode), _state(BMP085_IDLE) { init(); }; |
asmellby | 0:fb197da45ba8 | 65 | BMP085(I2C & i2c, BMP085_Mode mode = BMP085_MODE_STANDARD) : _i2c(i2c), _mode(mode), _state(BMP085_IDLE) { init(); }; |
asmellby | 0:fb197da45ba8 | 66 | |
asmellby | 0:fb197da45ba8 | 67 | float get_temperature(void) { return _temperature; }; |
asmellby | 0:fb197da45ba8 | 68 | float get_pressure(void) { return _pressure; }; |
asmellby | 0:fb197da45ba8 | 69 | void measure(); |
abouillot | 2:dcd90bee9ac2 | 70 | void _callback_handler_timeout(); |
asmellby | 0:fb197da45ba8 | 71 | protected: |
asmellby | 0:fb197da45ba8 | 72 | void init(void); |
asmellby | 0:fb197da45ba8 | 73 | uint16_t read_cal_register(BMP085_Register reg); |
asmellby | 0:fb197da45ba8 | 74 | uint16_t read_uc_temperature(void); |
asmellby | 0:fb197da45ba8 | 75 | uint32_t read_uc_pressure(void); |
asmellby | 0:fb197da45ba8 | 76 | I2C _i2c; |
asmellby | 0:fb197da45ba8 | 77 | BMP085_Mode _mode; |
asmellby | 0:fb197da45ba8 | 78 | BMP085_State _state; |
asmellby | 0:fb197da45ba8 | 79 | float _temperature; |
asmellby | 0:fb197da45ba8 | 80 | float _pressure; |
asmellby | 0:fb197da45ba8 | 81 | BMP085_Calibration_Data _cal_data; |
asmellby | 0:fb197da45ba8 | 82 | private: |
abouillot | 3:4622b90b4657 | 83 | int transfer(char *tx, int tx_len, char *rx, int rx_len); |
abouillot | 3:4622b90b4657 | 84 | int wait(float delay); |
abouillot | 3:4622b90b4657 | 85 | |
asmellby | 0:fb197da45ba8 | 86 | event_callback_t _callback; |
asmellby | 0:fb197da45ba8 | 87 | void _callback_handler(int event); |
asmellby | 0:fb197da45ba8 | 88 | uint8_t _tx_buf[2]; |
asmellby | 0:fb197da45ba8 | 89 | uint8_t _rx_buf[3]; |
abouillot | 3:4622b90b4657 | 90 | |
abouillot | 3:4622b90b4657 | 91 | Timer _timeout; |
asmellby | 0:fb197da45ba8 | 92 | }; |
asmellby | 0:fb197da45ba8 | 93 | |
asmellby | 0:fb197da45ba8 | 94 | #endif /* BMP085_H */ |