MVMFirmwareCpp v0.1
driver_SFM3019.h
Go to the documentation of this file.
1 // driver_SFM3019.h
2 
3 #ifndef _DRIVER_SFM3019_h
4 #define _DRIVER_SFM3019_h
5 
6 #if defined(ARDUINO) && ARDUINO >= 100
7  #include "arduino.h"
8 #else
9  #include "WProgram.h"
10 #endif
11 #include "DriverContext.h"
12 typedef struct {
13  uint8_t i2c_address;
14  int16_t flow_scale;
15  int16_t flow_offset;
16 } SfmConfig;
17 
18 
19 typedef enum {
30 
31 
33 {
34 public:
35 
36 
37  bool Init(t_i2cdevices device, void* hw_handle);
38  bool doMeasure(float* Flow, float* T);
39  float GetIntegral();
40  void ResetIntegral();
41 
42 private:
43 
44  uint8_t i2c_address;
46 
47 
48  HW* hwi;
50 
51  float Integral;
52  bool _initialized = false;
53 
58  const char* sfm_common_get_driver_version(void);
59 
69  int16_t sfm_common_probe(uint8_t i2c_address);
70 
83  uint32_t* product_number,
84  uint8_t(*serial_number)[8]);
85 
98  const SfmConfig* sfm_config,
99  SfmCmdStartContinuousMeasurement measurement_cmd, int16_t* flow_scale,
100  int16_t* flow_offset, uint16_t* unit);
101 
112  int16_t sfm_common_convert_flow_float(const SfmConfig* sfm_config,
113  int16_t flow_raw, float* flow);
114 
123  float sfm_common_convert_temperature_float(int16_t temperature_raw);
124 
134  SfmConfig* sfm_config, SfmCmdStartContinuousMeasurement measurement_cmd);
135 
146  int16_t sfm_common_read_measurement_raw(const SfmConfig* sfm_config,
147  int16_t* flow_raw,
148  int16_t* temperature_raw,
149  uint16_t* status);
150 
159 
160 
161  uint8_t sensirion_common_generate_crc(uint8_t* data, uint16_t count);
162 
163  int8_t sensirion_common_check_crc(uint8_t* data, uint16_t count,
164  uint8_t checksum);
165 
174  int16_t sensirion_i2c_general_call_reset(void);
175 
190  uint16_t sensirion_fill_cmd_send_buf(uint8_t* buf, uint16_t cmd,
191  const uint16_t* args, uint8_t num_args);
192 
203  int16_t sensirion_i2c_read_words(uint8_t address, uint16_t* data_words,
204  uint16_t num_words);
205 
222  int16_t sensirion_i2c_read_words_as_bytes(uint8_t address, uint8_t* data,
223  uint16_t num_words);
224 
232  int16_t sensirion_i2c_write_cmd(uint8_t address, uint16_t command);
233 
244  int16_t sensirion_i2c_write_cmd_with_args(uint8_t address, uint16_t command,
245  const uint16_t* data_words,
246  uint16_t num_words);
247 
259  int16_t sensirion_i2c_delayed_read_cmd(uint8_t address, uint16_t cmd,
260  uint32_t delay_us, uint16_t* data_words,
261  uint16_t num_words);
272  int16_t sensirion_i2c_read_cmd(uint8_t address, uint16_t cmd,
273  uint16_t* data_words, uint16_t num_words);
274 
275 
283  int16_t sfm3019_probe(void);
284 
289 
290 
291 
302  int16_t sensirion_i2c_select_bus(uint8_t bus_idx);
303 
308  void sensirion_i2c_init(void);
309 
314 
325  int8_t sensirion_i2c_read(uint8_t address, uint8_t* data, uint16_t count);
326 
338  int8_t sensirion_i2c_write(uint8_t address, const uint8_t* data,
339  uint16_t count);
340 
357  void sensirion_sleep_usec(uint32_t useconds);
358 
359 
360 
362 
363 };
364 
365 
366 #endif
367 
SensorSFM3019::ResetIntegral
void ResetIntegral()
Definition: driver_SFM3019.cpp:494
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS3
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS3
Definition: driver_SFM3019.h:23
DriverContext.h
SensorSFM3019::Init
bool Init(t_i2cdevices device, void *hw_handle)
Definition: driver_SFM3019.cpp:389
SensorSFM3019::sensirion_i2c_write
int8_t sensirion_i2c_write(uint8_t address, const uint8_t *data, uint16_t count)
Definition: driver_SFM3019.cpp:228
SensorSFM3019::i2c_address
uint8_t i2c_address
Definition: driver_SFM3019.h:44
SensorSFM3019::sfm_common_get_driver_version
const char * sfm_common_get_driver_version(void)
Definition: driver_SFM3019.cpp:249
SensorSFM3019::GetIntegral
float GetIntegral()
Definition: driver_SFM3019.cpp:490
SensorSFM3019::sensirion_i2c_select_bus
int16_t sensirion_i2c_select_bus(uint8_t bus_idx)
SensorSFM3019::sensirion_common_check_crc
int8_t sensirion_common_check_crc(uint8_t *data, uint16_t count, uint8_t checksum)
Definition: driver_SFM3019.cpp:97
SensorSFM3019::i2c_device
t_i2cdevices i2c_device
Definition: driver_SFM3019.h:45
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_2
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_2
Definition: driver_SFM3019.h:28
arduino.h
SensorSFM3019::sfm_common_convert_temperature_float
float sfm_common_convert_temperature_float(int16_t temperature_raw)
Definition: driver_SFM3019.cpp:328
SensorSFM3019::doMeasure
bool doMeasure(float *Flow, float *T)
Definition: driver_SFM3019.cpp:461
SensorSFM3019::_initialized
bool _initialized
Definition: driver_SFM3019.h:52
SensorSFM3019::sfm_common_stop_continuous_measurement
int16_t sfm_common_stop_continuous_measurement(SfmConfig *sfm_config)
Definition: driver_SFM3019.cpp:366
SensorSFM3019::sfm_common_convert_flow_float
int16_t sfm_common_convert_flow_float(const SfmConfig *sfm_config, int16_t flow_raw, float *flow)
Definition: driver_SFM3019.cpp:316
SensorSFM3019::sensirion_i2c_read_words_as_bytes
int16_t sensirion_i2c_read_words_as_bytes(uint8_t address, uint8_t *data, uint16_t num_words)
Definition: driver_SFM3019.cpp:130
SensorSFM3019::Integral
float Integral
Definition: driver_SFM3019.h:51
SensorSFM3019::sensirion_common_generate_crc
uint8_t sensirion_common_generate_crc(uint8_t *data, uint16_t count)
Definition: driver_SFM3019.cpp:79
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS5
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS5
Definition: driver_SFM3019.h:25
SensorSFM3019::sensirion_i2c_release
void sensirion_i2c_release(void)
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS4
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS4
Definition: driver_SFM3019.h:24
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS1
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS1
Definition: driver_SFM3019.h:21
SensorSFM3019::sfm_common_start_continuous_measurement
int16_t sfm_common_start_continuous_measurement(SfmConfig *sfm_config, SfmCmdStartContinuousMeasurement measurement_cmd)
Definition: driver_SFM3019.cpp:332
SensorSFM3019::sensirion_i2c_write_cmd
int16_t sensirion_i2c_write_cmd(uint8_t address, uint16_t command)
Definition: driver_SFM3019.cpp:173
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_0
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_0
Definition: driver_SFM3019.h:26
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS0
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS0
Definition: driver_SFM3019.h:20
SensorSFM3019::sensirion_i2c_general_call_reset
int16_t sensirion_i2c_general_call_reset(void)
Definition: driver_SFM3019.cpp:104
SfmConfig::flow_offset
int16_t flow_offset
Definition: driver_SFM3019.h:15
SfmConfig::i2c_address
uint8_t i2c_address
Definition: driver_SFM3019.h:13
SensorSFM3019::sensirion_i2c_write_cmd_with_args
int16_t sensirion_i2c_write_cmd_with_args(uint8_t address, uint16_t command, const uint16_t *data_words, uint16_t num_words)
Definition: driver_SFM3019.cpp:180
SensorSFM3019::sensirion_i2c_read
int8_t sensirion_i2c_read(uint8_t address, uint8_t *data, uint16_t count)
Definition: driver_SFM3019.cpp:216
SensorSFM3019::sensirion_i2c_init
void sensirion_i2c_init(void)
SensorSFM3019::sfm_common_read_product_identifier
int16_t sfm_common_read_product_identifier(uint8_t i2c_address, uint32_t *product_number, uint8_t(*serial_number)[8])
Definition: driver_SFM3019.cpp:259
SensorSFM3019::sfm_common_probe
int16_t sfm_common_probe(uint8_t i2c_address)
Definition: driver_SFM3019.cpp:253
SensorSFM3019::sensirion_fill_cmd_send_buf
uint16_t sensirion_fill_cmd_send_buf(uint8_t *buf, uint16_t cmd, const uint16_t *args, uint8_t num_args)
Definition: driver_SFM3019.cpp:110
SensorSFM3019::sfm_common_read_scale_factor_offset_and_unit
int16_t sfm_common_read_scale_factor_offset_and_unit(const SfmConfig *sfm_config, SfmCmdStartContinuousMeasurement measurement_cmd, int16_t *flow_scale, int16_t *flow_offset, uint16_t *unit)
Definition: driver_SFM3019.cpp:284
SensorSFM3019::sfm3019_probe
int16_t sfm3019_probe(void)
Definition: driver_SFM3019.cpp:374
HW_V4
Driver for the Nuclear Instruments V4 Hardware Board.
Definition: fw_board_ni_v4.h:23
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_1
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS_MIX_1
Definition: driver_SFM3019.h:27
t_i2cdevices
t_i2cdevices
Definition: generic_definitions.h:36
SfmConfig
Definition: driver_SFM3019.h:12
SensorSFM3019::hwi
HW * hwi
Definition: driver_SFM3019.h:48
SensorSFM3019::sfm3019_create
SfmConfig sfm3019_create(void)
Definition: driver_SFM3019.cpp:378
SensorSFM3019::sensirion_i2c_read_words
int16_t sensirion_i2c_read_words(uint8_t address, uint16_t *data_words, uint16_t num_words)
Definition: driver_SFM3019.cpp:157
SensorSFM3019
Definition: driver_SFM3019.h:33
SensorSFM3019::dbg
DebugIfaceClass * dbg
Definition: driver_SFM3019.h:49
SfmConfig::flow_scale
int16_t flow_scale
Definition: driver_SFM3019.h:14
SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS2
@ SFM_CMD_START_CONTINUOUS_MEASUREMENT_GAS2
Definition: driver_SFM3019.h:22
SensorSFM3019::sensirion_i2c_read_cmd
int16_t sensirion_i2c_read_cmd(uint8_t address, uint16_t cmd, uint16_t *data_words, uint16_t num_words)
Definition: driver_SFM3019.cpp:207
DebugIfaceClass
Debug class: this class print debug message.
Definition: DebugIface.h:38
SfmCmdStartContinuousMeasurement
SfmCmdStartContinuousMeasurement
Definition: driver_SFM3019.h:19
SensorSFM3019::sensirion_sleep_usec
void sensirion_sleep_usec(uint32_t useconds)
Definition: driver_SFM3019.cpp:244
SensorSFM3019::sfm3019
SfmConfig sfm3019
Definition: driver_SFM3019.h:361
SensorSFM3019::sensirion_i2c_delayed_read_cmd
int16_t sensirion_i2c_delayed_read_cmd(uint8_t address, uint16_t cmd, uint32_t delay_us, uint16_t *data_words, uint16_t num_words)
Definition: driver_SFM3019.cpp:190
SensorSFM3019::sfm_common_read_measurement_raw
int16_t sfm_common_read_measurement_raw(const SfmConfig *sfm_config, int16_t *flow_raw, int16_t *temperature_raw, uint16_t *status)
Definition: driver_SFM3019.cpp:345