2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.tizenopensource.org/license
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUixSensor_SensorEventDeliverer.cpp
20 * @brief This is the implementation file for the %_SensorEventDeliverer class.
22 * This files contains implementation of the %_SensorEventDeliverer class.
26 #include <FBaseSysLog.h>
28 #include <FUixSensorSensorData.h>
29 #include <FUixSensorAccelerationSensorData.h>
30 #include <FUixSensorMagneticSensorData.h>
31 #include <FUixSensorProximitySensorData.h>
32 #include <FUixSensorTiltSensorData.h>
33 #include <FUixSensorGyroSensorData.h>
34 #include <FUixSensorLightSensorData.h>
35 #include <FUixSensorISensorEventListener.h>
37 #include "FUixSensor_SensorEventDeliverer.h"
38 #include "FUixSensor_ISensorCore.h"
39 #include "FUixSensor_SensorCoreEventTypes.h"
40 #include "FUixSensor_SensorUtil.h"
42 namespace Tizen { namespace Uix { namespace Sensor
44 _SensorEventDeliverer::_SensorEventDeliverer(void)
45 : __eventType(_SensorEventDeliverer::SENSOR_EVENT_TYPE_NONE)
47 , __sensorType(SENSOR_TYPE_NONE)
48 , __interval(INVALID_SENSOR_CORE_EVENT_INTERVAL)
49 , __dataChanged(false)
50 , __sensorCoreEventHandle(INVALID_SENSOR_CORE_EVENT_HANDLE)
51 , __state(SENSOR_CORE_EVENT_RECEIVER_STATE_NONE)
52 , __currentSensorCoreEvent(INVALID_SENSOR_CORE_EVENT)
53 , __beforeSensorCoreEvent(INVALID_SENSOR_CORE_EVENT)
58 _SensorEventDeliverer::~_SensorEventDeliverer(void)
60 if (GetSensorCoreEventReceiverState() != SENSOR_CORE_EVENT_RECEIVER_STATE_NONE)
67 _SensorEventDeliverer::SetDataEventInfo(Tizen::Uix::Sensor::ISensorEventListener& listener, Tizen::Uix::Sensor::SensorType sensorType, long interval, bool dataChanged)
69 __eventType = _SensorEventDeliverer::SENSOR_EVENT_TYPE_DATA;
70 __pListener = &listener;
71 __sensorType = sensorType;
72 __interval = interval;
73 __dataChanged = dataChanged;
77 _SensorEventDeliverer::SetWakeupEventInfo(Tizen::Uix::Sensor::ISensorEventListener& listener, Tizen::Uix::Sensor::SensorType sensorType)
79 __eventType = _SensorEventDeliverer::SENSOR_EVENT_TYPE_WAKE_UP;
80 __pListener = &listener;
81 __sensorType = sensorType;
85 _SensorEventDeliverer::IsListenerEquals(ISensorEventListener& listener) const
87 return __pListener == &listener;
91 _SensorEventDeliverer::Start(void)
93 return _ISensorCore::AddSensorCoreEventReceiver(*this);
97 _SensorEventDeliverer::Stop(void)
99 return _ISensorCore::RemoveSensorCoreEventReceiver(*this);
103 _SensorEventDeliverer::ResetInterval(long interval)
105 if (!IsEquals(__interval, interval))
107 __interval = interval;
109 // return _ISensorCore::ResetSensorCoreEventReceivingInterval(*this);
111 // Temporary implementation
112 result r = _ISensorCore::RemoveSensorCoreEventReceiver(*this);
117 return _ISensorCore::AddSensorCoreEventReceiver(*this);
123 Tizen::Uix::Sensor::SensorData&
124 _SensorEventDeliverer::GetSensorDataBuffer(void)
126 static SensorData sensorData;
133 ConvertToSensorCoreDataEventTypeFromSensorType(SensorType sensorType)
137 case SENSOR_TYPE_ACCELERATION:
138 return _SENSOR_CORE_EVENT_TYPE_ACCELERATION_DATA;
139 case SENSOR_TYPE_MAGNETIC:
140 return _SENSOR_CORE_EVENT_TYPE_MAGNETIC_FIELD_DATA;
141 case SENSOR_TYPE_PROXIMITY:
142 return _SENSOR_CORE_EVENT_TYPE_PROXIMITY_DISTANCE_DATA;
143 case SENSOR_TYPE_TILT:
144 return _SENSOR_CORE_EVENT_TYPE_TILT_DATA;
145 case SENSOR_TYPE_GYRO:
146 return _SENSOR_CORE_EVENT_TYPE_ROTATION_RATE_DATA;
147 case SENSOR_TYPE_LIGHT:
148 return _SENSOR_CORE_EVENT_TYPE_LIGHT_LEVEL_DATA;
150 SysAssertf(false, "ConvertToSensorCoreEventTypeFromSensorType() > Invalid SensorType [sensorType:%d]", sensorType);
151 return _SENSOR_CORE_EVENT_TYPE_NONE;
156 ConvertToSensorCoreWakeupEventTypeFromSensorType(SensorType sensorType)
160 case SENSOR_TYPE_ACCELERATION:
161 return _SENSOR_CORE_EVENT_TYPE_ACCELERATION_SENSOR_WAKEUP;
163 SysAssertf(false, "ConvertToSensorCoreEventTypeFromSensorType() > Invalid SensorType [sensorType:%d]", sensorType);
164 return _SENSOR_CORE_EVENT_TYPE_NONE;
169 IsSensorCoreEventChanged(_SensorCoreEventType eventType, _SensorCoreEvent& before, _SensorCoreEvent& after)
173 case _SENSOR_CORE_EVENT_TYPE_ACCELERATION_DATA:
175 if (IsEquals(before.eventKind.accelerationData.x, after.eventKind.accelerationData.x) &&
176 IsEquals(before.eventKind.accelerationData.y, after.eventKind.accelerationData.y) &&
177 IsEquals(before.eventKind.accelerationData.z, after.eventKind.accelerationData.z))
183 case _SENSOR_CORE_EVENT_TYPE_MAGNETIC_FIELD_DATA:
185 if (IsEquals(before.eventKind.magneticFieldData.x, after.eventKind.magneticFieldData.x) &&
186 IsEquals(before.eventKind.magneticFieldData.y, after.eventKind.magneticFieldData.y) &&
187 IsEquals(before.eventKind.magneticFieldData.z, after.eventKind.magneticFieldData.z))
193 case _SENSOR_CORE_EVENT_TYPE_PROXIMITY_DISTANCE_DATA:
195 if (IsEquals(before.eventKind.proximityDistanceData.distance, after.eventKind.proximityDistanceData.distance))
201 case _SENSOR_CORE_EVENT_TYPE_TILT_DATA:
203 if (IsEquals(before.eventKind.tiltData.roll, after.eventKind.tiltData.roll) &&
204 IsEquals(before.eventKind.tiltData.pitch, after.eventKind.tiltData.pitch) &&
205 IsEquals(before.eventKind.tiltData.azimuth, after.eventKind.tiltData.azimuth))
211 case _SENSOR_CORE_EVENT_TYPE_ROTATION_RATE_DATA:
213 if (IsEquals(before.eventKind.rotationRateData.x, after.eventKind.rotationRateData.x) &&
214 IsEquals(before.eventKind.rotationRateData.y, after.eventKind.rotationRateData.y) &&
215 IsEquals(before.eventKind.rotationRateData.z, after.eventKind.rotationRateData.z))
221 case _SENSOR_CORE_EVENT_TYPE_LIGHT_LEVEL_DATA:
223 if (IsEquals(before.eventKind.lightLevelData.level, after.eventKind.lightLevelData.level))
231 SysAssertf(false, "IsSensorCoreEventChanged() > Invalid _SensorCoreEventType [eventType:%d]", eventType);
241 _SensorEventDeliverer::GetSensorCoreEventType(void) const
243 if (__eventType == _SensorEventDeliverer::SENSOR_EVENT_TYPE_WAKE_UP)
245 return ConvertToSensorCoreWakeupEventTypeFromSensorType(__sensorType);
249 return ConvertToSensorCoreDataEventTypeFromSensorType(__sensorType);
254 _SensorEventDeliverer::GetSensorCoreDataEventInterval(void) const
260 _SensorEventDeliverer::SetSensorCoreEventHandle(_SensorCoreEventHandle sensorCoreEventHandle)
262 __sensorCoreEventHandle = sensorCoreEventHandle;
265 _SensorCoreEventHandle
266 _SensorEventDeliverer::GetSensorCoreEventHandle(void) const
268 return __sensorCoreEventHandle;
272 _SensorEventDeliverer::SetSensorCoreEventReceiverState(SensorCoreEventReceiverState state)
277 _ISensorCoreEventReceiver::SensorCoreEventReceiverState
278 _SensorEventDeliverer::GetSensorCoreEventReceiverState(void) const
284 _SensorEventDeliverer::GetSensorCoreEventBuffer(void)
286 return __currentSensorCoreEvent;
290 _SensorEventDeliverer::OnSensorCoreEventReceived(_SensorCoreEvent& event)
292 _SensorCoreEventType eventType = event.eventType;
295 if (!IsSensorCoreEventChanged(eventType, __beforeSensorCoreEvent, event))
297 __beforeSensorCoreEvent = event;
301 __beforeSensorCoreEvent = event;
304 SensorData& sensorDataBuffer = GetSensorDataBuffer();
305 sensorDataBuffer.timestamp = event.eventTimestamp;
309 case _SENSOR_CORE_EVENT_TYPE_ACCELERATION_DATA:
311 static_cast<AccelerationSensorData&>(sensorDataBuffer).x = event.eventKind.accelerationData.x;
312 static_cast<AccelerationSensorData&>(sensorDataBuffer).y = event.eventKind.accelerationData.y;
313 static_cast<AccelerationSensorData&>(sensorDataBuffer).z = event.eventKind.accelerationData.z;
316 case _SENSOR_CORE_EVENT_TYPE_MAGNETIC_FIELD_DATA:
318 static_cast<MagneticSensorData&>(sensorDataBuffer).x = event.eventKind.magneticFieldData.x;
319 static_cast<MagneticSensorData&>(sensorDataBuffer).y = event.eventKind.magneticFieldData.y;
320 static_cast<MagneticSensorData&>(sensorDataBuffer).z = event.eventKind.magneticFieldData.z;
323 case _SENSOR_CORE_EVENT_TYPE_PROXIMITY_DISTANCE_DATA:
325 static_cast<ProximitySensorData&>(sensorDataBuffer).distance = event.eventKind.proximityDistanceData.distance;
328 case _SENSOR_CORE_EVENT_TYPE_TILT_DATA:
330 static_cast<TiltSensorData&>(sensorDataBuffer).roll = event.eventKind.tiltData.roll;
331 static_cast<TiltSensorData&>(sensorDataBuffer).pitch = event.eventKind.tiltData.pitch;
332 static_cast<TiltSensorData&>(sensorDataBuffer).azimuth = event.eventKind.tiltData.azimuth;
335 case _SENSOR_CORE_EVENT_TYPE_ROTATION_RATE_DATA:
337 static_cast<GyroSensorData&>(sensorDataBuffer).x = event.eventKind.rotationRateData.x;
338 static_cast<GyroSensorData&>(sensorDataBuffer).y = event.eventKind.rotationRateData.y;
339 static_cast<GyroSensorData&>(sensorDataBuffer).z = event.eventKind.rotationRateData.z;
342 case _SENSOR_CORE_EVENT_TYPE_LIGHT_LEVEL_DATA:
344 static_cast<LightSensorData&>(sensorDataBuffer).level = event.eventKind.lightLevelData.level;
349 SysAssertf(false, "OnSensorCoreEventReceived() > Invalid _SensorCoreEventType [eventType:%d]", eventType);
354 __pListener->OnDataReceived(__sensorType, sensorDataBuffer, event.isEventValid ? E_SUCCESS : E_INVALID_ARG);
356 } } }// Tizen::Uix::Sensor