| /* |
| * This module provides the component definitions used to represent sensor |
| * data employed by the online sensor calibration algorithms. |
| */ |
| |
| #ifndef LOCATION_LBS_CONTEXTHUB_NANOAPPS_CALIBRATION_ONLINE_CALIBRATION_COMMON_DATA_SENSOR_DATA_H_ |
| #define LOCATION_LBS_CONTEXTHUB_NANOAPPS_CALIBRATION_ONLINE_CALIBRATION_COMMON_DATA_SENSOR_DATA_H_ |
| |
| #include <stdint.h> |
| #include <string.h> |
| #include <sys/types.h> |
| |
| namespace online_calibration { |
| |
| // Defines an invalid or uninitialized temperature value. |
| constexpr float kInvalidTemperatureCelsius = -274.0f; |
| |
| // Unit conversion from nanoseconds to microseconds. |
| constexpr uint64_t NanoToMicroseconds(uint64_t x) { return x / 1000; } |
| |
| // Identifies the various sensing devices used by the calibration algorithms. |
| enum class SensorType : int8_t { |
| kUndefined = 0, |
| kAccelerometerMps2 = 1, // 3-axis sensor (units = meter/sec^2). |
| kGyroscopeRps = 2, // 3-axis sensor (units = radian/sec). |
| kMagnetometerUt = 3, // 3-axis sensor (units = micro-Tesla). |
| kTemperatureCelsius = 4, // 1-axis sensor (units = degrees Celsius). |
| kBarometerHpa = 5, // 1-axis sensor (units = hecto-Pascal). |
| kWifiM = 6 // 3-axis sensor (units = meter). |
| }; |
| |
| /* |
| * SensorData is a generalized data structure used to represent sensor samples |
| * produced by either a single- or three-axis device. Usage is implied through |
| * the sensor type (i.e., Gyroscope is a three-axis sensor and would therefore |
| * use all elements of 'data'; a pressure sensor is single-dimensional and would |
| * use 'data[SensorIndex::kSingleAxis]'). This arbitration is determined |
| * at the algorithm wrapper level where knowledge of a sensor's dimensionality |
| * is clearly understood. |
| * |
| * NOTE: The unified dimensional representation makes it convenient to pass |
| * either type of data into the interface functions defined in the |
| * OnlineCalibration. |
| */ |
| |
| // Axis index definitions for SensorData::data. |
| enum SensorIndex : int8_t { |
| kSingleAxis = 0, |
| kXAxis = kSingleAxis, |
| kYAxis = 1, |
| kZAxis = 2, |
| }; |
| |
| struct SensorData { |
| // Indicates the type of sensor this data originated from. |
| SensorType type; |
| |
| // Sensor sample timestamp. |
| uint64_t timestamp_nanos; |
| |
| // Generalized sensor sample (represents either single- or three-axis data). |
| float data[3]; |
| |
| SensorData() : type(SensorType::kUndefined), timestamp_nanos(0) { |
| memset(data, 0, sizeof(data)); |
| } |
| |
| SensorData(SensorType type, uint64_t ts, float x, float y, float z) |
| : type(type), timestamp_nanos(ts) { |
| data[SensorIndex::kXAxis] = x; |
| data[SensorIndex::kYAxis] = y; |
| data[SensorIndex::kZAxis] = z; |
| } |
| |
| SensorData(SensorType type, uint64_t ts, float single_axis_sample) |
| : type(type), timestamp_nanos(ts) { |
| data[SensorIndex::kSingleAxis] = single_axis_sample; |
| } |
| }; |
| |
| } // namespace online_calibration |
| |
| #endif // LOCATION_LBS_CONTEXTHUB_NANOAPPS_CALIBRATION_ONLINE_CALIBRATION_COMMON_DATA_SENSOR_DATA_H_ |