/* * STMicroelectronics SW Orientation Sensor Class * * Copyright 2013-2015 STMicroelectronics Inc. * Author: Denis Ciocca - * * Licensed under the Apache License, Version 2.0 (the "License"). */ #include #include #include #include "SWOrientation.h" SWOrientation::SWOrientation(const char *name, int handle, int pipe_data_fd) : SWSensorBaseWithPollrate(name, handle, SENSOR_TYPE_ORIENTATION, pipe_data_fd, true, false, true, false) { sensor_t_data.stringType = SENSOR_STRING_TYPE_ORIENTATION; sensor_t_data.flags = SENSOR_FLAG_CONTINUOUS_MODE; sensor_t_data.maxRange = 360.0f; type_dependencies[SENSOR_BASE_DEPENDENCY_0] = SENSOR_TYPE_ST_ACCEL_MAGN_GYRO_FUSION9X; type_sensor_need_trigger = SENSOR_TYPE_ST_ACCEL_MAGN_GYRO_FUSION9X; } SWOrientation::~SWOrientation() { } void SWOrientation::TriggerEventReceived() { int data_remaining; SensorBaseData orientation; do { data_remaining = GetLatestValidDataFromDependency(SENSOR_BASE_DEPENDENCY_0, &orientation); if (data_remaining < 0) return; memcpy(sensor_event.data, orientation.processed, num_data_axis * sizeof(float)); sensor_event.timestamp = orientation.timestamp; SWSensorBaseWithPollrate::WriteDataToPipe(); SWSensorBaseWithPollrate::ProcessData(&orientation); } while (data_remaining > 0); }