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"
33 namespace Systeminfo {
34 using namespace WrtDeviceApis::CommonsJavaScript;
35 using namespace WrtDeviceApis::Commons;
36 using namespace DeviceAPI::Common;
39 const char* DEVICE_CAPABILITIES_BLUETOOTH = "bluetooth";
40 const char* DEVICE_CAPABILITIES_NFC = "nfc";
41 const char* DEVICE_CAPABILITIES_NFC_RESERVED_PUSH = "nfcReservedPush";
42 const char* DEVICE_CAPABILITIES_MULTITOUCHCOUNT = "multiTouchCount";
43 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD = "inputKeyboard";
44 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT = "inputKeyboardLayout";
45 const char* DEVICE_CAPABILITIES_WIFI = "wifi";
46 const char* DEVICE_CAPABILITIES_WIFIDIRECT = "wifiDirect";
47 const char* DEVICE_CAPABILITIES_OPENGLES = "opengles";
48 const char* DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT = "openglestextureFormat";
49 const char* DEVICE_CAPABILITIES_OPENGLESVERSION1_1 = "openglesVersion1_1";
50 const char* DEVICE_CAPABILITIES_OPENGLESVERSION2_0 = "openglesVersion2_0";
51 const char* DEVICE_CAPABILITIES_FMRADIO = "fmRadio";
52 const char* DEVICE_CAPABILITIES_PLATFORMVERSION = "platformVersion";
53 const char* DEVICE_CAPABILITIES_PLATFORMNAME = "platformName";
54 const char* DEVICE_CAPABILITIES_WEBAPIVERSION = "webApiVersion";
55 const char* DEVICE_CAPABILITIES_NATIVEAPIVERSION = "nativeApiVersion";
56 const char* DEVICE_CAPABILITIES_CAMERA = "camera";
57 const char* DEVICE_CAPABILITIES_CAMERAFRONT = "cameraFront";
58 const char* DEVICE_CAPABILITIES_CAMERAFRONTFLASH = "cameraFrontFlash";
59 const char* DEVICE_CAPABILITIES_CAMERABACK = "cameraBack";
60 const char* DEVICE_CAPABILITIES_CAMERABACKFLASH = "cameraBackFlash";
61 const char* DEVICE_CAPABILITIES_LOCATION = "location";
62 const char* DEVICE_CAPABILITIES_LOCATIONGPS = "locationGps";
63 const char* DEVICE_CAPABILITIES_LOCATIONWPS = "locationWps";
64 const char* DEVICE_CAPABILITIES_MICROPHONE = "microphone";
65 const char* DEVICE_CAPABILITIES_USBHOST = "usbHost";
66 const char* DEVICE_CAPABILITIES_USBACCESSORY = "usbAccessory";
67 const char* DEVICE_CAPABILITIES_SCREENOUTPUTRCA = "screenOutputRca";
68 const char* DEVICE_CAPABILITIES_SCREENOUTPUTHDMI = "screenOutputHdmi";
69 const char* DEVICE_CAPABILITIES_PLATFORMCORECPUARCH = "platformCoreCpuArch";
70 const char* DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH = "platformCoreFpuArch";
71 const char* DEVICE_CAPABILITIES_SIPVOIP = "sipVoip";
72 const char* DEVICE_CAPABILITIES_DUID = "duid";
73 const char* DEVICE_CAPABILITIES_SPEECH_ROCOGNITION = "speechRecognition";
74 const char* DEVICE_CAPABILITIES_SPEECH_SYNTHESIS = "speechSynthesis";
75 const char* DEVICE_CAPABILITIES_ACCELEROMETER = "accelerometer";
76 const char* DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP = "accelerometerWakeup";
77 const char* DEVICE_CAPABILITIES_BAROMETER = "barometer";
78 const char* DEVICE_CAPABILITIES_BAROMETER_WAKEUP = "barometerWakeup";
79 const char* DEVICE_CAPABILITIES_GYROSCOPE = "gyroscope";
80 const char* DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP = "gyroscopeWakeup";
81 const char* DEVICE_CAPABILITIES_MAGNETOMETER = "magnetometer";
82 const char* DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP = "magnetometerWakeup";
83 const char* DEVICE_CAPABILITIES_PHOTOMETER = "photometer";
84 const char* DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP = "photometerWakeup";
85 const char* DEVICE_CAPABILITIES_PROXIMITY = "proximity";
86 const char* DEVICE_CAPABILITIES_PROXIMITY_WAKEUP = "proximityWakeup";
87 const char* DEVICE_CAPABILITIES_TILTMETER = "tiltmeter";
88 const char* DEVICE_CAPABILITIES_TILTMETER_WAKEUP = "tiltmeterWakeup";
89 const char* DEVICE_CAPABILITIES_DATA_ENCRYPTION = "dataEncryption";
90 const char* DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION = "graphicsAcceleration";
91 const char* DEVICE_CAPABILITIES_PUSH = "push";
92 const char* DEVICE_CAPABILITIES_TELEPHONY = "telephony";
93 const char* DEVICE_CAPABILITIES_TELEPHONY_MMS = "telephonyMms";
94 const char* DEVICE_CAPABILITIES_TELEPHONY_SMS = "telephonySms";
95 const char* DEVICE_CAPABILITIES_SCREENSIZE_NORMAL = "screenSizeNormal";
96 const char* DEVICE_CAPABILITIES_SCREENSIZE_480_800 = "screenSize480_800";
97 const char* DEVICE_CAPABILITIES_SCREENSIZE_720_1280 = "screenSize720_1280";
98 const char* DEVICE_CAPABILITIES_AUTO_ROTATION = "autoRotation";
99 const char* DEVICE_CAPABILITIES_SHELL_APP_WIDGET = "shellAppWidget";
100 const char* DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION = "visionImageRecognition";
101 const char* DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION = "visionQrcodeGeneration";
102 const char* DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION = "visionQrcodeRecognition";
103 const char* DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION = "visionFaceRecognition";
104 const char* DEVICE_CAPABILITIES_SECURE_ELEMENT = "secureElement";
105 const char* DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE = "nativeOspCompatible";
108 JSClassRef JSDeviceCapabilitiesInfo::m_classRef = NULL;
110 JSClassDefinition JSDeviceCapabilitiesInfo::m_classInfo = {
112 kJSClassAttributeNone,
113 "devicecapabilitiesinfo",
130 JSStaticValue JSDeviceCapabilitiesInfo::m_properties[] = {
131 { DEVICE_CAPABILITIES_BLUETOOTH, getProperty, NULL, kJSPropertyAttributeReadOnly },
132 { DEVICE_CAPABILITIES_NFC, getProperty, NULL, kJSPropertyAttributeReadOnly },
133 { DEVICE_CAPABILITIES_NFC_RESERVED_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
134 { DEVICE_CAPABILITIES_MULTITOUCHCOUNT, getProperty, NULL, kJSPropertyAttributeReadOnly },
135 { DEVICE_CAPABILITIES_INPUTKEYBOARD, getProperty, NULL, kJSPropertyAttributeReadOnly },
136 { DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT, getProperty, NULL, kJSPropertyAttributeReadOnly },
137 { DEVICE_CAPABILITIES_WIFI, getProperty, NULL, kJSPropertyAttributeReadOnly },
138 { DEVICE_CAPABILITIES_WIFIDIRECT, getProperty, NULL, kJSPropertyAttributeReadOnly },
139 { DEVICE_CAPABILITIES_OPENGLES, getProperty, NULL, kJSPropertyAttributeReadOnly },
140 { DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT, getProperty, NULL, kJSPropertyAttributeReadOnly },
141 { DEVICE_CAPABILITIES_OPENGLESVERSION1_1, getProperty, NULL, kJSPropertyAttributeReadOnly },
142 { DEVICE_CAPABILITIES_OPENGLESVERSION2_0, getProperty, NULL, kJSPropertyAttributeReadOnly },
143 { DEVICE_CAPABILITIES_FMRADIO, getProperty, NULL, kJSPropertyAttributeReadOnly },
144 { DEVICE_CAPABILITIES_PLATFORMVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
145 { DEVICE_CAPABILITIES_PLATFORMNAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
146 { DEVICE_CAPABILITIES_WEBAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
147 { DEVICE_CAPABILITIES_NATIVEAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
148 { DEVICE_CAPABILITIES_CAMERA, getProperty, NULL, kJSPropertyAttributeReadOnly },
149 { DEVICE_CAPABILITIES_CAMERAFRONT, getProperty, NULL, kJSPropertyAttributeReadOnly },
150 { DEVICE_CAPABILITIES_CAMERAFRONTFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
151 { DEVICE_CAPABILITIES_CAMERABACK, getProperty, NULL, kJSPropertyAttributeReadOnly },
152 { DEVICE_CAPABILITIES_CAMERABACKFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
153 { DEVICE_CAPABILITIES_LOCATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
154 { DEVICE_CAPABILITIES_LOCATIONGPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
155 { DEVICE_CAPABILITIES_LOCATIONWPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
156 { DEVICE_CAPABILITIES_MICROPHONE, getProperty, NULL, kJSPropertyAttributeReadOnly },
157 { DEVICE_CAPABILITIES_USBHOST, getProperty, NULL, kJSPropertyAttributeReadOnly },
158 { DEVICE_CAPABILITIES_USBACCESSORY, getProperty, NULL, kJSPropertyAttributeReadOnly },
159 { DEVICE_CAPABILITIES_SCREENOUTPUTRCA, getProperty, NULL, kJSPropertyAttributeReadOnly },
160 { DEVICE_CAPABILITIES_SCREENOUTPUTHDMI, getProperty, NULL, kJSPropertyAttributeReadOnly },
161 { DEVICE_CAPABILITIES_PLATFORMCORECPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
162 { DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
163 { DEVICE_CAPABILITIES_SIPVOIP, getProperty, NULL, kJSPropertyAttributeReadOnly },
164 { DEVICE_CAPABILITIES_DUID, getProperty, NULL, kJSPropertyAttributeReadOnly },
165 { DEVICE_CAPABILITIES_SPEECH_ROCOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
166 { DEVICE_CAPABILITIES_SPEECH_SYNTHESIS, getProperty, NULL, kJSPropertyAttributeReadOnly },
167 { DEVICE_CAPABILITIES_ACCELEROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
168 { DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
169 { DEVICE_CAPABILITIES_BAROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
170 { DEVICE_CAPABILITIES_BAROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
171 { DEVICE_CAPABILITIES_GYROSCOPE, getProperty, NULL, kJSPropertyAttributeReadOnly },
172 { DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
173 { DEVICE_CAPABILITIES_MAGNETOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
174 { DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
175 { DEVICE_CAPABILITIES_PHOTOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
176 { DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
177 { DEVICE_CAPABILITIES_PROXIMITY, getProperty, NULL, kJSPropertyAttributeReadOnly },
178 { DEVICE_CAPABILITIES_PROXIMITY_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
179 { DEVICE_CAPABILITIES_TILTMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
180 { DEVICE_CAPABILITIES_TILTMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
181 { DEVICE_CAPABILITIES_DATA_ENCRYPTION, getProperty, NULL, kJSPropertyAttributeReadOnly },
182 { DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
183 { DEVICE_CAPABILITIES_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
184 { DEVICE_CAPABILITIES_TELEPHONY, getProperty, NULL, kJSPropertyAttributeReadOnly },
185 { DEVICE_CAPABILITIES_TELEPHONY_MMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
186 { DEVICE_CAPABILITIES_TELEPHONY_SMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
187 { DEVICE_CAPABILITIES_SCREENSIZE_NORMAL, getProperty, NULL, kJSPropertyAttributeReadOnly },
188 { DEVICE_CAPABILITIES_SCREENSIZE_480_800, getProperty, NULL, kJSPropertyAttributeReadOnly },
189 { DEVICE_CAPABILITIES_SCREENSIZE_720_1280, getProperty, NULL, kJSPropertyAttributeReadOnly },
190 { DEVICE_CAPABILITIES_AUTO_ROTATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
191 { DEVICE_CAPABILITIES_SHELL_APP_WIDGET, getProperty, NULL, kJSPropertyAttributeReadOnly },
192 { DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
193 { DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
194 { DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
195 { DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
196 { DEVICE_CAPABILITIES_SECURE_ELEMENT, getProperty, NULL, kJSPropertyAttributeReadOnly },
197 { DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE, getProperty, NULL, kJSPropertyAttributeReadOnly },
201 const JSClassRef JSDeviceCapabilitiesInfo::getClassRef()
204 m_classRef = JSClassCreate(&m_classInfo);
209 const JSClassDefinition* JSDeviceCapabilitiesInfo::getClassInfo()
214 void JSDeviceCapabilitiesInfo::Initialize(JSContextRef context, JSObjectRef object)
218 void JSDeviceCapabilitiesInfo::Finalize(JSObjectRef object)
221 JSDeviceCapabilitiesPriv* priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
222 JSObjectSetPrivate(object, NULL);
223 LoggerD("Deleting DeviceCapabilitiesInfo object");
227 bool JSDeviceCapabilitiesInfo::hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName)
229 return JSUtils::hasProperty(m_properties, propertyName);
232 JSObjectRef JSDeviceCapabilitiesInfo::createJSObject(JSContextRef context, const DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo)
235 JSDeviceCapabilitiesPriv *priv = new JSDeviceCapabilitiesPriv(context, deviceCapabilitiesInfo);
236 return JSObjectMake(context, getClassRef(), priv);
239 JSValueRef JSDeviceCapabilitiesInfo::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
242 JSDeviceCapabilitiesPriv *priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
244 LoggerE("Private object not set.");
245 return JSValueMakeUndefined(context);
250 DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo = priv->getObject();
251 Converter convert(context);
253 if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BLUETOOTH)) {
254 bool bluetooth = false;
255 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BLUETOOTH_SUPPORTED, &bluetooth) == SYSTEM_INFO_ERROR_NONE) {
256 LoggerD("bluetooth : " << bluetooth);
257 deviceCapabilitiesInfo->bluetooth = bluetooth;
259 return convert.toJSValueRef(deviceCapabilitiesInfo->bluetooth);
260 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC)) {
262 if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_SUPPORTED, &nfc) == SYSTEM_INFO_ERROR_NONE) {
263 LoggerD("nfc : " << nfc);
264 deviceCapabilitiesInfo->nfc = nfc;
266 return convert.toJSValueRef(deviceCapabilitiesInfo->nfc);
267 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC_RESERVED_PUSH)) {
268 bool nfcReservedPush = false;
269 if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_RESERVED_PUSH_SUPPORTED, &nfcReservedPush) == SYSTEM_INFO_ERROR_NONE) {
270 LoggerD("nfcReservedPush : " << nfcReservedPush);
271 deviceCapabilitiesInfo->nfcReservedPush = nfcReservedPush;
273 return convert.toJSValueRef(deviceCapabilitiesInfo->nfcReservedPush);
274 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MULTITOUCHCOUNT)) {
275 int multiTouchCount = 0;
276 if (system_info_get_value_int(SYSTEM_INFO_KEY_MULTI_POINT_TOUCH_COUNT, &multiTouchCount) == SYSTEM_INFO_ERROR_NONE) {
277 LoggerD("multiTouchCount : " << multiTouchCount);
278 deviceCapabilitiesInfo->multiTouchCount = multiTouchCount;
280 return convert.toJSValueRef(deviceCapabilitiesInfo->multiTouchCount);
281 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD)) {
282 char* inputKeyboard = NULL;
283 if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
284 if (inputKeyboard != NULL) {
285 LoggerD("inputKeyboard : " << inputKeyboard);
286 if (strcmp(inputKeyboard, "NULL") == 0) {
287 deviceCapabilitiesInfo->inputKeyboard = false;
289 deviceCapabilitiesInfo->inputKeyboard = true;
294 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboard);
295 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT)) {
296 char* inputKeyboard = NULL;
297 if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
298 if (inputKeyboard != NULL) {
299 LoggerD("inputKeyboard : " << inputKeyboard);
300 if (strcmp(inputKeyboard, "NULL") == 0) {
301 deviceCapabilitiesInfo->inputKeyboard = false;
303 deviceCapabilitiesInfo->inputKeyboard = true;
308 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboardLayout);
309 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFI)) {
311 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_SUPPORTED, &wifi) == SYSTEM_INFO_ERROR_NONE) {
312 LoggerD("wifi : " << wifi);
313 deviceCapabilitiesInfo->wifi = wifi;
315 return convert.toJSValueRef(deviceCapabilitiesInfo->wifi);
316 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFIDIRECT)) {
317 bool wifiDirect = false;
318 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_DIRECT_SUPPORTED, &wifiDirect) == SYSTEM_INFO_ERROR_NONE) {
319 LoggerD("wifiDirect : " << wifiDirect);
320 deviceCapabilitiesInfo->wifiDirect = wifiDirect;
322 return convert.toJSValueRef(deviceCapabilitiesInfo->wifiDirect);
323 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES)) {
324 char* openglesVersion = NULL;
325 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
326 if (openglesVersion!= NULL) {
327 LoggerD("openglesVersion : " << openglesVersion);
328 deviceCapabilitiesInfo->opengles = true;
329 free(openglesVersion);
332 return convert.toJSValueRef(deviceCapabilitiesInfo->opengles);
333 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT)) {
334 char* textureFormat = NULL;
335 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_TEXTURE_FORMAT, &textureFormat) == SYSTEM_INFO_ERROR_NONE) {
336 if (textureFormat!= NULL) {
337 LoggerD("textureFormat : " << textureFormat);
338 deviceCapabilitiesInfo->openglestextureFormat = textureFormat;
342 return convert.toJSValueRef(deviceCapabilitiesInfo->openglestextureFormat);
343 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION1_1)) {
344 char* openglesVersion = NULL;
345 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
346 if (openglesVersion!= NULL) {
347 LoggerD("openglesVersion : " << openglesVersion);
348 if (strcmp(openglesVersion, "1.1") == 0) {
349 deviceCapabilitiesInfo->openglesVersion1_1 = true;
350 } else if (strcmp(openglesVersion, "1.1/2.0") == 0) {
351 deviceCapabilitiesInfo->openglesVersion1_1 = true;
353 free(openglesVersion);
356 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion1_1);
357 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION2_0)) {
358 char* openglesVersion = NULL;
359 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
360 if (openglesVersion!= NULL) {
361 LoggerD("openglesVersion : " << openglesVersion);
362 if (strcmp(openglesVersion, "2.0") == 0) {
363 deviceCapabilitiesInfo->openglesVersion2_0 = true;
364 } else if (strcmp(openglesVersion, "1.1/2.0") == 0) {
365 deviceCapabilitiesInfo->openglesVersion2_0 = true;
367 free(openglesVersion);
370 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion2_0);
371 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_FMRADIO)) {
372 bool fmRadio = false;
373 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FMRADIO_SUPPORTED, &fmRadio) == SYSTEM_INFO_ERROR_NONE) {
374 LoggerD("fmRadio : " << fmRadio);
375 deviceCapabilitiesInfo->fmRadio = fmRadio;
377 return convert.toJSValueRef(deviceCapabilitiesInfo->fmRadio);
378 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMVERSION)) {
379 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
380 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
381 char* platformVersion = NULL;
382 if (system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &platformVersion) == SYSTEM_INFO_ERROR_NONE) {
383 if (platformVersion) {
384 LoggerD("platformVersion : " << platformVersion);
385 deviceCapabilitiesInfo->platformVersion = platformVersion;
386 free(platformVersion);
389 return convert.toJSValueRef(deviceCapabilitiesInfo->platformVersion);
390 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMNAME)) {
391 char* platformName = NULL;
392 if (system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platformName) == SYSTEM_INFO_ERROR_NONE) {
394 LoggerD("platformName : " << platformName);
395 deviceCapabilitiesInfo->platformName = platformName;
399 return convert.toJSValueRef(deviceCapabilitiesInfo->platformName);
400 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WEBAPIVERSION)) {
401 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
402 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
404 std::ifstream file("/usr/etc/system-info.ini");
406 std::string webApiVersionMajor = "";
407 std::string webApiVersionMinor = "";
410 LoggerD("api/native version info file not found");
412 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
413 if (pcrecpp::RE("platform.web.api.version=(\\w+).(\\w+)").PartialMatch(line, &webApiVersionMajor, &webApiVersionMinor)) {
414 deviceCapabilitiesInfo->webApiVersion = webApiVersionMajor;
415 deviceCapabilitiesInfo->webApiVersion += ".";
416 deviceCapabilitiesInfo->webApiVersion += webApiVersionMinor;
417 LoggerD("web api version : " << deviceCapabilitiesInfo->webApiVersion);
424 return convert.toJSValueRef(deviceCapabilitiesInfo->webApiVersion);
425 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVEAPIVERSION)) {
426 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
427 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
429 std::ifstream file("/usr/etc/system-info.ini");
431 std::string nativeApiVersionMajor = "";
432 std::string nativeApiVersionMinor = "";
435 LoggerD("api/native version info file not found");
437 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
438 if (pcrecpp::RE("platform.native.api.version=(\\w+).(\\w+)").PartialMatch(line, &nativeApiVersionMajor, &nativeApiVersionMinor )) {
439 deviceCapabilitiesInfo->nativeApiVersion = nativeApiVersionMajor;
440 deviceCapabilitiesInfo->nativeApiVersion += ".";
441 deviceCapabilitiesInfo->nativeApiVersion += nativeApiVersionMinor;
442 LoggerD("native api version : " << deviceCapabilitiesInfo->nativeApiVersion);
449 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeApiVersion);
450 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONT)) {
451 bool cameraFront = false;
452 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_SUPPORTED, &cameraFront) == SYSTEM_INFO_ERROR_NONE) {
453 LoggerD("cameraFront : " << cameraFront);
454 deviceCapabilitiesInfo->cameraFront = cameraFront;
456 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFront);
457 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERA)) {
459 if (system_info_get_value_int(SYSTEM_INFO_KEY_CAMERA_COUNT, &cameraCount) == SYSTEM_INFO_ERROR_NONE) {
460 LoggerD("cameraCount : " << cameraCount);
461 if (cameraCount > 0) {
462 deviceCapabilitiesInfo->camera = true;
464 deviceCapabilitiesInfo->camera = false;
467 return convert.toJSValueRef(deviceCapabilitiesInfo->camera);
468 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONTFLASH)) {
469 bool cameraFrontFlash = false;
470 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_FLASH_SUPPORTED, &cameraFrontFlash) == SYSTEM_INFO_ERROR_NONE) {
471 LoggerD("cameraFrontFlash : " << cameraFrontFlash);
472 deviceCapabilitiesInfo->cameraFrontFlash = cameraFrontFlash;
474 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFrontFlash);
475 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACK)) {
476 bool cameraBack = false;
477 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_SUPPORTED, &cameraBack) == SYSTEM_INFO_ERROR_NONE) {
478 LoggerD("cameraBack : " << cameraBack);
479 deviceCapabilitiesInfo->cameraBack = cameraBack;
481 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBack);
482 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACKFLASH)) {
483 bool cameraBackFlash = false;
484 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_FLASH_SUPPORTED, &cameraBackFlash) == SYSTEM_INFO_ERROR_NONE) {
485 LoggerD("cameraBackFlash : " << cameraBackFlash);
486 deviceCapabilitiesInfo->cameraBackFlash = cameraBackFlash;
488 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBackFlash);
489 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATION)) {
490 bool location = false;
491 bool locationGps = false;
492 bool locationWps = false;
493 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
494 LoggerD("locationGps : " << locationGps);
496 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
497 LoggerD("locationWps : " << locationWps);
499 if (locationGps || locationWps) {
502 deviceCapabilitiesInfo->location = location;
503 return convert.toJSValueRef(deviceCapabilitiesInfo->location);
504 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONGPS)) {
505 bool locationGps = false;
506 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
507 LoggerD("locationGps : " << locationGps);
508 deviceCapabilitiesInfo->locationGps = locationGps;
510 return convert.toJSValueRef(deviceCapabilitiesInfo->locationGps);
511 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONWPS)) {
512 bool locationWps = false;
513 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
514 LoggerD("locationWps : " << locationWps);
515 deviceCapabilitiesInfo->locationWps = locationWps;
517 return convert.toJSValueRef(deviceCapabilitiesInfo->locationWps);
518 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MICROPHONE)) {
519 bool microphone = false;
520 if (system_info_get_value_bool(SYSTEM_INFO_KEY_MICROPHONE_SUPPORTED, µphone) == SYSTEM_INFO_ERROR_NONE) {
521 LoggerD("microphone : " << microphone);
522 deviceCapabilitiesInfo->microphone = microphone;
524 return convert.toJSValueRef(deviceCapabilitiesInfo->microphone);
525 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBHOST)) {
526 bool usbHost = false;
527 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_HOST_SUPPORTED, &usbHost) == SYSTEM_INFO_ERROR_NONE) {
528 LoggerD("usbHost : " << usbHost);
529 deviceCapabilitiesInfo->usbHost = usbHost;
531 return convert.toJSValueRef(deviceCapabilitiesInfo->usbHost);
532 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBACCESSORY)) {
533 bool usbAccessory = false;
534 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_ACCESSORY_SUPPORTED, &usbAccessory) == SYSTEM_INFO_ERROR_NONE) {
535 LoggerD("usbAccessory : " << usbAccessory);
536 deviceCapabilitiesInfo->usbAccessory = usbAccessory;
538 return convert.toJSValueRef(deviceCapabilitiesInfo->usbAccessory);
539 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTRCA)) {
540 bool screenOutputRca = false;
541 if (system_info_get_value_bool(SYSTEM_INFO_KEY_RCA_SUPPORTED, &screenOutputRca) == SYSTEM_INFO_ERROR_NONE) {
542 LoggerD("screenOutputRca : " << screenOutputRca);
543 deviceCapabilitiesInfo->screenOutputRca = screenOutputRca;
545 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputRca);
546 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTHDMI)) {
547 bool screenOutputHdmi = false;
548 if (system_info_get_value_bool(SYSTEM_INFO_KEY_HDMI_SUPPORTED, &screenOutputHdmi) == SYSTEM_INFO_ERROR_NONE) {
549 LoggerD("screenOutputHdmi : " << screenOutputHdmi);
550 deviceCapabilitiesInfo->screenOutputHdmi = screenOutputHdmi;
552 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputHdmi);
553 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCORECPUARCH)) {
554 char* platformCoreCpuArch = NULL;
555 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_CPU_ARCH, &platformCoreCpuArch) == SYSTEM_INFO_ERROR_NONE) {
556 if (platformCoreCpuArch) {
557 LoggerD("platformCoreCpuArch : " << platformCoreCpuArch);
558 deviceCapabilitiesInfo->platformCoreCpuArch = platformCoreCpuArch;
559 free(platformCoreCpuArch);
562 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreCpuArch);
563 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH)) {
564 char* platformCoreFpuArch = NULL;
565 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_FPU_ARCH, &platformCoreFpuArch) == SYSTEM_INFO_ERROR_NONE) {
566 if (platformCoreFpuArch) {
567 LoggerD("platformCoreFpuArch : " << platformCoreFpuArch);
568 deviceCapabilitiesInfo->platformCoreFpuArch = platformCoreFpuArch;
569 free(platformCoreFpuArch);
572 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreFpuArch);
573 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SIPVOIP)) {
574 bool sipVoip = false;
575 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SIP_VOIP_SUPPORTED, &sipVoip) == SYSTEM_INFO_ERROR_NONE) {
576 LoggerD("sipVoip : " << sipVoip);
577 deviceCapabilitiesInfo->sipVoip = sipVoip;
579 return convert.toJSValueRef(deviceCapabilitiesInfo->sipVoip);
580 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DUID)) {
582 if (system_info_get_value_string(SYSTEM_INFO_KEY_DEVICE_UUID, &duid) == SYSTEM_INFO_ERROR_NONE) {
584 LoggerD("duid : " << duid);
585 deviceCapabilitiesInfo->duid = duid;
589 return convert.toJSValueRef(deviceCapabilitiesInfo->duid);
590 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_ROCOGNITION)) {
591 bool speechRecognition = false;
592 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SPEECH_RECOGNITION_SUPPORTED, &speechRecognition) == SYSTEM_INFO_ERROR_NONE) {
593 LoggerD("speechRecognition : " << speechRecognition);
594 deviceCapabilitiesInfo->speechRecognition = speechRecognition;
596 return convert.toJSValueRef(deviceCapabilitiesInfo->speechRecognition);
597 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_SYNTHESIS)) {
598 void* handle = dlopen("/usr/lib/libtts.so",RTLD_NOW);
600 deviceCapabilitiesInfo->speechSynthesis = true;
602 deviceCapabilitiesInfo->speechSynthesis = false;
604 LoggerD("speechSynthesis : " << deviceCapabilitiesInfo->speechSynthesis);
605 return convert.toJSValueRef(deviceCapabilitiesInfo->speechSynthesis);
606 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER)) {
607 bool isAccelerometer = false;
608 if (sensor_is_supported(SENSOR_ACCELEROMETER, &isAccelerometer) == SENSOR_ERROR_NONE) {
609 LoggerD("accelerometer : " << isAccelerometer);
610 deviceCapabilitiesInfo->accelerometer = isAccelerometer;
612 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometer);
613 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP)) {
614 bool isAccelerometerWakeup = false;
615 if (sensor_awake_is_supported(SENSOR_ACCELEROMETER, &isAccelerometerWakeup) == SENSOR_ERROR_NONE) {
616 LoggerD("isAccelerometerWakeup : " << isAccelerometerWakeup);
617 deviceCapabilitiesInfo->accelerometerWakeup = isAccelerometerWakeup;
619 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometerWakeup);
620 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER)) {
621 bool isBarometer = false;
622 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BAROMETER_SENSOR_SUPPORTED, &isBarometer) == SYSTEM_INFO_ERROR_NONE) {
623 LoggerD("barometer : " << isBarometer);
624 deviceCapabilitiesInfo->barometer = isBarometer;
626 return convert.toJSValueRef(deviceCapabilitiesInfo->barometer);
627 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER_WAKEUP)) {
628 return convert.toJSValueRef(deviceCapabilitiesInfo->barometerWakeup);
629 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE)) {
630 bool isGyroscope = false;
631 if (sensor_is_supported(SENSOR_GYROSCOPE, &isGyroscope) == SENSOR_ERROR_NONE) {
632 LoggerD("gyroscope : " << isGyroscope);
633 deviceCapabilitiesInfo->gyroscope = isGyroscope;
635 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscope);
636 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP)) {
637 bool isGyroscopeWakeup = false;
638 if (sensor_awake_is_supported(SENSOR_GYROSCOPE, &isGyroscopeWakeup) == SENSOR_ERROR_NONE) {
639 LoggerD("isGyroscopeWakeup : " << isGyroscopeWakeup);
640 deviceCapabilitiesInfo->gyroscopeWakeup = isGyroscopeWakeup;
642 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscopeWakeup);
643 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER)) {
644 bool isMagnetometer = false;
645 if (sensor_is_supported(SENSOR_MAGNETIC, &isMagnetometer) == SENSOR_ERROR_NONE) {
646 LoggerD("magnetometer : " << isMagnetometer);
647 deviceCapabilitiesInfo->magnetometer = isMagnetometer;
649 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometer);
650 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP)) {
651 bool isMagnetometerWakeup = false;
652 if (sensor_awake_is_supported(SENSOR_MAGNETIC, &isMagnetometerWakeup) == SENSOR_ERROR_NONE) {
653 LoggerD("isMagnetometerWakeup : " << isMagnetometerWakeup);
654 deviceCapabilitiesInfo->magnetometerWakeup = isMagnetometerWakeup;
656 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometerWakeup);
657 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER)) {
658 bool isPhotometer = false;
659 if (sensor_is_supported(SENSOR_LIGHT, &isPhotometer) == SENSOR_ERROR_NONE) {
660 LoggerD("isPhotometer : " << isPhotometer);
661 deviceCapabilitiesInfo->photometer = isPhotometer;
663 return convert.toJSValueRef(deviceCapabilitiesInfo->photometer);
664 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP)) {
665 bool isphotometerWakeup = false;
666 if (sensor_awake_is_supported(SENSOR_LIGHT, &isphotometerWakeup) == SENSOR_ERROR_NONE) {
667 LoggerD("isphotometerWakeup : " << isphotometerWakeup);
668 deviceCapabilitiesInfo->photometerWakeup = isphotometerWakeup;
670 return convert.toJSValueRef(deviceCapabilitiesInfo->photometerWakeup);
671 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY)) {
672 bool isProximity = false;
673 if (sensor_is_supported(SENSOR_PROXIMITY, &isProximity) == SENSOR_ERROR_NONE) {
674 LoggerD("proximity : " << isProximity);
675 deviceCapabilitiesInfo->proximity = isProximity;
677 return convert.toJSValueRef(deviceCapabilitiesInfo->proximity);
678 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY_WAKEUP)) {
679 bool isProximityWakeup = false;
680 if (sensor_awake_is_supported(SENSOR_PROXIMITY, &isProximityWakeup) == SENSOR_ERROR_NONE) {
681 LoggerD("isProximityWakeup : " << isProximityWakeup);
682 deviceCapabilitiesInfo->proximityWakeup = isProximityWakeup;
684 return convert.toJSValueRef(deviceCapabilitiesInfo->proximityWakeup);
685 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER)) {
686 bool isTiltmeter = false;
687 if (sensor_is_supported(SENSOR_MOTION_TILT, &isTiltmeter) == SENSOR_ERROR_NONE) {
688 LoggerD("isTiltmeter : " << isTiltmeter);
689 deviceCapabilitiesInfo->tiltmeter = isTiltmeter;
691 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeter);
692 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER_WAKEUP)) {
693 bool isTiltmeterWakeup = false;
694 if (sensor_awake_is_supported(SENSOR_MOTION_TILT, &isTiltmeterWakeup) == SENSOR_ERROR_NONE) {
695 LoggerD("isTiltmeterWakeup : " << isTiltmeterWakeup);
696 deviceCapabilitiesInfo->tiltmeterWakeup = isTiltmeterWakeup;
698 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeterWakeup);
699 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DATA_ENCRYPTION)) {
700 void* handle = dlopen("/usr/lib/libsqlite3.so.0",RTLD_NOW);
702 deviceCapabilitiesInfo->dataEncryption = true;
704 deviceCapabilitiesInfo->dataEncryption = false;
706 LoggerD("dataEncryption : " << deviceCapabilitiesInfo->dataEncryption);
707 return convert.toJSValueRef(deviceCapabilitiesInfo->dataEncryption);
708 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION)) {
709 bool isGraphicsAccelerationSupported = false;
710 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GRAPHICS_HWACCEL_SUPPORTED , &isGraphicsAccelerationSupported) == SYSTEM_INFO_ERROR_NONE) {
711 LoggerD("graphicsAcceleration : " << isGraphicsAccelerationSupported);
712 deviceCapabilitiesInfo->graphicsAcceleration = isGraphicsAccelerationSupported;
714 return convert.toJSValueRef(deviceCapabilitiesInfo->graphicsAcceleration);
715 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PUSH)) {
716 deviceCapabilitiesInfo->push = isExist("/usr/bin/pushd");
717 LoggerD("push : " << deviceCapabilitiesInfo->push);
718 return convert.toJSValueRef(deviceCapabilitiesInfo->push);
719 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY)) {
720 deviceCapabilitiesInfo->telephony = isExist("/usr/bin/telephony-daemon");
721 LoggerD("telephony : " << deviceCapabilitiesInfo->telephony);
722 return convert.toJSValueRef(deviceCapabilitiesInfo->telephony);
723 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_MMS)) {
724 bool telephonyMms = false;
725 if (system_info_get_value_bool(SYSTEM_INFO_KEY_MMS_SUPPORTED, &telephonyMms) == SYSTEM_INFO_ERROR_NONE) {
726 LoggerD("telephonyMms : " << telephonyMms);
727 deviceCapabilitiesInfo->telephonyMms = telephonyMms;
729 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonyMms);
730 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_SMS)) {
731 bool telephonySms = false;
732 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SMS_SUPPORTED, &telephonySms) == SYSTEM_INFO_ERROR_NONE) {
733 LoggerD("telephonySms : " << telephonySms);
734 deviceCapabilitiesInfo->telephonySms = telephonySms;
736 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonySms);
737 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_NORMAL)) {
738 deviceCapabilitiesInfo->screenSizeNormal = getRegistry("screen.coordinate_system.size.normal");
739 LoggerD("screenSizeNormal : " << deviceCapabilitiesInfo->screenSizeNormal);
740 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSizeNormal);
741 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_480_800)) {
742 deviceCapabilitiesInfo->screenSize480_800 = getRegistry("screen.coordinate_system.physical.normal_480x800");
743 LoggerD("screenSize480_800 : " << deviceCapabilitiesInfo->screenSize480_800);
744 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize480_800);
745 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_720_1280)) {
746 deviceCapabilitiesInfo->screenSize720_1280 = getRegistry("screen.coordinate_system.physical.normal_720x1280");
747 LoggerD("screenSize720_1280 : " << deviceCapabilitiesInfo->screenSize720_1280);
748 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize720_1280);
749 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_AUTO_ROTATION)) {
750 bool isAutoRotation = false;
751 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FEATURE_AUTO_ROTATION_SUPPORTED, &isAutoRotation) == SYSTEM_INFO_ERROR_NONE) {
752 LoggerD("auto rotation : " << isAutoRotation);
753 deviceCapabilitiesInfo->autoRotation = isAutoRotation;
755 return convert.toJSValueRef(deviceCapabilitiesInfo->autoRotation);
756 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SHELL_APP_WIDGET)) {
757 bool isShellAppWidgetSupported = false;
758 pkgmgrinfo_pkginfo_h handle;
759 if (pkgmgrinfo_pkginfo_get_pkginfo("gi2qxenosh",&handle) == PMINFO_R_OK) {
760 isShellAppWidgetSupported = true;
761 pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
762 LoggerD("shellAppWidget : " << isShellAppWidgetSupported);
764 deviceCapabilitiesInfo->shellAppWidget = isShellAppWidgetSupported;
765 return convert.toJSValueRef(deviceCapabilitiesInfo->shellAppWidget);
766 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION)) {
767 deviceCapabilitiesInfo->visionImageRecognition = isExist("/usr/lib/osp/libarengine.so");
768 LoggerD("visionImageRecognition : " << deviceCapabilitiesInfo->visionImageRecognition);
769 return convert.toJSValueRef(deviceCapabilitiesInfo->visionImageRecognition);
770 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION)) {
771 deviceCapabilitiesInfo->visionQrcodeGeneration = isExist("/usr/lib/osp/libarengine.so");
772 LoggerD("visionQrcodeGeneration : " << deviceCapabilitiesInfo->visionQrcodeGeneration);
773 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeGeneration);
774 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION)) {
775 deviceCapabilitiesInfo->visionQrcodeRecognition = isExist("/usr/lib/osp/libarengine.so");
776 LoggerD("visionQrcodeRecognition : " << deviceCapabilitiesInfo->visionQrcodeRecognition);
777 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeRecognition);
778 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION)) {
779 deviceCapabilitiesInfo->visionFaceRecognition = isExist("/usr/lib/osp/libarengine.so");
780 LoggerD("visionFaceRecognition : " << deviceCapabilitiesInfo->visionFaceRecognition);
781 return convert.toJSValueRef(deviceCapabilitiesInfo->visionFaceRecognition);
782 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SECURE_ELEMENT)) {
783 deviceCapabilitiesInfo->secureElement = isExist("/usr/bin/smartcard-daemon");
784 LoggerD("secureElement : " << deviceCapabilitiesInfo->secureElement);
785 return convert.toJSValueRef(deviceCapabilitiesInfo->secureElement);
786 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE)) {
787 deviceCapabilitiesInfo->nativeOspCompatible = getRegistry("platform.native.osp_compatible");
788 LoggerD("nativeOspCompatible : " << deviceCapabilitiesInfo->nativeOspCompatible);
789 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeOspCompatible);
794 LoggerE("Exception: " << _rethrown_exception.GetMessage());
796 return JSValueMakeUndefined(context);
799 bool JSDeviceCapabilitiesInfo::isExist(const char* path)
801 if (0 == access(path ,F_OK))
806 bool JSDeviceCapabilitiesInfo::getRegistry(std::string key)
808 std::ifstream file("/usr/etc/system-info.ini");
812 _key.append("=(\\w+)");
813 std::string value = "";
817 LoggerD("Registry file not found");
819 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
820 if (pcrecpp::RE(_key).PartialMatch(line, &value)) {
821 LoggerD("Key[" << key << "] : " << value; );
822 if(0==value.compare("true")) {