read and push

Dependencies:   X_NUCLEO_IKS01A1 MLX90614 d7a_1x wizzi-utils

Fork of D7A_1x_demo_sensors_OS5 by WizziLab

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?

UserRevisionLine numberNew 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_