4 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #if defined (_SENSOR_DATA_H_) && defined (_VECTOR_H_)
24 template <typename TYPE>
25 sensor_data<TYPE>::sensor_data() : m_data(), m_time_stamp(0)
29 template <typename TYPE>
30 sensor_data<TYPE>::sensor_data(const TYPE x, const TYPE y,
31 const TYPE z, const unsigned long long time_stamp)
33 TYPE vec_data[SENSOR_DATA_SIZE] = {x, y, z};
35 vect<TYPE, SENSOR_DATA_SIZE> v(vec_data);
37 m_time_stamp = time_stamp;
40 template <typename TYPE>
41 sensor_data<TYPE>::sensor_data(const vect<TYPE, SENSOR_DATA_SIZE> v,
42 const unsigned long long time_stamp)
45 m_time_stamp = time_stamp;
48 template <typename TYPE>
49 sensor_data<TYPE>::sensor_data(const sensor_data<TYPE>& s)
52 m_time_stamp = s.m_time_stamp;
55 template <typename TYPE>
56 sensor_data<TYPE>::~sensor_data()
60 template <typename TYPE>
61 sensor_data<TYPE> sensor_data<TYPE>::operator =(const sensor_data<TYPE>& s)
64 m_time_stamp = s.m_time_stamp;
70 sensor_data<T> operator +(sensor_data<T> data1, sensor_data<T> data2)
72 sensor_data<T> result(data1.m_data + data2.m_data, 0);
77 void normalize(sensor_data<T>& data)
81 x = data.m_data.m_vec[0];
82 y = data.m_data.m_vec[1];
83 z = data.m_data.m_vec[2];
85 T val = sqrt(x*x + y*y + z*z);
87 data.m_data.m_vec[0] = x / val;
88 data.m_data.m_vec[1] = y / val;
89 data.m_data.m_vec[2] = z / val;
93 sensor_data<T> scale_data(sensor_data<T> data, T scaling_factor)
97 x = data.m_data.m_vec[0] / scaling_factor;
98 y = data.m_data.m_vec[1] / scaling_factor;
99 z = data.m_data.m_vec[2] / scaling_factor;
101 sensor_data<T> s(x, y, z, data.m_time_stamp);
108 quaternion<T> sensor_data2quat(const sensor_data<T> data, const vect<T, REF_VEC_SIZE> ref_vec)
110 vect<T, REF_VEC_SIZE> axis;
113 axis = cross(data.m_data, ref_vec);
114 angle = acos(dot(data.m_data, ref_vec));
116 return axis2quat(axis, angle);
120 void pre_process_data(sensor_data<T> &data_out, const T *data_in, int sign, int scale)
122 data_out.m_data.m_vec[0] = sign * data_in[0] / scale;
123 data_out.m_data.m_vec[1] = sign * data_in[1] / scale;
124 data_out.m_data.m_vec[2] = sign * data_in[2] / scale;
127 #endif /* _SENSOR_DATA_H_ */