2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FSys_SystemInfoImpl.cpp
19 * @brief This is the implementation file for _SystemInfoImpl class.
21 #include <unique_ptr.h>
24 #include <system_info.h>
25 #include <ITapiModem.h>
27 #include <FBaseBoolean.h>
28 #include <FBaseInteger.h>
29 #include <FBaseColHashMap.h>
30 #include <FBaseUtilStringUtil.h>
31 #include <FIoRegistry.h>
33 #include <FBase_NativeError.h>
34 #include <FBase_StringConverter.h>
35 #include <FIo_RegistryImpl.h>
36 #include <FSys_SystemInfoImpl.h>
37 #include <FIo_AppServiceIpcMessages.h>
38 #include <FIo_IpcClient.h>
40 #include "FSys_Types.h"
41 #include "FSys_SystemClient.h"
42 #include "FSys_CommunicationDispatcherClient.h"
46 using namespace Tizen::Base;
47 using namespace Tizen::Base::Collection;
48 using namespace Tizen::Io;
49 using namespace Tizen::Base::Utility;
51 namespace Tizen { namespace System
54 static const wchar_t* _REGISTRY_PATH = L"/opt/usr/etc/system_info_cache.ini";
55 static const wchar_t* _SYSTEM_INFO_SESSION = L"SystemInformation";
58 static const wchar_t* _BLUETOOTH = L"http://tizen.org/feature/network.bluetooth";
59 static const wchar_t* _BLUETOOTH_SUPPORTED = L"BluetoothSupported";
63 static const wchar_t* _CAMERA_FRONT = L"http://tizen.org/feature/camera.front";
65 static const wchar_t* _CAMERA_BACK = L"http://tizen.org/feature/camera.back";
67 static const wchar_t* _CAMERA_COUNT = L"CameraCount";
70 static const wchar_t* _DUID = L"http://tizen.org/system/duid";
71 static const wchar_t* _DEVICE_ID = L"DUID";
74 static const wchar_t* _FMRADIO = L"http://tizen.org/feature/fmradio";
75 static const wchar_t* _FM_RADIO_SUPPORTED = L"FmRadioSupported";
78 static const wchar_t* _KEYBOARD_TYPE = L"KeyboardType";
79 static const wchar_t* _INPUT_KEYBOARD_LAYOUT = L"http://tizen.org/feature/input.keyboard.layout";
82 static const wchar_t* _GPS_SUPPORTED = L"GPSSupported";
83 static const wchar_t* _LOCATION_GPS = L"http://tizen.org/feature/location.gps";
84 static const wchar_t* _WPS_SUPPORTED = L"WPSSupported";
85 static const wchar_t* _LOCATION_WPS = L"http://tizen.org/feature/location.wps";
88 static const wchar_t* _MODELNAME = L"http://tizen.org/system/model_name";
89 static const wchar_t* _MODEL_NAME = L"ModelName";
92 static const wchar_t* _MULTIPOINTTOUCH_POINTCOUNT = L"http://tizen.org/feature/multi_point_touch.point_count";
93 static const wchar_t* _MULTIPOINT_TOUCH_COUNT = L"MultiPointTouchCount";
96 static const wchar_t* _NETWORK_NFC = L"http://tizen.org/feature/network.nfc";
97 static const wchar_t* _NFC_SUPPORTED = L"NFCSupported";
100 static const wchar_t* _OPENGLES_VERSION_1_1 = L"http://tizen.org/feature/opengles.version.1_1";
101 static const wchar_t* _OPENGLES_VERSION_2_0 = L"http://tizen.org/feature/opengles.version.2_0";
102 static const wchar_t* _OPENGL_ES_VERSION = L"OpenGLESVersion";
105 static const wchar_t* _SCREEN_BPP = L"http://tizen.org/feature/screen.bpp";
106 static const wchar_t* _SCREEN_BITS_PER_PIXEL = L"ScreenBitsPerPixel";
107 static const wchar_t* _SCREEN_DPI = L"http://tizen.org/feature/screen.dpi";
108 static const wchar_t* _SCREEN_HEIGHT = L"http://tizen.org/feature/screen.height";
109 static const wchar_t* _SCREENHEIGHT = L"ScreenHeight";
110 static const wchar_t* _SCREEN_WIDTH = L"http://tizen.org/feature/screen.width";
111 static const wchar_t* _SCREENWIDTH = L"ScreenWidth";
112 static const wchar_t* _SCREENDPI = L"ScreenDPI";
115 static const wchar_t* _SCREEN_OUTPUT_RCA = L"http://tizen.org/feature/screen.output.rca";
116 static const wchar_t* _TV_OUT_SUPPORTED = L"TvOutSupported";
119 static const wchar_t* _SOUND_MEDIA_VOLUME_MAX = L"http://tizen.org/system/sound.media.volume.resolution.max";
120 static const wchar_t* _MAX_MEDIA_SOUND_VOLUME = L"MaxMediaSoundVolume";
121 static const wchar_t* _SOUND_NOTIFICATION_VOLUME_MAX = L"http://tizen.org/system/sound.notification.volume.resolution.max";
122 static const wchar_t* _MAX_NOTIFICATION_SOUND_VOLUME = L"MaxNotificationSoundVolume";
123 static const wchar_t* _SOUND_RINGTONE_VOLUME_MAX = L"http://tizen.org/system/sound.ringtone.volume.resolution.max";
124 static const wchar_t* _MAX_RINGTONE_SOUND_VOLUME = L"MaxRingtoneSoundVolume";
125 static const wchar_t* _SOUND_SYSTEM_VOLUME_MAX = L"http://tizen.org/system/sound.system.volume.resolution.max";
126 static const wchar_t* _MAX_SYSTEM_SOUND_VOLUME = L"MaxSystemSoundVolume";
129 static const wchar_t* _TELEPHONY = L"http://tizen.org/feature/network.telephony";
130 static const wchar_t* _TELEPHONY_SERVICE_GSM = L"http://tizen.org/feature/network.telephony.service.gsm";
131 static const wchar_t* _TELEPHONY_SERVICE_GPRS = L"http://tizen.org/feature/network.telephony.service.gprs";
132 static const wchar_t* _TELEPHONY_SERVICE_EDGE = L"http://tizen.org/feature/network.telephony.service.edge";
133 static const wchar_t* _TELEPHONY_SERVICE_UMTS = L"http://tizen.org/feature/network.telephony.service.umts";
134 static const wchar_t* _TELEPHONY_SERVICE_HSDPA = L"http://tizen.org/feature/network.telephony.service.hsdpa";
135 static const wchar_t* _TELEPHONY_SERVICE_HSUPA = L"http://tizen.org/feature/network.telephony.service.hsupa";
136 static const wchar_t* _TELEPHONY_SERVICE_HSPA = L"http://tizen.org/feature/network.telephony.service.hspa";
137 static const wchar_t* _TELEPHONY_SERVICE_LTE = L"http://tizen.org/feature/network.telephony.service.lte";
138 static const wchar_t* _TELEPHONY_SERVICE_CDMA = L"http://tizen.org/feature/network.telephony.service.cdma";
139 static const wchar_t* _NETWORK_TYPE = L"NetworkType";
140 static const wchar_t* _NETWORK_EMERGENCY = L"Emergency";
141 static const wchar_t* _NETWORK_NO_SERVICE = L"NoService";
144 static const wchar_t* _WIFI = L"http://tizen.org/feature/network.wifi";
145 static const wchar_t* _WIFI_SUPPORTED = L"WiFiSupported";
146 static const wchar_t* _WIFI_DIRECT = L"http://tizen.org/feature/network.wifi.direct";
147 static const wchar_t* _WIFI_DIRECT_SUPPORTED = L"WiFiDirectSupported";
150 static const wchar_t* _PLATFORM_VERSION = L"http://tizen.org/feature/platform.version";
151 static const wchar_t* _PLATFORM_NATIVE_API_VERSION = L"http://tizen.org/feature/platform.native.api.version";
152 static const wchar_t* _PLATFORM_WEB_API_VERSION = L"http://tizen.org/feature/platform.web.api.version";
153 static const wchar_t* _BUILD_STRING = L"http://tizen.org/system/build.string";
155 static const wchar_t* _WAC_VERSION = L"WACVersion";
156 static const wchar_t* _SUPPORTED = L"Supported";
157 static const wchar_t* _UNSUPPORTED = L"Unsupported";
159 static bool firstRequest = false;
160 static HashMap integerList(SingleObjectDeleter);
161 static HashMap boolList(SingleObjectDeleter);
162 static HashMap stringList(SingleObjectDeleter);
167 if(firstRequest == false)
169 integerList.Construct();
170 boolList.Construct();
171 stringList.Construct();
177 _SystemInfoImpl::ConvertToTizen(const String& key)
181 if(code == _DEVICE_ID)
185 else if(code == _MODEL_NAME)
189 else if(code == _KEYBOARD_TYPE)
191 code = _INPUT_KEYBOARD_LAYOUT;
193 else if(code == _SCREEN_BITS_PER_PIXEL)
197 else if(code == _SCREENHEIGHT)
199 code = _SCREEN_HEIGHT;
201 else if(code == _SCREENWIDTH)
203 code = _SCREEN_WIDTH;
205 else if(code == _SCREENDPI)
209 else if(code == _MAX_SYSTEM_SOUND_VOLUME)
211 code = _SOUND_SYSTEM_VOLUME_MAX;
213 else if(code == _MAX_MEDIA_SOUND_VOLUME)
215 code = _SOUND_MEDIA_VOLUME_MAX;
217 else if(code == _MAX_RINGTONE_SOUND_VOLUME)
219 code = _SOUND_RINGTONE_VOLUME_MAX;
221 else if(code == _MAX_NOTIFICATION_SOUND_VOLUME)
223 code = _SOUND_NOTIFICATION_VOLUME_MAX;
225 else if(code == _MULTIPOINT_TOUCH_COUNT)
227 code = _MULTIPOINTTOUCH_POINTCOUNT;
229 else if(code == _BLUETOOTH_SUPPORTED)
233 else if(code == _GPS_SUPPORTED)
235 code = _LOCATION_GPS;
237 else if(code == _WPS_SUPPORTED)
239 code = _LOCATION_WPS;
241 else if(code == _WIFI_SUPPORTED)
245 else if(code == _WIFI_DIRECT_SUPPORTED)
249 else if(code == _FM_RADIO_SUPPORTED)
253 else if(code == _TV_OUT_SUPPORTED)
255 code = _SCREEN_OUTPUT_RCA;
257 else if(code == _NFC_SUPPORTED)
265 _SystemInfoImpl::GetSysInfo(const String& key, String& value)
267 result r = E_OBJ_NOT_FOUND;
268 String tizenKey = ConvertToTizen(key);
270 SysLog(NID_SYS, "Request Key is %ls.", key.GetPointer());
272 if (firstRequest == false)
277 String* pValue = (String*)stringList.GetValue(tizenKey);
285 if (key == _NETWORK_TYPE) //Compatibility
287 bool supported = false;
288 GetSysInfo(_TELEPHONY, supported);
289 if(supported == false)
291 value = _NETWORK_EMERGENCY;
294 bool supportedGsm = false;
295 bool supportedGprs = false;
296 bool supportedEdge = false;
297 bool supportedUmts = false;
298 bool supportedHsdpa = false;
299 bool supportedHsupa = false;
300 bool supportedHspa = false;
301 bool supportedLte = false;
302 bool supportedCdma = false;
304 GetSysInfo(_TELEPHONY_SERVICE_GSM, supportedGsm);
305 GetSysInfo(_TELEPHONY_SERVICE_GPRS, supportedGprs);
306 GetSysInfo(_TELEPHONY_SERVICE_EDGE, supportedEdge);
307 GetSysInfo(_TELEPHONY_SERVICE_UMTS, supportedUmts);
308 GetSysInfo(_TELEPHONY_SERVICE_HSDPA, supportedHsdpa);
309 GetSysInfo(_TELEPHONY_SERVICE_HSUPA, supportedHsupa);
310 GetSysInfo(_TELEPHONY_SERVICE_HSPA, supportedHspa);
311 GetSysInfo(_TELEPHONY_SERVICE_LTE, supportedLte);
312 GetSysInfo(_TELEPHONY_SERVICE_CDMA, supportedCdma);
315 if(supportedGsm == false && supportedGprs == false
316 && supportedEdge == false && supportedUmts == false
317 && supportedHsdpa == false && supportedHsupa == false
318 && supportedHspa == false && supportedLte == false
319 && supportedCdma == false)
321 value = _NETWORK_NO_SERVICE;
323 else if(supportedGsm == true)
325 value.Append(L"GSM");
327 else if(supportedGprs == true)
329 if(value.GetLength() > 0)
330 value.Append(L" | ");
332 value.Append(L"GPRS");
334 else if(supportedEdge == true)
336 if(value.GetLength() > 0)
337 value.Append(L" | ");
339 value.Append(L"EDGE");
341 else if(supportedUmts == true)
343 if(value.GetLength() > 0)
344 value.Append(L" | ");
346 value.Append(L"UMTS");
348 else if(supportedHsdpa == true)
350 if(value.GetLength() > 0)
351 value.Append(L" | ");
353 value.Append(L"HSDPA");
355 else if(supportedHsupa == true)
357 if(value.GetLength() > 0)
358 value.Append(L" | ");
360 value.Append(L"HSUPA");
362 else if(supportedHspa == true)
364 if(value.GetLength() > 0)
365 value.Append(L" | ");
367 value.Append(L"HSPA");
369 else if(supportedLte == true)
371 if(value.GetLength() > 0)
372 value.Append(L" | ");
374 value.Append(L"LTE");
376 else if(supportedCdma == true)
378 if(value.GetLength() > 0)
379 value.Append(L" | ");
381 value.Append(L"CDMA");
385 else if (key == _OPENGL_ES_VERSION)
387 bool opengles_11 = false;
388 bool opengles_20 = false;
390 GetSysInfo(_OPENGLES_VERSION_1_1, opengles_11);
391 GetSysInfo(_OPENGLES_VERSION_2_0, opengles_20);
393 if(opengles_11 == true)
395 value.Append(L"1.1");
397 else if(opengles_20 == true)
399 if(value.GetLength() > 0)
400 value.Append(L" | ");
402 value.Append(L"2.0");
406 else if(key == _BLUETOOTH_SUPPORTED)
408 bool supported = false;
409 GetSysInfo(_BLUETOOTH, supported);
410 if(supported == false)
413 value = _UNSUPPORTED;
416 else if (key == _GPS_SUPPORTED)
418 bool supported = false;
419 GetSysInfo(_LOCATION_GPS, supported);
420 if(supported == false)
423 value = _UNSUPPORTED;
426 else if (key == _WIFI_SUPPORTED)
428 bool supported = false;
429 GetSysInfo(_WIFI, supported);
430 if(supported == false)
433 value = _UNSUPPORTED;
436 else if (key == _WAC_VERSION)
441 else if (key == _PLATFORM_NATIVE_API_VERSION || key == _PLATFORM_WEB_API_VERSION || key == _PLATFORM_VERSION || key == _BUILD_STRING)
445 else if (tizenKey == _DUID)
447 r = GetFromRegistry(tizenKey, value);
451 ArrayList requestMessage;
452 ArrayList responseMessage;
454 _CommunicationDispatcherClient* pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
456 _IpcClient* pIpcClient = pCommunicationDispatcherClient->GetIpcClient();
457 SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
459 requestMessage.Construct();
460 responseMessage.Construct();
462 String serviceId(_SYSTEM_SERVICE_ID);
463 String commandId(L"osp.system.command.get.duid.internal");
465 requestMessage.Add(serviceId);
466 requestMessage.Add(commandId);
468 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
469 SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
471 r = pIpcClient->SendRequest(pMsg.get());
472 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "It is failed to send ipc message. [%s]", GetErrorMessage(r));
474 String* pResult = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA);
475 String* pDuid = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA+1);
477 SysTryReturn(NID_SYS, pResult != null, r = E_SYSTEM, r, "It is failed to receive result on IPC response message.");
478 SysTryReturn(NID_SYS, pDuid != null, r = E_SYSTEM, r, "It is failed to receive IMEI value on IPC response message.");
480 SysTryReturn(NID_SYS, *pResult != _SYSTEM_RESULT_PRIVILEGED, r = E_PRIVILEGE_DENIED, r, "It is failed to get privilege.");
481 SysTryReturn(NID_SYS, *pResult == _SYSTEM_RESULT_OK, r = E_SYSTEM, r, "It is failed to get DUID value.");
485 responseMessage.RemoveAll(true);
490 r = GetFromRegistry(tizenKey, value);
494 char* pStringValue = null;
496 tizenKey.SubString(7, tKey);
497 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_OBJ_NOT_FOUND, "Required key should be longer than 0.");
500 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
502 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
504 int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
505 if (ret != SYSTEM_INFO_ERROR_NONE)
507 ret = system_info_get_custom_string(systemKey.get(), &pStringValue);
508 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
510 r = StringUtil::Utf8ToString(pStringValue, value);
517 stringList.Add(new String(tizenKey), new String(value));
523 _SystemInfoImpl::GetSysInfo(const String& key, int& value)
525 result r = E_SUCCESS;
526 String tizenKey = ConvertToTizen(key);
528 SysLog(NID_SYS, "Request Key is %ls.", key.GetPointer());
530 if (firstRequest == false)
535 Integer* pValue = (Integer*)integerList.GetValue(tizenKey);
539 value = pValue->value;
543 if (key == _CAMERA_COUNT)
545 bool supported = false;
548 GetSysInfo(_CAMERA_FRONT, supported);
549 if(supported == true)
552 GetSysInfo(_CAMERA_BACK, supported);
553 if(supported == true)
560 r = GetFromRegistry(tizenKey, value);
561 if(r != E_SUCCESS || tizenKey == _SCREEN_WIDTH || tizenKey == _SCREEN_HEIGHT || tizenKey == _SCREEN_DPI)
566 tizenKey.SubString(7, tKey);
567 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_OBJ_NOT_FOUND, "Required key should be longer than 0.");
570 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
572 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
574 ret = system_info_get_platform_int(systemKey.get(), &value);
575 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
582 integerList.Add(new String(tizenKey), new Integer(value));
589 _SystemInfoImpl::GetSysInfo(const String& key, long long& value)
591 return E_OBJ_NOT_FOUND;
595 _SystemInfoImpl::GetSysInfo(const String& key, double& value)
597 return E_OBJ_NOT_FOUND;
601 _SystemInfoImpl::GetSysInfo(const String& key, bool& value)
603 result r = E_SUCCESS;
604 String tizenKey = ConvertToTizen(key);
606 SysLog(NID_SYS, "Request Key is %ls.", key.GetPointer());
608 if (firstRequest == false)
613 Boolean* pValue = (Boolean*)boolList.GetValue(tizenKey);
617 value = pValue->value;
621 r = GetFromRegistry(tizenKey, value);
625 tizenKey.SubString(7, tKey);
626 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_OBJ_NOT_FOUND, "Required key should be longer than 0.");
629 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
631 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
633 bool supported = false;
634 int ret = system_info_get_platform_bool(systemKey.get(), &supported);
635 if(ret != SYSTEM_INFO_ERROR_NONE)
637 String screenKey(L"http://tizen.org/feature/screen.size");
639 tizenKey.SubString(0, screenKey.GetLength(), requiredKey);
641 if(requiredKey == screenKey)
647 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
654 boolList.Add(new String(tizenKey), new Boolean(value));
661 _SystemInfoImpl::GetSysInfo(const String& key, UuId& value)
663 return E_OBJ_NOT_FOUND;
667 _SystemInfoImpl::GetSysInfoValuesN(const String& key, SystemInfoValueType type)
669 SetLastResult(E_OBJ_NOT_FOUND);
674 _SystemInfoImpl::GetPlatformVersion(String& platformVersion)
676 result r = E_SUCCESS;
677 String tizenKey(_PLATFORM_VERSION);
679 r = GetFromRegistry(tizenKey, platformVersion);
683 char* pStringValue = null;
685 tizenKey.SubString(7, tKey);
686 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_SYSTEM, "Required key should be longer than 0.");
689 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
691 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
693 int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
694 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
696 r = StringUtil::Utf8ToString(pStringValue, platformVersion);
704 _SystemInfoImpl::GetBuildInfo(String& buildInfo)
706 result r = E_SUCCESS;
707 String tizenKey(_BUILD_STRING);
709 r = GetFromRegistry(tizenKey, buildInfo);
713 char* pStringValue = null;
715 tizenKey.SubString(7, tKey);
716 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_SYSTEM, "Required key should be longer than 0.");
719 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
721 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
723 int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
724 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
726 r = StringUtil::Utf8ToString(pStringValue, buildInfo);
734 _SystemInfoImpl::GetNativeApiVersion(String& nativeApiVersion)
736 result r = E_SUCCESS;
737 String tizenKey(_PLATFORM_NATIVE_API_VERSION);
739 r = GetFromRegistry(tizenKey, nativeApiVersion);
743 char* pStringValue = null;
745 tizenKey.SubString(7, tKey);
746 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_SYSTEM, "Required key should be longer than 0.");
749 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
751 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
753 int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
754 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
756 r = StringUtil::Utf8ToString(pStringValue, nativeApiVersion);
764 _SystemInfoImpl::GetWebApiVersion(String& webApiVersion)
766 result r = E_SUCCESS;
767 String tizenKey(_PLATFORM_WEB_API_VERSION);
769 r = GetFromRegistry(tizenKey, webApiVersion);
773 char* pStringValue = null;
775 tizenKey.SubString(7, tKey);
776 SysTryReturnResult(NID_SYS, tKey.GetLength() > 0, E_SYSTEM, "Required key should be longer than 0.");
779 unique_ptr< char[] > systemKey(_StringConverter::CopyToCharArrayN(tKey));
781 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] StringUtil::StringToUtf8N It is failed", GetErrorMessage(r));
783 int ret = system_info_get_platform_string(systemKey.get(), &pStringValue);
784 SysTryReturnResult(NID_SYS, ret == SYSTEM_INFO_ERROR_NONE, E_OBJ_NOT_FOUND, "It is failed to get system information %ls from configration file.", tizenKey.GetPointer());
786 r = StringUtil::Utf8ToString(pStringValue, webApiVersion);
794 _SystemInfoImpl::GetImei(String& imei)
796 result r = E_SUCCESS;
799 TapiHandle* handle = null;
803 handle = tel_init(null);
804 SysTryReturnResult(NID_SYS, handle != null, E_SYSTEM, "It is failed to get handle of telephony.");
805 while(time_count < 30) //Wait 30 second.
807 ret = tel_check_modem_power_status(handle, &status);
808 SysLog(NID_SYS, "Modem check result is %d, status is %d.", handle, status);
809 if(ret != TAPI_API_SUCCESS)
811 SysLogException(NID_SYS, E_SYSTEM, "It is failed to get Modem status.");
826 ArrayList requestMessage;
827 ArrayList responseMessage;
829 _CommunicationDispatcherClient* pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
831 _IpcClient* pIpcClient = pCommunicationDispatcherClient->GetIpcClient();
832 SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
834 requestMessage.Construct();
835 responseMessage.Construct();
837 String serviceId(_SYSTEM_SERVICE_ID);
838 String commandId(L"osp.system.command.get.imei.internal");
840 requestMessage.Add(serviceId);
841 requestMessage.Add(commandId);
843 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
844 SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
846 r = pIpcClient->SendRequest(pMsg.get());
847 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "It is failed to send ipc message. [%s]", GetErrorMessage(r));
849 String* pResult = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA);
850 String* pImei = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA+1);
852 SysTryReturn(NID_SYS, pResult != null, r = E_SYSTEM, r, "It is failed to receive result on IPC response message.");
853 SysTryReturn(NID_SYS, pImei != null, r = E_SYSTEM, r, "It is failed to receive IMEI value on IPC response message.");
855 SysTryReturn(NID_SYS, *pResult != _SYSTEM_RESULT_PRIVILEGED, r = E_PRIVILEGE_DENIED, r, "It is failed to get privilege.");
856 SysTryReturn(NID_SYS, *pResult == _SYSTEM_RESULT_OK, r = E_SYSTEM, r, "It is failed to get IMEI value.");
859 responseMessage.RemoveAll(true);
865 _SystemInfoImpl::GetFromRegistry(const String& key, String& value)
867 result r = E_SUCCESS;
871 r = _reg.Construct(_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
872 SysTryReturnResult(NID_SYS, r == E_SUCCESS , r, " RegistryImpl construct is failed");
874 r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
875 SysTryReturnResult(NID_SYS, r == E_SUCCESS , r, " Registry GetValue is failed, %ls", key.GetPointer());
877 if(valStr == L"true" || valStr == L"false")
879 return E_OBJ_NOT_FOUND;
890 _SystemInfoImpl::GetFromRegistry(const String& key, int& value)
892 result r = E_SUCCESS;
896 r = _reg.Construct(_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
897 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " RegistryImpl construct is failed");
899 r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
900 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed, %ls", key.GetPointer());
901 r = Integer::Parse(valStr, value);
902 SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_OBJ_NOT_FOUND, " Integer::Parse() is failed");
907 _SystemInfoImpl::GetFromRegistry(const String& key, bool& value)
909 result r = E_SUCCESS;
913 r = _reg.Construct(_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
914 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " RegistryImpl construct is failed");
916 r = _reg.GetValue(_SYSTEM_INFO_SESSION, key, valStr);
917 SysTryReturnResult(NID_SYS, r == E_SUCCESS, r, " Registry GetValue is failed, [%ls]", key.GetPointer());
918 if(valStr == L"true")
922 else if(valStr == L"false")
928 return E_OBJ_NOT_FOUND;
934 _SystemInfoImpl::GetInstance(SystemInfo& systeminfo)
936 return systeminfo.__pSystemInfoImpl;
938 const _SystemInfoImpl*
939 _SystemInfoImpl::GetInstance(const SystemInfo& systeminfo)
941 return systeminfo.__pSystemInfoImpl;