read and push
Dependencies: X_NUCLEO_IKS01A1 MLX90614 d7a_1x wizzi-utils
Fork of D7A_1x_demo_sensors_OS5 by
sensors.h@4:8ac150ec1532, 2017-01-30 (annotated)
- Committer:
- Jeej
- Date:
- Mon Jan 30 11:45:24 2017 +0000
- Revision:
- 4:8ac150ec1532
- Parent:
- 1:711fb7d8127b
- Child:
- 7:8de29807f970
First publication.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 0:7e1fdc4d6e1c | 1 | #ifndef _SENSORS_H_ |
Jeej | 0:7e1fdc4d6e1c | 2 | #define _SENSORS_H_ |
Jeej | 0:7e1fdc4d6e1c | 3 | |
Jeej | 0:7e1fdc4d6e1c | 4 | #include "hts221/hts221_class.h" |
Jeej | 0:7e1fdc4d6e1c | 5 | #include "lis3mdl/lis3mdl_class.h" |
Jeej | 0:7e1fdc4d6e1c | 6 | #include "lps25h/lps25h_class.h" |
Jeej | 0:7e1fdc4d6e1c | 7 | #include "lsm6ds0/lsm6ds0_class.h" |
Jeej | 4:8ac150ec1532 | 8 | #include "x_nucleo_iks01a1_targets.h" |
Jeej | 0:7e1fdc4d6e1c | 9 | #include "d7a.h" |
Jeej | 0:7e1fdc4d6e1c | 10 | |
Jeej | 0:7e1fdc4d6e1c | 11 | // Simulate the sensors (if X_NUCLEO_IKS01A1 not connected) |
Jeej | 1:711fb7d8127b | 12 | #if defined(TARGET_STM32L432KC) |
Jeej | 1:711fb7d8127b | 13 | #define _SENSORS_SIMU_ 1 // Always simulate on this platform |
Jeej | 1:711fb7d8127b | 14 | #endif |
Jeej | 1:711fb7d8127b | 15 | |
Jeej | 1:711fb7d8127b | 16 | #ifndef _SENSORS_SIMU_ |
Jeej | 1:711fb7d8127b | 17 | #define _SENSORS_SIMU_ 1 |
Jeej | 1:711fb7d8127b | 18 | #endif |
Jeej | 0:7e1fdc4d6e1c | 19 | |
Jeej | 0:7e1fdc4d6e1c | 20 | // Select the sensors |
Jeej | 0:7e1fdc4d6e1c | 21 | #if 1 |
Jeej | 0:7e1fdc4d6e1c | 22 | #define _MAG_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 23 | #define _ACC_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 24 | #define _GYR_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 25 | #define _PRE_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 26 | #define _HUM_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 27 | #define _TEM1_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 28 | #define _TEM2_EN_ 1 |
Jeej | 0:7e1fdc4d6e1c | 29 | #else |
Jeej | 0:7e1fdc4d6e1c | 30 | #define _MAG_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 31 | #define _ACC_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 32 | #define _GYR_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 33 | #define _PRE_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 34 | #define _HUM_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 35 | #define _TEM1_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 36 | #define _TEM2_EN_ 0 |
Jeej | 0:7e1fdc4d6e1c | 37 | #endif |
Jeej | 0:7e1fdc4d6e1c | 38 | |
Jeej | 0:7e1fdc4d6e1c | 39 | // Initialisation of the sensor thread's context |
Jeej | 0:7e1fdc4d6e1c | 40 | #define SENSOR_THREAD_CTX(_name,_vfid,_cfid,_read_func,_nb_values) \ |
Jeej | 0:7e1fdc4d6e1c | 41 | int32_t _name##_last_report[_nb_values];\ |
Jeej | 0:7e1fdc4d6e1c | 42 | int32_t _name##_current_value[_nb_values];\ |
Jeej | 0:7e1fdc4d6e1c | 43 | sensor_thread_ctx_t _name##_thread_ctx = {\ |
Jeej | 0:7e1fdc4d6e1c | 44 | .nb_values = _nb_values,\ |
Jeej | 0:7e1fdc4d6e1c | 45 | .data_size = _nb_values * sizeof(int32_t),\ |
Jeej | 0:7e1fdc4d6e1c | 46 | .read_value = _read_func,\ |
Jeej | 0:7e1fdc4d6e1c | 47 | .last_report_value = (int32_t*)&_name##_last_report,\ |
Jeej | 0:7e1fdc4d6e1c | 48 | .current_value = (int32_t*)&_name##_current_value,\ |
Jeej | 0:7e1fdc4d6e1c | 49 | .value_file_id = _vfid,\ |
Jeej | 0:7e1fdc4d6e1c | 50 | .cfg_file_id = _cfid\ |
Jeej | 0:7e1fdc4d6e1c | 51 | } |
Jeej | 0:7e1fdc4d6e1c | 52 | |
Jeej | 0:7e1fdc4d6e1c | 53 | extern LIS3MDL *magnetometer; |
Jeej | 0:7e1fdc4d6e1c | 54 | extern LSM6DS0 *accelerometer; |
Jeej | 0:7e1fdc4d6e1c | 55 | extern LSM6DS0 *gyroscope; |
Jeej | 0:7e1fdc4d6e1c | 56 | extern LPS25H *pressure_sensor; |
Jeej | 0:7e1fdc4d6e1c | 57 | extern LPS25H *temp_sensor2; |
Jeej | 0:7e1fdc4d6e1c | 58 | extern HTS221 *humidity_sensor; |
Jeej | 0:7e1fdc4d6e1c | 59 | extern HTS221 *temp_sensor1; |
Jeej | 0:7e1fdc4d6e1c | 60 | |
Jeej | 0:7e1fdc4d6e1c | 61 | |
Jeej | 0:7e1fdc4d6e1c | 62 | // Types of reporting |
Jeej | 0:7e1fdc4d6e1c | 63 | typedef enum { |
Jeej | 0:7e1fdc4d6e1c | 64 | REPORT_ALWAYS, |
Jeej | 0:7e1fdc4d6e1c | 65 | REPORT_ON_DIFFERENCE, |
Jeej | 0:7e1fdc4d6e1c | 66 | REPORT_ON_THRESHOLD, |
Jeej | 0:7e1fdc4d6e1c | 67 | } report_type_t; |
Jeej | 0:7e1fdc4d6e1c | 68 | |
Jeej | 0:7e1fdc4d6e1c | 69 | // Sensor reporting configuration |
Jeej | 0:7e1fdc4d6e1c | 70 | TYPEDEF_STRUCT_PACKED { |
Jeej | 0:7e1fdc4d6e1c | 71 | uint8_t report_type; // Type of report asked |
Jeej | 0:7e1fdc4d6e1c | 72 | uint32_t period; // Measure period (ms) |
Jeej | 0:7e1fdc4d6e1c | 73 | uint32_t max_period; // Maximum time between reports (s) |
Jeej | 0:7e1fdc4d6e1c | 74 | uint32_t max_diff; // Maximum difference allowed between two reported values |
Jeej | 0:7e1fdc4d6e1c | 75 | int32_t threshold_high; // High threshold value triggering a report |
Jeej | 0:7e1fdc4d6e1c | 76 | int32_t threshold_low; // Low threshold value triggering a report |
Jeej | 0:7e1fdc4d6e1c | 77 | } sensor_config_t; |
Jeej | 0:7e1fdc4d6e1c | 78 | |
Jeej | 0:7e1fdc4d6e1c | 79 | typedef struct |
Jeej | 0:7e1fdc4d6e1c | 80 | { |
Jeej | 0:7e1fdc4d6e1c | 81 | // Number of data fields |
Jeej | 0:7e1fdc4d6e1c | 82 | uint32_t nb_values; |
Jeej | 0:7e1fdc4d6e1c | 83 | // Total size of data |
Jeej | 0:7e1fdc4d6e1c | 84 | uint32_t data_size; |
Jeej | 0:7e1fdc4d6e1c | 85 | // Read value function |
Jeej | 0:7e1fdc4d6e1c | 86 | bool (*read_value)(int32_t*); |
Jeej | 0:7e1fdc4d6e1c | 87 | // Last reported value |
Jeej | 0:7e1fdc4d6e1c | 88 | int32_t* last_report_value; |
Jeej | 0:7e1fdc4d6e1c | 89 | // Current measured value |
Jeej | 0:7e1fdc4d6e1c | 90 | int32_t* current_value; |
Jeej | 0:7e1fdc4d6e1c | 91 | |
Jeej | 0:7e1fdc4d6e1c | 92 | // File ID of the sensor value file |
Jeej | 0:7e1fdc4d6e1c | 93 | uint8_t value_file_id; |
Jeej | 0:7e1fdc4d6e1c | 94 | // Sensor configuration file ID |
Jeej | 0:7e1fdc4d6e1c | 95 | uint8_t cfg_file_id; |
Jeej | 0:7e1fdc4d6e1c | 96 | // Sensor configuration context |
Jeej | 0:7e1fdc4d6e1c | 97 | sensor_config_t cfg; |
Jeej | 0:7e1fdc4d6e1c | 98 | } sensor_thread_ctx_t; |
Jeej | 0:7e1fdc4d6e1c | 99 | |
Jeej | 0:7e1fdc4d6e1c | 100 | |
Jeej | 0:7e1fdc4d6e1c | 101 | bool Init_HTS221(HTS221* ht_sensor); |
Jeej | 0:7e1fdc4d6e1c | 102 | bool Init_LIS3MDL(LIS3MDL* magnetometer); |
Jeej | 0:7e1fdc4d6e1c | 103 | bool Init_LPS25H(LPS25H* pt_sensor); |
Jeej | 0:7e1fdc4d6e1c | 104 | bool Init_LSM6DS0(LSM6DS0* gyro_lsm6ds0); |
Jeej | 0:7e1fdc4d6e1c | 105 | |
Jeej | 0:7e1fdc4d6e1c | 106 | void sensors_init(void); |
Jeej | 0:7e1fdc4d6e1c | 107 | |
Jeej | 0:7e1fdc4d6e1c | 108 | bool mag_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 109 | bool acc_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 110 | bool gyr_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 111 | bool pre_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 112 | bool hum_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 113 | bool tem1_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 114 | bool tem2_get_value(int32_t* buf); |
Jeej | 0:7e1fdc4d6e1c | 115 | |
Jeej | 0:7e1fdc4d6e1c | 116 | #endif // _SENSORS_H_ |