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 FUixSensorSensorManager.cpp
20 * @brief This is the implementation file for the %SensorManager class.
22 * This files contains implementation of the %SensorManager class.
26 #include <unique_ptr.h>
28 #include <FBaseString.h>
29 #include <FBaseSysLog.h>
31 #include <FUixSensorSensorManager.h>
32 #include <FUixSensor_SensorManagerImpl.h>
34 namespace Tizen { namespace Uix { namespace Sensor
38 static wchar_t W_MSG_ALREADY_CONSTRUCTED[] = L"Already constructed! Calling Construct() twice or more on a same instance is not allowed for this class.";
39 static wchar_t W_MSG_NOT_YET_CONSTRUCTED[] = L"Not yet constructed! Construct() should be called before use.";
40 static wchar_t W_MSG_INVALID_SENSOR_TYPE[] = L"The specified type of sensor is not valid.";
41 static wchar_t W_MSG_UNSUPPORTED_OPERATION[] = L"The target device does not support the specified sensor.";
42 static wchar_t W_MSG_OPERATION_FAILED[] = L"The operation has failed.";
43 static wchar_t W_MSG_INVALID_INTERVAL[] = L"An interval must be greater than the maximum interval or less than the minimum interval.";
44 static wchar_t W_MSG_USER_ALREADY_REGISTERED[] = L"The specified listener is already registered for the specified sensor type.";
45 static wchar_t W_MSG_NOT_REGISTERED_LISETNER[] = L"The specified listener is not registered for the specified sensor type.";
46 static wchar_t W_MSG_NO_LISTENER_REGISTERED[] = L"There is no sensor listener registered for this type.";
47 static wchar_t W_MSG_DEVICE_UNAVAILABLE[] = L"The specified type of sensor is not available.";
50 // SensorManager life-cycle -------------------------------------------------------------------------------------------------- //
51 SensorManager::SensorManager(void)
52 : __pSensorManagerImpl(null)
57 SensorManager::~SensorManager(void)
59 if (__pSensorManagerImpl != null)
61 delete __pSensorManagerImpl;
66 SensorManager::Construct(void)
70 SysAssertf(__pSensorManagerImpl == null, "%ls", W_MSG_ALREADY_CONSTRUCTED);
72 std::unique_ptr<_SensorManagerImpl> pSensorManagerImpl(new (std::nothrow) _SensorManagerImpl());
73 SysTryReturnResult(NID_UIX, pSensorManagerImpl != null, E_OUT_OF_MEMORY, "Allocating new _SensorManagerImpl failed.");
75 result r = pSensorManagerImpl->Construct();
76 SysTryReturnResult(NID_UIX, !IsFailed(r), r, "Propagating.");
78 __pSensorManagerImpl = pSensorManagerImpl.release();
83 // Getting sensor information ------------------------------------------------------------------------------------------------ //
85 SensorManager::IsAvailable(SensorType sensorType) const
89 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
91 bool isAvailable = __pSensorManagerImpl->IsAvailable(sensorType);
92 result r = GetLastResult();
94 SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
95 SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
96 SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
97 SysTryReturn(NID_UIX, r != E_DEVICE_UNAVAILABLE, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_DEVICE_UNAVAILABLE);
103 SensorManager::GetDescription(SensorType sensorType, Tizen::Base::String& description) const
107 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
109 result r = __pSensorManagerImpl->GetDescription(sensorType, description);
111 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
112 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
113 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
114 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
120 SensorManager::GetVendor(SensorType sensorType, Tizen::Base::String& vendor) const
124 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
126 result r = __pSensorManagerImpl->GetVendor(sensorType, vendor);
128 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
129 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
130 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
131 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
137 SensorManager::GetModelId(SensorType sensorType, Tizen::Base::String& modelId) const
141 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
143 result r = __pSensorManagerImpl->GetModelId(sensorType, modelId);
145 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
146 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
147 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
148 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
154 SensorManager::GetMeasurementRange(SensorType sensorType, float& min, float& max, float& resolution) const
158 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
160 result r = __pSensorManagerImpl->GetMeasurementRange(sensorType, min, max, resolution);
162 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
163 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
164 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
165 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
171 SensorManager::GetMinInterval(SensorType sensorType, long& interval) const
175 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
177 long dummyInterval = 0L;
178 result r = __pSensorManagerImpl->GetIntervalRange(sensorType, interval, dummyInterval);
180 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
181 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
182 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
183 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
189 SensorManager::GetMaxInterval(SensorType sensorType, long& interval) const
193 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
195 long dummyInterval = 0L;
196 result r = __pSensorManagerImpl->GetIntervalRange(sensorType, dummyInterval, interval);
198 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_INVALID_SENSOR_TYPE);
199 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
200 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
201 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
208 // Sensor event listener management ------------------------------------------------------------------------------------------ //
210 SensorManager::AddSensorListener(ISensorEventListener& listener, SensorType sensorType, long interval, bool dataChanged)
214 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
216 result r = __pSensorManagerImpl->AddSensorEventListener(listener, sensorType, interval, dataChanged);
218 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_INVALID_INTERVAL);
219 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
220 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
221 SysTryReturnResult(NID_UIX, r != E_USER_ALREADY_REGISTERED, r, "%ls", W_MSG_USER_ALREADY_REGISTERED);
222 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
228 SensorManager::RemoveSensorListener(ISensorEventListener& listener)
232 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
234 result r = __pSensorManagerImpl->RemoveSensorEventListener(listener);
236 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls", W_MSG_NOT_REGISTERED_LISETNER);
237 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
238 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
239 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
244 SensorManager::RemoveSensorListener(ISensorEventListener& listener, SensorType sensorType)
248 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
250 result r = __pSensorManagerImpl->RemoveSensorEventListener(listener, sensorType);
252 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
253 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
254 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
255 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
261 SensorManager::SetInterval(SensorType sensorType, long interval)
265 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
267 result r = __pSensorManagerImpl->SetInterval(sensorType, interval);
269 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
270 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
271 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
272 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
278 SensorManager::SetInterval(ISensorEventListener& listener, SensorType sensorType, long interval)
282 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
284 result r = __pSensorManagerImpl->SetInterval(listener, sensorType, interval);
286 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
287 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
288 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
289 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
294 // Sensor wake up management ------------------------------------------------------------------------------------------------- //
296 SensorManager::IsWakeupSupported(SensorType sensorType) const
300 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
302 bool isWakeupSupported = __pSensorManagerImpl->IsWakeupSupported(sensorType);
303 result r = GetLastResult();
305 SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
306 SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
307 SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
308 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
310 return isWakeupSupported;
314 SensorManager::SetWakeupEnabled(SensorType sensorType, bool enable)
318 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
320 result r = __pSensorManagerImpl->SetWakeupEnabled(sensorType, enable);
322 SysTryReturnResult(NID_UIX, r != E_INVALID_ARG, r, "%ls or %ls", W_MSG_INVALID_SENSOR_TYPE, W_MSG_NOT_REGISTERED_LISETNER);
323 SysTryReturnResult(NID_UIX, r != E_OPERATION_FAILED, r, "%ls", W_MSG_OPERATION_FAILED);
324 SysTryReturnResult(NID_UIX, r != E_UNSUPPORTED_OPERATION, r, "%ls", W_MSG_UNSUPPORTED_OPERATION);
325 SysTryReturnResult(NID_UIX, r != E_INVALID_STATE, r, "%ls", W_MSG_NO_LISTENER_REGISTERED);
326 SysTryReturnResult(NID_UIX, r != E_DEVICE_UNAVAILABLE, r, "%ls", W_MSG_DEVICE_UNAVAILABLE);
332 SensorManager::IsWakeupEnabled(SensorType sensorType) const
336 SysAssertf(__pSensorManagerImpl != null, "%ls", W_MSG_NOT_YET_CONSTRUCTED);
338 bool isWakeupSupported = __pSensorManagerImpl->IsWakeupEnabled(sensorType);
339 result r = GetLastResult();
341 SysTryReturn(NID_UIX, r != E_INVALID_ARG, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_INVALID_SENSOR_TYPE);
342 SysTryReturn(NID_UIX, r != E_OPERATION_FAILED, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_OPERATION_FAILED);
343 SysTryReturn(NID_UIX, r != E_UNSUPPORTED_OPERATION, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_UNSUPPORTED_OPERATION);
344 SysTryReturn(NID_UIX, r != E_DEVICE_UNAVAILABLE, false, r, "[%s] %ls", GetErrorMessage(r), W_MSG_DEVICE_UNAVAILABLE);
346 return isWakeupSupported;
348 } } }// Tizen::Uix::Sensor