2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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.
23 #include <JSWebAPIErrorFactory.h>
24 #include <SecurityExceptions.h>
26 #include <system_info.h>
27 #include <pkgmgr-info.h>
28 #include "JSDeviceCapabilitiesInfo.h"
29 #include "plugin_config.h"
32 #define MAXBUFSIZE 256
33 #define DEVICE_PROFILE "MOBILE"
36 namespace Systeminfo {
37 using namespace WrtDeviceApis::CommonsJavaScript;
38 using namespace WrtDeviceApis::Commons;
39 using namespace DeviceAPI::Common;
42 const char* DEVICE_CAPABILITIES_BLUETOOTH = "bluetooth";
43 const char* DEVICE_CAPABILITIES_NFC = "nfc";
44 const char* DEVICE_CAPABILITIES_NFC_RESERVED_PUSH = "nfcReservedPush";
45 const char* DEVICE_CAPABILITIES_MULTITOUCHCOUNT = "multiTouchCount";
46 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD = "inputKeyboard";
47 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT = "inputKeyboardLayout";
48 const char* DEVICE_CAPABILITIES_WIFI = "wifi";
49 const char* DEVICE_CAPABILITIES_WIFIDIRECT = "wifiDirect";
50 const char* DEVICE_CAPABILITIES_OPENGLES = "opengles";
51 const char* DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT = "openglestextureFormat";
52 const char* DEVICE_CAPABILITIES_OPENGLESVERSION1_1 = "openglesVersion1_1";
53 const char* DEVICE_CAPABILITIES_OPENGLESVERSION2_0 = "openglesVersion2_0";
54 const char* DEVICE_CAPABILITIES_FMRADIO = "fmRadio";
55 const char* DEVICE_CAPABILITIES_PLATFORMVERSION = "platformVersion";
56 const char* DEVICE_CAPABILITIES_PLATFORMNAME = "platformName";
57 const char* DEVICE_CAPABILITIES_WEBAPIVERSION = "webApiVersion";
58 const char* DEVICE_CAPABILITIES_NATIVEAPIVERSION = "nativeApiVersion";
59 const char* DEVICE_CAPABILITIES_CAMERA = "camera";
60 const char* DEVICE_CAPABILITIES_CAMERAFRONT = "cameraFront";
61 const char* DEVICE_CAPABILITIES_CAMERAFRONTFLASH = "cameraFrontFlash";
62 const char* DEVICE_CAPABILITIES_CAMERABACK = "cameraBack";
63 const char* DEVICE_CAPABILITIES_CAMERABACKFLASH = "cameraBackFlash";
64 const char* DEVICE_CAPABILITIES_LOCATION = "location";
65 const char* DEVICE_CAPABILITIES_LOCATIONGPS = "locationGps";
66 const char* DEVICE_CAPABILITIES_LOCATIONWPS = "locationWps";
67 const char* DEVICE_CAPABILITIES_MICROPHONE = "microphone";
68 const char* DEVICE_CAPABILITIES_USBHOST = "usbHost";
69 const char* DEVICE_CAPABILITIES_USBACCESSORY = "usbAccessory";
70 const char* DEVICE_CAPABILITIES_SCREENOUTPUTRCA = "screenOutputRca";
71 const char* DEVICE_CAPABILITIES_SCREENOUTPUTHDMI = "screenOutputHdmi";
72 const char* DEVICE_CAPABILITIES_PLATFORMCORECPUARCH = "platformCoreCpuArch";
73 const char* DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH = "platformCoreFpuArch";
74 const char* DEVICE_CAPABILITIES_SIPVOIP = "sipVoip";
75 const char* DEVICE_CAPABILITIES_DUID = "duid";
76 const char* DEVICE_CAPABILITIES_SPEECH_ROCOGNITION = "speechRecognition";
77 const char* DEVICE_CAPABILITIES_SPEECH_SYNTHESIS = "speechSynthesis";
78 const char* DEVICE_CAPABILITIES_ACCELEROMETER = "accelerometer";
79 const char* DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP = "accelerometerWakeup";
80 const char* DEVICE_CAPABILITIES_BAROMETER = "barometer";
81 const char* DEVICE_CAPABILITIES_BAROMETER_WAKEUP = "barometerWakeup";
82 const char* DEVICE_CAPABILITIES_GYROSCOPE = "gyroscope";
83 const char* DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP = "gyroscopeWakeup";
84 const char* DEVICE_CAPABILITIES_MAGNETOMETER = "magnetometer";
85 const char* DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP = "magnetometerWakeup";
86 const char* DEVICE_CAPABILITIES_PHOTOMETER = "photometer";
87 const char* DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP = "photometerWakeup";
88 const char* DEVICE_CAPABILITIES_PROXIMITY = "proximity";
89 const char* DEVICE_CAPABILITIES_PROXIMITY_WAKEUP = "proximityWakeup";
90 const char* DEVICE_CAPABILITIES_TILTMETER = "tiltmeter";
91 const char* DEVICE_CAPABILITIES_TILTMETER_WAKEUP = "tiltmeterWakeup";
92 const char* DEVICE_CAPABILITIES_DATA_ENCRYPTION = "dataEncryption";
93 const char* DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION = "graphicsAcceleration";
94 const char* DEVICE_CAPABILITIES_PUSH = "push";
95 const char* DEVICE_CAPABILITIES_TELEPHONY = "telephony";
96 const char* DEVICE_CAPABILITIES_TELEPHONY_MMS = "telephonyMms";
97 const char* DEVICE_CAPABILITIES_TELEPHONY_SMS = "telephonySms";
98 const char* DEVICE_CAPABILITIES_SCREENSIZE_NORMAL = "screenSizeNormal";
99 const char* DEVICE_CAPABILITIES_SCREENSIZE_480_800 = "screenSize480_800";
100 const char* DEVICE_CAPABILITIES_SCREENSIZE_720_1280 = "screenSize720_1280";
101 const char* DEVICE_CAPABILITIES_AUTO_ROTATION = "autoRotation";
102 const char* DEVICE_CAPABILITIES_SHELL_APP_WIDGET = "shellAppWidget";
103 const char* DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION = "visionImageRecognition";
104 const char* DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION = "visionQrcodeGeneration";
105 const char* DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION = "visionQrcodeRecognition";
106 const char* DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION = "visionFaceRecognition";
107 const char* DEVICE_CAPABILITIES_SECURE_ELEMENT = "secureElement";
108 const char* DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE = "nativeOspCompatible";
109 const char* DEVICE_CAPABILITIES_PROFILE = "profile";
112 JSClassRef JSDeviceCapabilitiesInfo::m_classRef = NULL;
114 JSClassDefinition JSDeviceCapabilitiesInfo::m_classInfo = {
116 kJSClassAttributeNone,
117 "devicecapabilitiesinfo",
134 JSStaticValue JSDeviceCapabilitiesInfo::m_properties[] = {
135 { DEVICE_CAPABILITIES_BLUETOOTH, getProperty, NULL, kJSPropertyAttributeReadOnly },
136 { DEVICE_CAPABILITIES_NFC, getProperty, NULL, kJSPropertyAttributeReadOnly },
137 { DEVICE_CAPABILITIES_NFC_RESERVED_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
138 { DEVICE_CAPABILITIES_MULTITOUCHCOUNT, getProperty, NULL, kJSPropertyAttributeReadOnly },
139 { DEVICE_CAPABILITIES_INPUTKEYBOARD, getProperty, NULL, kJSPropertyAttributeReadOnly },
140 { DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT, getProperty, NULL, kJSPropertyAttributeReadOnly },
141 { DEVICE_CAPABILITIES_WIFI, getProperty, NULL, kJSPropertyAttributeReadOnly },
142 { DEVICE_CAPABILITIES_WIFIDIRECT, getProperty, NULL, kJSPropertyAttributeReadOnly },
143 { DEVICE_CAPABILITIES_OPENGLES, getProperty, NULL, kJSPropertyAttributeReadOnly },
144 { DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT, getProperty, NULL, kJSPropertyAttributeReadOnly },
145 { DEVICE_CAPABILITIES_OPENGLESVERSION1_1, getProperty, NULL, kJSPropertyAttributeReadOnly },
146 { DEVICE_CAPABILITIES_OPENGLESVERSION2_0, getProperty, NULL, kJSPropertyAttributeReadOnly },
147 { DEVICE_CAPABILITIES_FMRADIO, getProperty, NULL, kJSPropertyAttributeReadOnly },
148 { DEVICE_CAPABILITIES_PLATFORMVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
149 { DEVICE_CAPABILITIES_PLATFORMNAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
150 { DEVICE_CAPABILITIES_WEBAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
151 { DEVICE_CAPABILITIES_NATIVEAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
152 { DEVICE_CAPABILITIES_CAMERA, getProperty, NULL, kJSPropertyAttributeReadOnly },
153 { DEVICE_CAPABILITIES_CAMERAFRONT, getProperty, NULL, kJSPropertyAttributeReadOnly },
154 { DEVICE_CAPABILITIES_CAMERAFRONTFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
155 { DEVICE_CAPABILITIES_CAMERABACK, getProperty, NULL, kJSPropertyAttributeReadOnly },
156 { DEVICE_CAPABILITIES_CAMERABACKFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
157 { DEVICE_CAPABILITIES_LOCATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
158 { DEVICE_CAPABILITIES_LOCATIONGPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
159 { DEVICE_CAPABILITIES_LOCATIONWPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
160 { DEVICE_CAPABILITIES_MICROPHONE, getProperty, NULL, kJSPropertyAttributeReadOnly },
161 { DEVICE_CAPABILITIES_USBHOST, getProperty, NULL, kJSPropertyAttributeReadOnly },
162 { DEVICE_CAPABILITIES_USBACCESSORY, getProperty, NULL, kJSPropertyAttributeReadOnly },
163 { DEVICE_CAPABILITIES_SCREENOUTPUTRCA, getProperty, NULL, kJSPropertyAttributeReadOnly },
164 { DEVICE_CAPABILITIES_SCREENOUTPUTHDMI, getProperty, NULL, kJSPropertyAttributeReadOnly },
165 { DEVICE_CAPABILITIES_PLATFORMCORECPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
166 { DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
167 { DEVICE_CAPABILITIES_SIPVOIP, getProperty, NULL, kJSPropertyAttributeReadOnly },
168 { DEVICE_CAPABILITIES_DUID, getProperty, NULL, kJSPropertyAttributeReadOnly },
169 { DEVICE_CAPABILITIES_SPEECH_ROCOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
170 { DEVICE_CAPABILITIES_SPEECH_SYNTHESIS, getProperty, NULL, kJSPropertyAttributeReadOnly },
171 { DEVICE_CAPABILITIES_ACCELEROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
172 { DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
173 { DEVICE_CAPABILITIES_BAROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
174 { DEVICE_CAPABILITIES_BAROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
175 { DEVICE_CAPABILITIES_GYROSCOPE, getProperty, NULL, kJSPropertyAttributeReadOnly },
176 { DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
177 { DEVICE_CAPABILITIES_MAGNETOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
178 { DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
179 { DEVICE_CAPABILITIES_PHOTOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
180 { DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
181 { DEVICE_CAPABILITIES_PROXIMITY, getProperty, NULL, kJSPropertyAttributeReadOnly },
182 { DEVICE_CAPABILITIES_PROXIMITY_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
183 { DEVICE_CAPABILITIES_TILTMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
184 { DEVICE_CAPABILITIES_TILTMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
185 { DEVICE_CAPABILITIES_DATA_ENCRYPTION, getProperty, NULL, kJSPropertyAttributeReadOnly },
186 { DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
187 { DEVICE_CAPABILITIES_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
188 { DEVICE_CAPABILITIES_TELEPHONY, getProperty, NULL, kJSPropertyAttributeReadOnly },
189 { DEVICE_CAPABILITIES_TELEPHONY_MMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
190 { DEVICE_CAPABILITIES_TELEPHONY_SMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
191 { DEVICE_CAPABILITIES_SCREENSIZE_NORMAL, getProperty, NULL, kJSPropertyAttributeReadOnly },
192 { DEVICE_CAPABILITIES_SCREENSIZE_480_800, getProperty, NULL, kJSPropertyAttributeReadOnly },
193 { DEVICE_CAPABILITIES_SCREENSIZE_720_1280, getProperty, NULL, kJSPropertyAttributeReadOnly },
194 { DEVICE_CAPABILITIES_AUTO_ROTATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
195 { DEVICE_CAPABILITIES_SHELL_APP_WIDGET, getProperty, NULL, kJSPropertyAttributeReadOnly },
196 { DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
197 { DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
198 { DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
199 { DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
200 { DEVICE_CAPABILITIES_SECURE_ELEMENT, getProperty, NULL, kJSPropertyAttributeReadOnly },
201 { DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE, getProperty, NULL, kJSPropertyAttributeReadOnly },
202 { DEVICE_CAPABILITIES_PROFILE, getProperty, NULL, kJSPropertyAttributeReadOnly },
206 const JSClassRef JSDeviceCapabilitiesInfo::getClassRef()
209 m_classRef = JSClassCreate(&m_classInfo);
214 const JSClassDefinition* JSDeviceCapabilitiesInfo::getClassInfo()
219 void JSDeviceCapabilitiesInfo::Initialize(JSContextRef context, JSObjectRef object)
223 void JSDeviceCapabilitiesInfo::Finalize(JSObjectRef object)
226 JSDeviceCapabilitiesPriv* priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
227 JSObjectSetPrivate(object, NULL);
228 LoggerD("Deleting DeviceCapabilitiesInfo object");
232 bool JSDeviceCapabilitiesInfo::hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName)
234 return JSUtils::hasProperty(m_properties, propertyName);
237 JSObjectRef JSDeviceCapabilitiesInfo::createJSObject(JSContextRef context, const DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo)
240 JSDeviceCapabilitiesPriv *priv = new JSDeviceCapabilitiesPriv(context, deviceCapabilitiesInfo);
241 return JSObjectMake(context, getClassRef(), priv);
244 JSValueRef JSDeviceCapabilitiesInfo::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
247 JSDeviceCapabilitiesPriv *priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
249 LoggerE("Private object not set.");
250 return JSValueMakeUndefined(context);
255 DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo = priv->getObject();
256 Converter convert(context);
258 if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BLUETOOTH)) {
259 bool bluetooth = false;
260 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BLUETOOTH_SUPPORTED, &bluetooth) == SYSTEM_INFO_ERROR_NONE) {
261 LoggerD("bluetooth : " << bluetooth);
262 deviceCapabilitiesInfo->bluetooth = bluetooth;
264 return convert.toJSValueRef(deviceCapabilitiesInfo->bluetooth);
265 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC)) {
267 if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_SUPPORTED, &nfc) == SYSTEM_INFO_ERROR_NONE) {
268 LoggerD("nfc : " << nfc);
269 deviceCapabilitiesInfo->nfc = nfc;
271 return convert.toJSValueRef(deviceCapabilitiesInfo->nfc);
272 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC_RESERVED_PUSH)) {
273 bool nfcReservedPush = false;
274 if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_RESERVED_PUSH_SUPPORTED, &nfcReservedPush) == SYSTEM_INFO_ERROR_NONE) {
275 LoggerD("nfcReservedPush : " << nfcReservedPush);
276 deviceCapabilitiesInfo->nfcReservedPush = nfcReservedPush;
278 return convert.toJSValueRef(deviceCapabilitiesInfo->nfcReservedPush);
279 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MULTITOUCHCOUNT)) {
280 int multiTouchCount = 0;
281 if (system_info_get_value_int(SYSTEM_INFO_KEY_MULTI_POINT_TOUCH_COUNT, &multiTouchCount) == SYSTEM_INFO_ERROR_NONE) {
282 LoggerD("multiTouchCount : " << multiTouchCount);
283 deviceCapabilitiesInfo->multiTouchCount = multiTouchCount;
285 return convert.toJSValueRef(deviceCapabilitiesInfo->multiTouchCount);
286 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD)) {
287 char* inputKeyboard = NULL;
288 if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
289 if (inputKeyboard != NULL) {
290 LoggerD("inputKeyboard : " << inputKeyboard);
291 if (strcmp(inputKeyboard, "NULL") == 0) {
292 deviceCapabilitiesInfo->inputKeyboard = false;
294 deviceCapabilitiesInfo->inputKeyboard = true;
299 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboard);
300 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT)) {
301 char* inputKeyboard = NULL;
302 if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
303 if (inputKeyboard != NULL) {
304 LoggerD("inputKeyboard : " << inputKeyboard);
305 if (strcmp(inputKeyboard, "NULL") == 0) {
306 deviceCapabilitiesInfo->inputKeyboard = false;
308 deviceCapabilitiesInfo->inputKeyboard = true;
313 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboardLayout);
314 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFI)) {
316 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_SUPPORTED, &wifi) == SYSTEM_INFO_ERROR_NONE) {
317 LoggerD("wifi : " << wifi);
318 deviceCapabilitiesInfo->wifi = wifi;
320 return convert.toJSValueRef(deviceCapabilitiesInfo->wifi);
321 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFIDIRECT)) {
322 bool wifiDirect = false;
323 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_DIRECT_SUPPORTED, &wifiDirect) == SYSTEM_INFO_ERROR_NONE) {
324 LoggerD("wifiDirect : " << wifiDirect);
325 deviceCapabilitiesInfo->wifiDirect = wifiDirect;
327 return convert.toJSValueRef(deviceCapabilitiesInfo->wifiDirect);
328 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES)) {
329 char* openglesVersion = NULL;
330 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
331 if (openglesVersion!= NULL) {
332 LoggerD("openglesVersion : " << openglesVersion);
333 deviceCapabilitiesInfo->opengles = true;
334 free(openglesVersion);
337 return convert.toJSValueRef(deviceCapabilitiesInfo->opengles);
338 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT)) {
339 char* textureFormat = NULL;
340 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_TEXTURE_FORMAT, &textureFormat) == SYSTEM_INFO_ERROR_NONE) {
341 if (textureFormat!= NULL) {
342 LoggerD("textureFormat : " << textureFormat);
343 deviceCapabilitiesInfo->openglestextureFormat = textureFormat;
347 return convert.toJSValueRef(deviceCapabilitiesInfo->openglestextureFormat);
348 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION1_1)) {
349 char* openglesVersion = NULL;
350 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
351 if (openglesVersion!= NULL) {
352 LoggerD("openglesVersion : " << openglesVersion);
353 if (strcmp(openglesVersion, "1.1") == 0) {
354 deviceCapabilitiesInfo->openglesVersion1_1 = true;
355 } else if (strcmp(openglesVersion, "1.1/2.0") == 0) {
356 deviceCapabilitiesInfo->openglesVersion1_1 = true;
358 free(openglesVersion);
361 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion1_1);
362 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION2_0)) {
363 char* openglesVersion = NULL;
364 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
365 if (openglesVersion!= NULL) {
366 LoggerD("openglesVersion : " << openglesVersion);
367 if (strcmp(openglesVersion, "2.0") == 0) {
368 deviceCapabilitiesInfo->openglesVersion2_0 = true;
369 } else if (strcmp(openglesVersion, "1.1/2.0") == 0) {
370 deviceCapabilitiesInfo->openglesVersion2_0 = true;
372 free(openglesVersion);
375 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion2_0);
376 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_FMRADIO)) {
377 bool fmRadio = false;
378 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FMRADIO_SUPPORTED, &fmRadio) == SYSTEM_INFO_ERROR_NONE) {
379 LoggerD("fmRadio : " << fmRadio);
380 deviceCapabilitiesInfo->fmRadio = fmRadio;
382 return convert.toJSValueRef(deviceCapabilitiesInfo->fmRadio);
383 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMVERSION)) {
384 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
385 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
386 char* platformVersion = NULL;
387 if (system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &platformVersion) == SYSTEM_INFO_ERROR_NONE) {
388 if (platformVersion) {
389 LoggerD("platformVersion : " << platformVersion);
390 deviceCapabilitiesInfo->platformVersion = platformVersion;
391 free(platformVersion);
394 return convert.toJSValueRef(deviceCapabilitiesInfo->platformVersion);
395 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMNAME)) {
396 char* platformName = NULL;
397 if (system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platformName) == SYSTEM_INFO_ERROR_NONE) {
399 LoggerD("platformName : " << platformName);
400 deviceCapabilitiesInfo->platformName = platformName;
404 return convert.toJSValueRef(deviceCapabilitiesInfo->platformName);
405 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WEBAPIVERSION)) {
406 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
407 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
409 std::ifstream file("/usr/etc/system-info.ini");
411 std::string webApiVersionMajor = "";
412 std::string webApiVersionMinor = "";
415 LoggerD("api/native version info file not found");
417 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
418 if (pcrecpp::RE("platform.web.api.version=(\\w+).(\\w+)").PartialMatch(line, &webApiVersionMajor, &webApiVersionMinor)) {
419 deviceCapabilitiesInfo->webApiVersion = webApiVersionMajor;
420 deviceCapabilitiesInfo->webApiVersion += ".";
421 deviceCapabilitiesInfo->webApiVersion += webApiVersionMinor;
422 LoggerD("web api version : " << deviceCapabilitiesInfo->webApiVersion);
429 return convert.toJSValueRef(deviceCapabilitiesInfo->webApiVersion);
430 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVEAPIVERSION)) {
431 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
432 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
434 std::ifstream file("/usr/etc/system-info.ini");
436 std::string nativeApiVersionMajor = "";
437 std::string nativeApiVersionMinor = "";
440 LoggerD("api/native version info file not found");
442 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
443 if (pcrecpp::RE("platform.native.api.version=(\\w+).(\\w+)").PartialMatch(line, &nativeApiVersionMajor, &nativeApiVersionMinor )) {
444 deviceCapabilitiesInfo->nativeApiVersion = nativeApiVersionMajor;
445 deviceCapabilitiesInfo->nativeApiVersion += ".";
446 deviceCapabilitiesInfo->nativeApiVersion += nativeApiVersionMinor;
447 LoggerD("native api version : " << deviceCapabilitiesInfo->nativeApiVersion);
454 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeApiVersion);
455 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONT)) {
456 bool cameraFront = false;
457 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_SUPPORTED, &cameraFront) == SYSTEM_INFO_ERROR_NONE) {
458 LoggerD("cameraFront : " << cameraFront);
459 deviceCapabilitiesInfo->cameraFront = cameraFront;
461 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFront);
462 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERA)) {
464 if (system_info_get_value_int(SYSTEM_INFO_KEY_CAMERA_COUNT, &cameraCount) == SYSTEM_INFO_ERROR_NONE) {
465 LoggerD("cameraCount : " << cameraCount);
466 if (cameraCount > 0) {
467 deviceCapabilitiesInfo->camera = true;
469 deviceCapabilitiesInfo->camera = false;
472 return convert.toJSValueRef(deviceCapabilitiesInfo->camera);
473 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONTFLASH)) {
474 bool cameraFrontFlash = false;
475 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_FLASH_SUPPORTED, &cameraFrontFlash) == SYSTEM_INFO_ERROR_NONE) {
476 LoggerD("cameraFrontFlash : " << cameraFrontFlash);
477 deviceCapabilitiesInfo->cameraFrontFlash = cameraFrontFlash;
479 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFrontFlash);
480 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACK)) {
481 bool cameraBack = false;
482 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_SUPPORTED, &cameraBack) == SYSTEM_INFO_ERROR_NONE) {
483 LoggerD("cameraBack : " << cameraBack);
484 deviceCapabilitiesInfo->cameraBack = cameraBack;
486 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBack);
487 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACKFLASH)) {
488 bool cameraBackFlash = false;
489 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_FLASH_SUPPORTED, &cameraBackFlash) == SYSTEM_INFO_ERROR_NONE) {
490 LoggerD("cameraBackFlash : " << cameraBackFlash);
491 deviceCapabilitiesInfo->cameraBackFlash = cameraBackFlash;
493 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBackFlash);
494 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATION)) {
495 bool location = false;
496 bool locationGps = false;
497 bool locationWps = false;
498 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
499 LoggerD("locationGps : " << locationGps);
501 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
502 LoggerD("locationWps : " << locationWps);
504 if (locationGps || locationWps) {
507 deviceCapabilitiesInfo->location = location;
508 return convert.toJSValueRef(deviceCapabilitiesInfo->location);
509 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONGPS)) {
510 bool locationGps = false;
511 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
512 LoggerD("locationGps : " << locationGps);
513 deviceCapabilitiesInfo->locationGps = locationGps;
515 return convert.toJSValueRef(deviceCapabilitiesInfo->locationGps);
516 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONWPS)) {
517 bool locationWps = false;
518 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
519 LoggerD("locationWps : " << locationWps);
520 deviceCapabilitiesInfo->locationWps = locationWps;
522 return convert.toJSValueRef(deviceCapabilitiesInfo->locationWps);
523 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MICROPHONE)) {
524 bool microphone = false;
525 if (system_info_get_value_bool(SYSTEM_INFO_KEY_MICROPHONE_SUPPORTED, µphone) == SYSTEM_INFO_ERROR_NONE) {
526 LoggerD("microphone : " << microphone);
527 deviceCapabilitiesInfo->microphone = microphone;
529 return convert.toJSValueRef(deviceCapabilitiesInfo->microphone);
530 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBHOST)) {
531 bool usbHost = false;
532 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_HOST_SUPPORTED, &usbHost) == SYSTEM_INFO_ERROR_NONE) {
533 LoggerD("usbHost : " << usbHost);
534 deviceCapabilitiesInfo->usbHost = usbHost;
536 return convert.toJSValueRef(deviceCapabilitiesInfo->usbHost);
537 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBACCESSORY)) {
538 bool usbAccessory = false;
539 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_ACCESSORY_SUPPORTED, &usbAccessory) == SYSTEM_INFO_ERROR_NONE) {
540 LoggerD("usbAccessory : " << usbAccessory);
541 deviceCapabilitiesInfo->usbAccessory = usbAccessory;
543 return convert.toJSValueRef(deviceCapabilitiesInfo->usbAccessory);
544 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTRCA)) {
545 bool screenOutputRca = false;
546 if (system_info_get_value_bool(SYSTEM_INFO_KEY_RCA_SUPPORTED, &screenOutputRca) == SYSTEM_INFO_ERROR_NONE) {
547 LoggerD("screenOutputRca : " << screenOutputRca);
548 deviceCapabilitiesInfo->screenOutputRca = screenOutputRca;
550 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputRca);
551 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTHDMI)) {
552 bool screenOutputHdmi = false;
553 if (system_info_get_value_bool(SYSTEM_INFO_KEY_HDMI_SUPPORTED, &screenOutputHdmi) == SYSTEM_INFO_ERROR_NONE) {
554 LoggerD("screenOutputHdmi : " << screenOutputHdmi);
555 deviceCapabilitiesInfo->screenOutputHdmi = screenOutputHdmi;
557 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputHdmi);
558 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCORECPUARCH)) {
559 char* platformCoreCpuArch = NULL;
560 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_CPU_ARCH, &platformCoreCpuArch) == SYSTEM_INFO_ERROR_NONE) {
561 if (platformCoreCpuArch) {
562 LoggerD("platformCoreCpuArch : " << platformCoreCpuArch);
563 deviceCapabilitiesInfo->platformCoreCpuArch = platformCoreCpuArch;
564 free(platformCoreCpuArch);
567 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreCpuArch);
568 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH)) {
569 char* platformCoreFpuArch = NULL;
570 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_FPU_ARCH, &platformCoreFpuArch) == SYSTEM_INFO_ERROR_NONE) {
571 if (platformCoreFpuArch) {
572 LoggerD("platformCoreFpuArch : " << platformCoreFpuArch);
573 deviceCapabilitiesInfo->platformCoreFpuArch = platformCoreFpuArch;
574 free(platformCoreFpuArch);
577 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreFpuArch);
578 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SIPVOIP)) {
579 bool sipVoip = false;
580 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SIP_VOIP_SUPPORTED, &sipVoip) == SYSTEM_INFO_ERROR_NONE) {
581 LoggerD("sipVoip : " << sipVoip);
582 deviceCapabilitiesInfo->sipVoip = sipVoip;
584 return convert.toJSValueRef(deviceCapabilitiesInfo->sipVoip);
585 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DUID)) {
586 return convert.toJSValueRef(deviceCapabilitiesInfo->duid);
587 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_ROCOGNITION)) {
588 bool speechRecognition = false;
589 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SPEECH_RECOGNITION_SUPPORTED, &speechRecognition) == SYSTEM_INFO_ERROR_NONE) {
590 LoggerD("speechRecognition : " << speechRecognition);
591 deviceCapabilitiesInfo->speechRecognition = speechRecognition;
593 return convert.toJSValueRef(deviceCapabilitiesInfo->speechRecognition);
594 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_SYNTHESIS)) {
595 void* handle = dlopen("/usr/lib/libtts.so",RTLD_NOW);
597 deviceCapabilitiesInfo->speechSynthesis = true;
599 deviceCapabilitiesInfo->speechSynthesis = false;
601 LoggerD("speechSynthesis : " << deviceCapabilitiesInfo->speechSynthesis);
602 return convert.toJSValueRef(deviceCapabilitiesInfo->speechSynthesis);
603 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER)) {
604 bool isAccelerometer = false;
605 if (sensor_is_supported(SENSOR_ACCELEROMETER, &isAccelerometer) == SENSOR_ERROR_NONE) {
606 LoggerD("accelerometer : " << isAccelerometer);
607 deviceCapabilitiesInfo->accelerometer = isAccelerometer;
609 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometer);
610 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP)) {
611 bool isAccelerometerWakeup = false;
612 if (sensor_awake_is_supported(SENSOR_ACCELEROMETER, &isAccelerometerWakeup) == SENSOR_ERROR_NONE) {
613 LoggerD("isAccelerometerWakeup : " << isAccelerometerWakeup);
614 deviceCapabilitiesInfo->accelerometerWakeup = isAccelerometerWakeup;
616 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometerWakeup);
617 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER)) {
618 bool isBarometer = false;
619 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BAROMETER_SENSOR_SUPPORTED, &isBarometer) == SYSTEM_INFO_ERROR_NONE) {
620 LoggerD("barometer : " << isBarometer);
621 deviceCapabilitiesInfo->barometer = isBarometer;
623 return convert.toJSValueRef(deviceCapabilitiesInfo->barometer);
624 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER_WAKEUP)) {
625 return convert.toJSValueRef(deviceCapabilitiesInfo->barometerWakeup);
626 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE)) {
627 bool isGyroscope = false;
628 if (sensor_is_supported(SENSOR_GYROSCOPE, &isGyroscope) == SENSOR_ERROR_NONE) {
629 LoggerD("gyroscope : " << isGyroscope);
630 deviceCapabilitiesInfo->gyroscope = isGyroscope;
632 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscope);
633 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP)) {
634 bool isGyroscopeWakeup = false;
635 if (sensor_awake_is_supported(SENSOR_GYROSCOPE, &isGyroscopeWakeup) == SENSOR_ERROR_NONE) {
636 LoggerD("isGyroscopeWakeup : " << isGyroscopeWakeup);
637 deviceCapabilitiesInfo->gyroscopeWakeup = isGyroscopeWakeup;
639 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscopeWakeup);
640 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER)) {
641 bool isMagnetometer = false;
642 if (sensor_is_supported(SENSOR_MAGNETIC, &isMagnetometer) == SENSOR_ERROR_NONE) {
643 LoggerD("magnetometer : " << isMagnetometer);
644 deviceCapabilitiesInfo->magnetometer = isMagnetometer;
646 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometer);
647 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP)) {
648 bool isMagnetometerWakeup = false;
649 if (sensor_awake_is_supported(SENSOR_MAGNETIC, &isMagnetometerWakeup) == SENSOR_ERROR_NONE) {
650 LoggerD("isMagnetometerWakeup : " << isMagnetometerWakeup);
651 deviceCapabilitiesInfo->magnetometerWakeup = isMagnetometerWakeup;
653 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometerWakeup);
654 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER)) {
655 bool isPhotometer = false;
656 if (sensor_is_supported(SENSOR_LIGHT, &isPhotometer) == SENSOR_ERROR_NONE) {
657 LoggerD("isPhotometer : " << isPhotometer);
658 deviceCapabilitiesInfo->photometer = isPhotometer;
660 return convert.toJSValueRef(deviceCapabilitiesInfo->photometer);
661 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP)) {
662 bool isphotometerWakeup = false;
663 if (sensor_awake_is_supported(SENSOR_LIGHT, &isphotometerWakeup) == SENSOR_ERROR_NONE) {
664 LoggerD("isphotometerWakeup : " << isphotometerWakeup);
665 deviceCapabilitiesInfo->photometerWakeup = isphotometerWakeup;
667 return convert.toJSValueRef(deviceCapabilitiesInfo->photometerWakeup);
668 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY)) {
669 bool isProximity = false;
670 if (sensor_is_supported(SENSOR_PROXIMITY, &isProximity) == SENSOR_ERROR_NONE) {
671 LoggerD("proximity : " << isProximity);
672 deviceCapabilitiesInfo->proximity = isProximity;
674 return convert.toJSValueRef(deviceCapabilitiesInfo->proximity);
675 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY_WAKEUP)) {
676 bool isProximityWakeup = false;
677 if (sensor_awake_is_supported(SENSOR_PROXIMITY, &isProximityWakeup) == SENSOR_ERROR_NONE) {
678 LoggerD("isProximityWakeup : " << isProximityWakeup);
679 deviceCapabilitiesInfo->proximityWakeup = isProximityWakeup;
681 return convert.toJSValueRef(deviceCapabilitiesInfo->proximityWakeup);
682 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER)) {
683 bool isTiltmeter = false;
684 if (sensor_is_supported(SENSOR_MOTION_TILT, &isTiltmeter) == SENSOR_ERROR_NONE) {
685 LoggerD("isTiltmeter : " << isTiltmeter);
686 deviceCapabilitiesInfo->tiltmeter = isTiltmeter;
688 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeter);
689 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER_WAKEUP)) {
690 bool isTiltmeterWakeup = false;
691 if (sensor_awake_is_supported(SENSOR_MOTION_TILT, &isTiltmeterWakeup) == SENSOR_ERROR_NONE) {
692 LoggerD("isTiltmeterWakeup : " << isTiltmeterWakeup);
693 deviceCapabilitiesInfo->tiltmeterWakeup = isTiltmeterWakeup;
695 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeterWakeup);
696 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DATA_ENCRYPTION)) {
697 void* handle = dlopen("/usr/lib/libsqlite3.so.0",RTLD_NOW);
699 deviceCapabilitiesInfo->dataEncryption = true;
701 deviceCapabilitiesInfo->dataEncryption = false;
703 LoggerD("dataEncryption : " << deviceCapabilitiesInfo->dataEncryption);
704 return convert.toJSValueRef(deviceCapabilitiesInfo->dataEncryption);
705 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION)) {
706 bool isGraphicsAccelerationSupported = false;
707 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GRAPHICS_HWACCEL_SUPPORTED , &isGraphicsAccelerationSupported) == SYSTEM_INFO_ERROR_NONE) {
708 LoggerD("graphicsAcceleration : " << isGraphicsAccelerationSupported);
709 deviceCapabilitiesInfo->graphicsAcceleration = isGraphicsAccelerationSupported;
711 return convert.toJSValueRef(deviceCapabilitiesInfo->graphicsAcceleration);
712 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PUSH)) {
713 deviceCapabilitiesInfo->push = isExist("/usr/bin/pushd");
714 LoggerD("push : " << deviceCapabilitiesInfo->push);
715 return convert.toJSValueRef(deviceCapabilitiesInfo->push);
716 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY)) {
717 deviceCapabilitiesInfo->telephony = isExist("/usr/bin/telephony-daemon");
718 LoggerD("telephony : " << deviceCapabilitiesInfo->telephony);
719 return convert.toJSValueRef(deviceCapabilitiesInfo->telephony);
720 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_MMS)) {
721 bool telephonyMms = false;
722 if (system_info_get_value_bool(SYSTEM_INFO_KEY_MMS_SUPPORTED, &telephonyMms) == SYSTEM_INFO_ERROR_NONE) {
723 LoggerD("telephonyMms : " << telephonyMms);
724 deviceCapabilitiesInfo->telephonyMms = telephonyMms;
726 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonyMms);
727 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_SMS)) {
728 bool telephonySms = false;
729 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SMS_SUPPORTED, &telephonySms) == SYSTEM_INFO_ERROR_NONE) {
730 LoggerD("telephonySms : " << telephonySms);
731 deviceCapabilitiesInfo->telephonySms = telephonySms;
733 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonySms);
734 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_NORMAL)) {
735 deviceCapabilitiesInfo->screenSizeNormal = getRegistry("screen.coordinate_system.size.normal");
736 LoggerD("screenSizeNormal : " << deviceCapabilitiesInfo->screenSizeNormal);
737 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSizeNormal);
738 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_480_800)) {
739 deviceCapabilitiesInfo->screenSize480_800 = getRegistry("screen.coordinate_system.physical.normal_480x800");
740 LoggerD("screenSize480_800 : " << deviceCapabilitiesInfo->screenSize480_800);
741 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize480_800);
742 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_720_1280)) {
743 deviceCapabilitiesInfo->screenSize720_1280 = getRegistry("screen.coordinate_system.physical.normal_720x1280");
744 LoggerD("screenSize720_1280 : " << deviceCapabilitiesInfo->screenSize720_1280);
745 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize720_1280);
746 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_AUTO_ROTATION)) {
747 bool isAutoRotation = false;
748 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FEATURE_AUTO_ROTATION_SUPPORTED, &isAutoRotation) == SYSTEM_INFO_ERROR_NONE) {
749 LoggerD("auto rotation : " << isAutoRotation);
750 deviceCapabilitiesInfo->autoRotation = isAutoRotation;
752 return convert.toJSValueRef(deviceCapabilitiesInfo->autoRotation);
753 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SHELL_APP_WIDGET)) {
754 bool isShellAppWidgetSupported = false;
755 pkgmgrinfo_pkginfo_h handle;
756 if (pkgmgrinfo_pkginfo_get_pkginfo("gi2qxenosh",&handle) == PMINFO_R_OK) {
757 isShellAppWidgetSupported = true;
758 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
759 LoggerD("shellAppWidget : " << isShellAppWidgetSupported);
761 deviceCapabilitiesInfo->shellAppWidget = isShellAppWidgetSupported;
762 return convert.toJSValueRef(deviceCapabilitiesInfo->shellAppWidget);
763 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION)) {
764 deviceCapabilitiesInfo->visionImageRecognition = isExist("/usr/lib/osp/libarengine.so");
765 LoggerD("visionImageRecognition : " << deviceCapabilitiesInfo->visionImageRecognition);
766 return convert.toJSValueRef(deviceCapabilitiesInfo->visionImageRecognition);
767 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION)) {
768 deviceCapabilitiesInfo->visionQrcodeGeneration = isExist("/usr/lib/osp/libarengine.so");
769 LoggerD("visionQrcodeGeneration : " << deviceCapabilitiesInfo->visionQrcodeGeneration);
770 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeGeneration);
771 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION)) {
772 deviceCapabilitiesInfo->visionQrcodeRecognition = isExist("/usr/lib/osp/libarengine.so");
773 LoggerD("visionQrcodeRecognition : " << deviceCapabilitiesInfo->visionQrcodeRecognition);
774 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeRecognition);
775 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION)) {
776 deviceCapabilitiesInfo->visionFaceRecognition = isExist("/usr/lib/osp/libarengine.so");
777 LoggerD("visionFaceRecognition : " << deviceCapabilitiesInfo->visionFaceRecognition);
778 return convert.toJSValueRef(deviceCapabilitiesInfo->visionFaceRecognition);
779 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SECURE_ELEMENT)) {
780 deviceCapabilitiesInfo->secureElement = isExist("/usr/bin/smartcard-daemon");
781 LoggerD("secureElement : " << deviceCapabilitiesInfo->secureElement);
782 return convert.toJSValueRef(deviceCapabilitiesInfo->secureElement);
783 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE)) {
784 deviceCapabilitiesInfo->nativeOspCompatible = getRegistry("platform.native.osp_compatible");
785 LoggerD("nativeOspCompatible : " << deviceCapabilitiesInfo->nativeOspCompatible);
786 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeOspCompatible);
787 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROFILE)) {
788 deviceCapabilitiesInfo->profile = DEVICE_PROFILE;
789 return convert.toJSValueRef(deviceCapabilitiesInfo->profile);
794 LoggerE("Exception: " << _rethrown_exception.GetMessage());
795 JSWebAPIErrorFactory::postException(context, exception, JSWebAPIErrorFactory::UNKNOWN_ERROR);
797 return JSValueMakeUndefined(context);
800 bool JSDeviceCapabilitiesInfo::isExist(const char* path)
802 if (0 == access(path ,F_OK))
807 bool JSDeviceCapabilitiesInfo::getRegistry(std::string key)
809 std::ifstream file("/usr/etc/system-info.ini");
813 _key.append("=(\\w+)");
814 std::string value = "";
818 LoggerD("Registry file not found");
820 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
821 if (pcrecpp::RE(_key).PartialMatch(line, &value)) {
822 LoggerD("Key[" << key << "] : " << value; );
823 if(0==value.compare("true")) {