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.
21 #include <JSWebAPIErrorFactory.h>
22 #include <SecurityExceptions.h>
25 #include <system_info.h>
26 #include "JSDeviceCapabilitiesInfo.h"
27 #include "plugin_config.h"
31 namespace Systeminfo {
32 using namespace WrtDeviceApis::CommonsJavaScript;
33 using namespace WrtDeviceApis::Commons;
34 using namespace DeviceAPI::Common;
37 const char* DEVICE_CAPABILITIES_BLUETOOTH = "bluetooth";
38 const char* DEVICE_CAPABILITIES_NFC = "nfc";
39 const char* DEVICE_CAPABILITIES_NFC_RESERVED_PUSH = "nfcReservedPush";
40 const char* DEVICE_CAPABILITIES_MULTITOUCHCOUNT = "multiTouchCount";
41 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD = "inputKeyboard";
42 const char* DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT = "inputKeyboardLayout";
43 const char* DEVICE_CAPABILITIES_WIFI = "wifi";
44 const char* DEVICE_CAPABILITIES_WIFIDIRECT = "wifiDirect";
45 const char* DEVICE_CAPABILITIES_OPENGLES = "opengles";
46 const char* DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT = "openglestextureFormat";
47 const char* DEVICE_CAPABILITIES_OPENGLESVERSION1_1 = "openglesVersion1_1";
48 const char* DEVICE_CAPABILITIES_OPENGLESVERSION2_0 = "openglesVersion2_0";
49 const char* DEVICE_CAPABILITIES_FMRADIO = "fmRadio";
50 const char* DEVICE_CAPABILITIES_PLATFORMVERSION = "platformVersion";
51 const char* DEVICE_CAPABILITIES_PLATFORMNAME = "platformName";
52 const char* DEVICE_CAPABILITIES_WEBAPIVERSION = "webApiVersion";
53 const char* DEVICE_CAPABILITIES_NATIVEAPIVERSION = "nativeApiVersion";
54 const char* DEVICE_CAPABILITIES_CAMERA = "camera";
55 const char* DEVICE_CAPABILITIES_CAMERAFRONT = "cameraFront";
56 const char* DEVICE_CAPABILITIES_CAMERAFRONTFLASH = "cameraFrontFlash";
57 const char* DEVICE_CAPABILITIES_CAMERABACK = "cameraBack";
58 const char* DEVICE_CAPABILITIES_CAMERABACKFLASH = "cameraBackFlash";
59 const char* DEVICE_CAPABILITIES_LOCATION = "location";
60 const char* DEVICE_CAPABILITIES_LOCATIONGPS = "locationGps";
61 const char* DEVICE_CAPABILITIES_LOCATIONWPS = "locationWps";
62 const char* DEVICE_CAPABILITIES_MICROPHONE = "microphone";
63 const char* DEVICE_CAPABILITIES_USBHOST = "usbHost";
64 const char* DEVICE_CAPABILITIES_USBACCESSORY = "usbAccessory";
65 const char* DEVICE_CAPABILITIES_SCREENOUTPUTRCA = "screenOutputRca";
66 const char* DEVICE_CAPABILITIES_SCREENOUTPUTHDMI = "screenOutputHdmi";
67 const char* DEVICE_CAPABILITIES_PLATFORMCORECPUARCH = "platformCoreCpuArch";
68 const char* DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH = "platformCoreFpuArch";
69 const char* DEVICE_CAPABILITIES_SIPVOIP = "sipVoip";
70 const char* DEVICE_CAPABILITIES_DUID = "duid";
71 const char* DEVICE_CAPABILITIES_SPEECH_ROCOGNITION = "speechRecognition";
72 const char* DEVICE_CAPABILITIES_SPEECH_SYNTHESIS = "speechSynthesis";
73 const char* DEVICE_CAPABILITIES_ACCELEROMETER = "accelerometer";
74 const char* DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP = "accelerometerWakeup";
75 const char* DEVICE_CAPABILITIES_BAROMETER = "barometer";
76 const char* DEVICE_CAPABILITIES_BAROMETER_WAKEUP = "barometerWakeup";
77 const char* DEVICE_CAPABILITIES_GYROSCOPE = "gyroscope";
78 const char* DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP = "gyroscopeWakeup";
79 const char* DEVICE_CAPABILITIES_MAGNETOMETER = "magnetometer";
80 const char* DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP = "magnetometerWakeup";
81 const char* DEVICE_CAPABILITIES_PHOTOMETER = "photometer";
82 const char* DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP = "photometerWakeup";
83 const char* DEVICE_CAPABILITIES_PROXIMITY = "proximity";
84 const char* DEVICE_CAPABILITIES_PROXIMITY_WAKEUP = "proximityWakeup";
85 const char* DEVICE_CAPABILITIES_TILTMETER = "tiltmeter";
86 const char* DEVICE_CAPABILITIES_TILTMETER_WAKEUP = "tiltmeterWakeup";
87 const char* DEVICE_CAPABILITIES_DATA_ENCRYPTION = "dataEncryption";
88 const char* DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION = "graphicsAcceleration";
89 const char* DEVICE_CAPABILITIES_PUSH = "push";
90 const char* DEVICE_CAPABILITIES_TELEPHONY = "telephony";
91 const char* DEVICE_CAPABILITIES_TELEPHONY_MMS = "telephonyMms";
92 const char* DEVICE_CAPABILITIES_TELEPHONY_SMS = "telephonySms";
93 const char* DEVICE_CAPABILITIES_SCREENSIZE_NORMAL = "screenSizeNormal";
94 const char* DEVICE_CAPABILITIES_SCREENSIZE_480_800 = "screenSize480_800";
95 const char* DEVICE_CAPABILITIES_SCREENSIZE_720_1280 = "screenSize720_1280";
96 const char* DEVICE_CAPABILITIES_AUTO_ROTATION = "autoRotation";
97 const char* DEVICE_CAPABILITIES_SHELL_APP_WIDGET = "shellAppWidget";
98 const char* DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION = "visionImageRecognition";
99 const char* DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION = "visionQrcodeGeneration";
100 const char* DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION = "visionQrcodeRecognition";
101 const char* DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION = "visionFaceRecognition";
102 const char* DEVICE_CAPABILITIES_SECURE_ELEMENT = "secureElement";
103 const char* DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE = "nativeOspCompatible";
106 JSClassRef JSDeviceCapabilitiesInfo::m_classRef = NULL;
108 JSClassDefinition JSDeviceCapabilitiesInfo::m_classInfo = {
110 kJSClassAttributeNone,
111 "devicecapabilitiesinfo",
128 JSStaticValue JSDeviceCapabilitiesInfo::m_properties[] = {
129 { DEVICE_CAPABILITIES_BLUETOOTH, getProperty, NULL, kJSPropertyAttributeReadOnly },
130 { DEVICE_CAPABILITIES_NFC, getProperty, NULL, kJSPropertyAttributeReadOnly },
131 { DEVICE_CAPABILITIES_NFC_RESERVED_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
132 { DEVICE_CAPABILITIES_MULTITOUCHCOUNT, getProperty, NULL, kJSPropertyAttributeReadOnly },
133 { DEVICE_CAPABILITIES_INPUTKEYBOARD, getProperty, NULL, kJSPropertyAttributeReadOnly },
134 { DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT, getProperty, NULL, kJSPropertyAttributeReadOnly },
135 { DEVICE_CAPABILITIES_WIFI, getProperty, NULL, kJSPropertyAttributeReadOnly },
136 { DEVICE_CAPABILITIES_WIFIDIRECT, getProperty, NULL, kJSPropertyAttributeReadOnly },
137 { DEVICE_CAPABILITIES_OPENGLES, getProperty, NULL, kJSPropertyAttributeReadOnly },
138 { DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT, getProperty, NULL, kJSPropertyAttributeReadOnly },
139 { DEVICE_CAPABILITIES_OPENGLESVERSION1_1, getProperty, NULL, kJSPropertyAttributeReadOnly },
140 { DEVICE_CAPABILITIES_OPENGLESVERSION2_0, getProperty, NULL, kJSPropertyAttributeReadOnly },
141 { DEVICE_CAPABILITIES_FMRADIO, getProperty, NULL, kJSPropertyAttributeReadOnly },
142 { DEVICE_CAPABILITIES_PLATFORMVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
143 { DEVICE_CAPABILITIES_PLATFORMNAME, getProperty, NULL, kJSPropertyAttributeReadOnly },
144 { DEVICE_CAPABILITIES_WEBAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
145 { DEVICE_CAPABILITIES_NATIVEAPIVERSION, getProperty, NULL, kJSPropertyAttributeReadOnly },
146 { DEVICE_CAPABILITIES_CAMERA, getProperty, NULL, kJSPropertyAttributeReadOnly },
147 { DEVICE_CAPABILITIES_CAMERAFRONT, getProperty, NULL, kJSPropertyAttributeReadOnly },
148 { DEVICE_CAPABILITIES_CAMERAFRONTFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
149 { DEVICE_CAPABILITIES_CAMERABACK, getProperty, NULL, kJSPropertyAttributeReadOnly },
150 { DEVICE_CAPABILITIES_CAMERABACKFLASH, getProperty, NULL, kJSPropertyAttributeReadOnly },
151 { DEVICE_CAPABILITIES_LOCATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
152 { DEVICE_CAPABILITIES_LOCATIONGPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
153 { DEVICE_CAPABILITIES_LOCATIONWPS, getProperty, NULL, kJSPropertyAttributeReadOnly },
154 { DEVICE_CAPABILITIES_MICROPHONE, getProperty, NULL, kJSPropertyAttributeReadOnly },
155 { DEVICE_CAPABILITIES_USBHOST, getProperty, NULL, kJSPropertyAttributeReadOnly },
156 { DEVICE_CAPABILITIES_USBACCESSORY, getProperty, NULL, kJSPropertyAttributeReadOnly },
157 { DEVICE_CAPABILITIES_SCREENOUTPUTRCA, getProperty, NULL, kJSPropertyAttributeReadOnly },
158 { DEVICE_CAPABILITIES_SCREENOUTPUTHDMI, getProperty, NULL, kJSPropertyAttributeReadOnly },
159 { DEVICE_CAPABILITIES_PLATFORMCORECPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
160 { DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH, getProperty, NULL, kJSPropertyAttributeReadOnly },
161 { DEVICE_CAPABILITIES_SIPVOIP, getProperty, NULL, kJSPropertyAttributeReadOnly },
162 { DEVICE_CAPABILITIES_DUID, getProperty, NULL, kJSPropertyAttributeReadOnly },
163 { DEVICE_CAPABILITIES_SPEECH_ROCOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
164 { DEVICE_CAPABILITIES_SPEECH_SYNTHESIS, getProperty, NULL, kJSPropertyAttributeReadOnly },
165 { DEVICE_CAPABILITIES_ACCELEROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
166 { DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
167 { DEVICE_CAPABILITIES_BAROMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
168 { DEVICE_CAPABILITIES_BAROMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
169 { DEVICE_CAPABILITIES_GYROSCOPE, getProperty, NULL, kJSPropertyAttributeReadOnly },
170 { DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
171 { DEVICE_CAPABILITIES_MAGNETOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
172 { DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
173 { DEVICE_CAPABILITIES_PHOTOMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
174 { DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
175 { DEVICE_CAPABILITIES_PROXIMITY, getProperty, NULL, kJSPropertyAttributeReadOnly },
176 { DEVICE_CAPABILITIES_PROXIMITY_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
177 { DEVICE_CAPABILITIES_TILTMETER, getProperty, NULL, kJSPropertyAttributeReadOnly },
178 { DEVICE_CAPABILITIES_TILTMETER_WAKEUP, getProperty, NULL, kJSPropertyAttributeReadOnly },
179 { DEVICE_CAPABILITIES_DATA_ENCRYPTION, getProperty, NULL, kJSPropertyAttributeReadOnly },
180 { DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
181 { DEVICE_CAPABILITIES_PUSH, getProperty, NULL, kJSPropertyAttributeReadOnly },
182 { DEVICE_CAPABILITIES_TELEPHONY, getProperty, NULL, kJSPropertyAttributeReadOnly },
183 { DEVICE_CAPABILITIES_TELEPHONY_MMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
184 { DEVICE_CAPABILITIES_TELEPHONY_SMS, getProperty, NULL, kJSPropertyAttributeReadOnly },
185 { DEVICE_CAPABILITIES_SCREENSIZE_NORMAL, getProperty, NULL, kJSPropertyAttributeReadOnly },
186 { DEVICE_CAPABILITIES_SCREENSIZE_480_800, getProperty, NULL, kJSPropertyAttributeReadOnly },
187 { DEVICE_CAPABILITIES_SCREENSIZE_720_1280, getProperty, NULL, kJSPropertyAttributeReadOnly },
188 { DEVICE_CAPABILITIES_AUTO_ROTATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
189 { DEVICE_CAPABILITIES_SHELL_APP_WIDGET, getProperty, NULL, kJSPropertyAttributeReadOnly },
190 { DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
191 { DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION, getProperty, NULL, kJSPropertyAttributeReadOnly },
192 { DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
193 { DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION, getProperty, NULL, kJSPropertyAttributeReadOnly },
194 { DEVICE_CAPABILITIES_SECURE_ELEMENT, getProperty, NULL, kJSPropertyAttributeReadOnly },
195 { DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE, getProperty, NULL, kJSPropertyAttributeReadOnly },
199 const JSClassRef JSDeviceCapabilitiesInfo::getClassRef()
202 m_classRef = JSClassCreate(&m_classInfo);
207 const JSClassDefinition* JSDeviceCapabilitiesInfo::getClassInfo()
212 void JSDeviceCapabilitiesInfo::Initialize(JSContextRef context, JSObjectRef object)
216 void JSDeviceCapabilitiesInfo::Finalize(JSObjectRef object)
219 JSDeviceCapabilitiesPriv* priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
220 JSObjectSetPrivate(object, NULL);
221 LoggerD("Deleting DeviceCapabilitiesInfo object");
225 bool JSDeviceCapabilitiesInfo::hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName)
227 return JSUtils::hasProperty(m_properties, propertyName);
230 JSObjectRef JSDeviceCapabilitiesInfo::createJSObject(JSContextRef context, const DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo)
233 JSDeviceCapabilitiesPriv *priv = new JSDeviceCapabilitiesPriv(context, deviceCapabilitiesInfo);
234 return JSObjectMake(context, getClassRef(), priv);
237 JSValueRef JSDeviceCapabilitiesInfo::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
240 JSDeviceCapabilitiesPriv *priv = static_cast<JSDeviceCapabilitiesPriv*>(JSObjectGetPrivate(object));
242 LoggerE("Private object not set.");
243 return JSValueMakeUndefined(context);
248 DeviceCapabilitiesPropertiesPtr deviceCapabilitiesInfo = priv->getObject();
249 Converter convert(context);
251 if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BLUETOOTH)) {
252 bool bluetooth = false;
253 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BLUETOOTH_SUPPORTED, &bluetooth) == SYSTEM_INFO_ERROR_NONE) {
254 LoggerD("bluetooth : " << bluetooth);
255 deviceCapabilitiesInfo->bluetooth = bluetooth;
257 return convert.toJSValueRef(deviceCapabilitiesInfo->bluetooth);
258 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC)) {
260 if (system_info_get_value_bool(SYSTEM_INFO_KEY_NFC_SUPPORTED, &nfc) == SYSTEM_INFO_ERROR_NONE) {
261 LoggerD("nfc : " << nfc);
262 deviceCapabilitiesInfo->nfc = nfc;
264 return convert.toJSValueRef(deviceCapabilitiesInfo->nfc);
265 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NFC_RESERVED_PUSH)) {
266 return convert.toJSValueRef(deviceCapabilitiesInfo->nfcReservedPush);
267 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MULTITOUCHCOUNT)) {
268 int multiTouchCount = 0;
269 if (system_info_get_value_int(SYSTEM_INFO_KEY_MULTI_POINT_TOUCH_COUNT, &multiTouchCount) == SYSTEM_INFO_ERROR_NONE) {
270 LoggerD("multiTouchCount : " << multiTouchCount);
271 deviceCapabilitiesInfo->multiTouchCount = multiTouchCount;
273 return convert.toJSValueRef(deviceCapabilitiesInfo->multiTouchCount);
274 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD)) {
275 char* inputKeyboard = NULL;
276 if (system_info_get_value_string(SYSTEM_INFO_KEY_KEYBOARD_TYPE, &inputKeyboard) == SYSTEM_INFO_ERROR_NONE) {
277 if (inputKeyboard != NULL) {
278 LoggerD("inputKeyboard : " << inputKeyboard);
279 if (strcmp(inputKeyboard, "NULL") == 0) {
280 deviceCapabilitiesInfo->inputKeyboard = false;
282 deviceCapabilitiesInfo->inputKeyboard = true;
287 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboard);
288 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_INPUTKEYBOARD_LAYOUT)) {
289 return convert.toJSValueRef(deviceCapabilitiesInfo->inputKeyboardLayout);
290 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFI)) {
292 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_SUPPORTED, &wifi) == SYSTEM_INFO_ERROR_NONE) {
293 LoggerD("wifi : " << wifi);
294 deviceCapabilitiesInfo->wifi = wifi;
296 return convert.toJSValueRef(deviceCapabilitiesInfo->wifi);
297 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WIFIDIRECT)) {
298 bool wifiDirect = false;
299 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WIFI_DIRECT_SUPPORTED, &wifiDirect) == SYSTEM_INFO_ERROR_NONE) {
300 LoggerD("wifiDirect : " << wifiDirect);
301 deviceCapabilitiesInfo->wifiDirect = wifiDirect;
303 return convert.toJSValueRef(deviceCapabilitiesInfo->wifiDirect);
304 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES)) {
305 return convert.toJSValueRef(deviceCapabilitiesInfo->opengles);
306 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLES_TEXTURE_FORMAT)) {
307 return convert.toJSValueRef(deviceCapabilitiesInfo->openglestextureFormat);
308 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION1_1)) {
309 char* openglesVersion = NULL;
310 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
311 if (openglesVersion!= NULL) {
312 LoggerD("openglesVersion : " << openglesVersion);
313 if (strcmp(openglesVersion, "1.0") == 0) {
314 deviceCapabilitiesInfo->openglesVersion1_1 = true;
315 } else if (strcmp(openglesVersion, "1.0/2.0") == 0) {
316 deviceCapabilitiesInfo->openglesVersion1_1 = true;
318 free(openglesVersion);
321 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion1_1);
322 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_OPENGLESVERSION2_0)) {
323 char* openglesVersion = NULL;
324 if (system_info_get_value_string(SYSTEM_INFO_KEY_OPENGLES_VERSION, &openglesVersion) == SYSTEM_INFO_ERROR_NONE) {
325 if (openglesVersion!= NULL) {
326 LoggerD("openglesVersion : " << openglesVersion);
327 if (strcmp(openglesVersion, "2.0") == 0) {
328 deviceCapabilitiesInfo->openglesVersion2_0 = true;
329 } else if (strcmp(openglesVersion, "1.0/2.0") == 0) {
330 deviceCapabilitiesInfo->openglesVersion2_0 = true;
332 free(openglesVersion);
335 return convert.toJSValueRef(deviceCapabilitiesInfo->openglesVersion2_0);
336 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_FMRADIO)) {
337 bool fmRadio = false;
338 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FMRADIO_SUPPORTED, &fmRadio) == SYSTEM_INFO_ERROR_NONE) {
339 LoggerD("fmRadio : " << fmRadio);
340 deviceCapabilitiesInfo->fmRadio = fmRadio;
342 return convert.toJSValueRef(deviceCapabilitiesInfo->fmRadio);
343 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMVERSION)) {
344 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
345 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
346 char* platformVersion = NULL;
347 if (system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &platformVersion) == SYSTEM_INFO_ERROR_NONE) {
348 if (platformVersion) {
349 LoggerD("platformVersion : " << platformVersion);
350 deviceCapabilitiesInfo->platformVersion = platformVersion;
351 free(platformVersion);
354 return convert.toJSValueRef(deviceCapabilitiesInfo->platformVersion);
355 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMNAME)) {
356 char* platformName = NULL;
357 if (system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platformName) == SYSTEM_INFO_ERROR_NONE) {
359 LoggerD("platformName : " << platformName);
360 deviceCapabilitiesInfo->platformName = platformName;
364 return convert.toJSValueRef(deviceCapabilitiesInfo->platformName);
365 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_WEBAPIVERSION)) {
366 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
367 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
369 std::ifstream file("/usr/etc/system-info.ini");
371 std::string webApiVersionMajor = "";
372 std::string webApiVersionMinor = "";
375 LoggerD("api/native version info file not found");
377 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
378 if (pcrecpp::RE("platform.web.api.version=(\\w+).(\\w+)").PartialMatch(line, &webApiVersionMajor, &webApiVersionMinor)) {
379 deviceCapabilitiesInfo->webApiVersion = webApiVersionMajor;
380 deviceCapabilitiesInfo->webApiVersion += ".";
381 deviceCapabilitiesInfo->webApiVersion += webApiVersionMinor;
382 LoggerD("web api version : " << deviceCapabilitiesInfo->webApiVersion);
389 return convert.toJSValueRef(deviceCapabilitiesInfo->webApiVersion);
390 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVEAPIVERSION)) {
391 AceSecurityStatus status = SYSTEMINFO_CHECK_ACCESS(SYSTEMINFO_FUNCTION_API_GET_CAPABILITIES);
392 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
394 std::ifstream file("/usr/etc/system-info.ini");
396 std::string nativeApiVersionMajor = "";
397 std::string nativeApiVersionMinor = "";
400 LoggerD("api/native version info file not found");
402 while ((std::getline(file, line).rdstate() & (std::ifstream::failbit | std::ifstream::eofbit)) == 0) {
403 if (pcrecpp::RE("platform.native.api.version=(\\w+).(\\w+)").PartialMatch(line, &nativeApiVersionMajor, &nativeApiVersionMinor )) {
404 deviceCapabilitiesInfo->nativeApiVersion = nativeApiVersionMajor;
405 deviceCapabilitiesInfo->nativeApiVersion += ".";
406 deviceCapabilitiesInfo->nativeApiVersion += nativeApiVersionMinor;
407 LoggerD("native api version : " << deviceCapabilitiesInfo->nativeApiVersion);
414 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeApiVersion);
415 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONT)) {
416 bool cameraFront = false;
417 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_SUPPORTED, &cameraFront) == SYSTEM_INFO_ERROR_NONE) {
418 LoggerD("cameraFront : " << cameraFront);
419 deviceCapabilitiesInfo->cameraFront = cameraFront;
421 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFront);
422 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERA)) {
423 return convert.toJSValueRef(deviceCapabilitiesInfo->camera);
424 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERAFRONTFLASH)) {
425 bool cameraFrontFlash = false;
426 if (system_info_get_value_bool(SYSTEM_INFO_KEY_FRONT_CAMERA_FLASH_SUPPORTED, &cameraFrontFlash) == SYSTEM_INFO_ERROR_NONE) {
427 LoggerD("cameraFrontFlash : " << cameraFrontFlash);
428 deviceCapabilitiesInfo->cameraFrontFlash = cameraFrontFlash;
430 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraFrontFlash);
431 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACK)) {
432 bool cameraBack = false;
433 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_SUPPORTED, &cameraBack) == SYSTEM_INFO_ERROR_NONE) {
434 LoggerD("cameraBack : " << cameraBack);
435 deviceCapabilitiesInfo->cameraBack = cameraBack;
437 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBack);
438 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_CAMERABACKFLASH)) {
439 bool cameraBackFlash = false;
440 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BACK_CAMERA_FLASH_SUPPORTED, &cameraBackFlash) == SYSTEM_INFO_ERROR_NONE) {
441 LoggerD("cameraBackFlash : " << cameraBackFlash);
442 deviceCapabilitiesInfo->cameraBackFlash = cameraBackFlash;
444 return convert.toJSValueRef(deviceCapabilitiesInfo->cameraBackFlash);
445 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATION)) {
446 bool location = false;
447 bool locationGps = false;
448 bool locationWps = false;
449 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
450 LoggerD("locationGps : " << locationGps);
452 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
453 LoggerD("locationWps : " << locationWps);
455 if (locationGps || locationWps) {
458 deviceCapabilitiesInfo->location = location;
459 return convert.toJSValueRef(deviceCapabilitiesInfo->location);
460 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONGPS)) {
461 bool locationGps = false;
462 if (system_info_get_value_bool(SYSTEM_INFO_KEY_GPS_SUPPORTED, &locationGps) == SYSTEM_INFO_ERROR_NONE) {
463 LoggerD("locationGps : " << locationGps);
464 deviceCapabilitiesInfo->locationGps = locationGps;
466 return convert.toJSValueRef(deviceCapabilitiesInfo->locationGps);
467 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_LOCATIONWPS)) {
468 bool locationWps = false;
469 if (system_info_get_value_bool(SYSTEM_INFO_KEY_WPS_SUPPORTED, &locationWps) == SYSTEM_INFO_ERROR_NONE) {
470 LoggerD("locationWps : " << locationWps);
471 deviceCapabilitiesInfo->locationWps = locationWps;
473 return convert.toJSValueRef(deviceCapabilitiesInfo->locationWps);
474 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MICROPHONE)) {
475 bool microphone = false;
476 if (system_info_get_value_bool(SYSTEM_INFO_KEY_MICROPHONE_SUPPORTED, µphone) == SYSTEM_INFO_ERROR_NONE) {
477 LoggerD("microphone : " << microphone);
478 deviceCapabilitiesInfo->microphone = microphone;
480 return convert.toJSValueRef(deviceCapabilitiesInfo->microphone);
481 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBHOST)) {
482 bool usbHost = false;
483 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_HOST_SUPPORTED, &usbHost) == SYSTEM_INFO_ERROR_NONE) {
484 LoggerD("usbHost : " << usbHost);
485 deviceCapabilitiesInfo->usbHost = usbHost;
487 return convert.toJSValueRef(deviceCapabilitiesInfo->usbHost);
488 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_USBACCESSORY)) {
489 bool usbAccessory = false;
490 if (system_info_get_value_bool(SYSTEM_INFO_KEY_USB_ACCESSORY_SUPPORTED, &usbAccessory) == SYSTEM_INFO_ERROR_NONE) {
491 LoggerD("usbAccessory : " << usbAccessory);
492 deviceCapabilitiesInfo->usbAccessory = usbAccessory;
494 return convert.toJSValueRef(deviceCapabilitiesInfo->usbAccessory);
495 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTRCA)) {
496 bool screenOutputRca = false;
497 if (system_info_get_value_bool(SYSTEM_INFO_KEY_RCA_SUPPORTED, &screenOutputRca) == SYSTEM_INFO_ERROR_NONE) {
498 LoggerD("screenOutputRca : " << screenOutputRca);
499 deviceCapabilitiesInfo->screenOutputRca = screenOutputRca;
501 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputRca);
502 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENOUTPUTHDMI)) {
503 bool screenOutputHdmi = false;
504 if (system_info_get_value_bool(SYSTEM_INFO_KEY_HDMI_SUPPORTED, &screenOutputHdmi) == SYSTEM_INFO_ERROR_NONE) {
505 LoggerD("screenOutputHdmi : " << screenOutputHdmi);
506 deviceCapabilitiesInfo->screenOutputHdmi = screenOutputHdmi;
508 return convert.toJSValueRef(deviceCapabilitiesInfo->screenOutputHdmi);
509 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCORECPUARCH)) {
510 char* platformCoreCpuArch = NULL;
511 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_CPU_ARCH, &platformCoreCpuArch) == SYSTEM_INFO_ERROR_NONE) {
512 if (platformCoreCpuArch) {
513 LoggerD("platformCoreCpuArch : " << platformCoreCpuArch);
514 deviceCapabilitiesInfo->platformCoreCpuArch = platformCoreCpuArch;
515 free(platformCoreCpuArch);
518 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreCpuArch);
519 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PLATFORMCOREFPUARCH)) {
520 char* platformCoreFpuArch = NULL;
521 if (system_info_get_value_string(SYSTEM_INFO_KEY_CORE_FPU_ARCH, &platformCoreFpuArch) == SYSTEM_INFO_ERROR_NONE) {
522 if (platformCoreFpuArch) {
523 LoggerD("platformCoreFpuArch : " << platformCoreFpuArch);
524 deviceCapabilitiesInfo->platformCoreFpuArch = platformCoreFpuArch;
525 free(platformCoreFpuArch);
528 return convert.toJSValueRef(deviceCapabilitiesInfo->platformCoreFpuArch);
529 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SIPVOIP)) {
530 bool sipVoip = false;
531 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SIP_VOIP_SUPPORTED, &sipVoip) == SYSTEM_INFO_ERROR_NONE) {
532 LoggerD("sipVoip : " << sipVoip);
533 deviceCapabilitiesInfo->sipVoip = sipVoip;
535 return convert.toJSValueRef(deviceCapabilitiesInfo->sipVoip);
536 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DUID)) {
538 if (system_info_get_value_string(SYSTEM_INFO_KEY_DEVICE_UUID, &duid) == SYSTEM_INFO_ERROR_NONE) {
540 LoggerD("duid : " << duid);
541 deviceCapabilitiesInfo->duid = duid;
545 return convert.toJSValueRef(deviceCapabilitiesInfo->duid);
546 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_ROCOGNITION)) {
547 bool speechRecognition = false;
548 if (system_info_get_value_bool(SYSTEM_INFO_KEY_SPEECH_RECOGNITION_SUPPORTED, &speechRecognition) == SYSTEM_INFO_ERROR_NONE) {
549 LoggerD("speechRecognition : " << speechRecognition);
550 deviceCapabilitiesInfo->speechRecognition = speechRecognition;
552 return convert.toJSValueRef(deviceCapabilitiesInfo->speechRecognition);
553 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SPEECH_SYNTHESIS)) {
554 return convert.toJSValueRef(deviceCapabilitiesInfo->speechSynthesis);
555 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER)) {
556 bool isAccelerometer = false;
557 if (sensor_is_supported(SENSOR_ACCELEROMETER, &isAccelerometer) == SENSOR_ERROR_NONE) {
558 LoggerD("accelerometer : " << isAccelerometer);
559 deviceCapabilitiesInfo->accelerometer = isAccelerometer;
561 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometer);
562 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_ACCELEROMETER_WAKEUP)) {
563 return convert.toJSValueRef(deviceCapabilitiesInfo->accelerometerWakeup);
564 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER)) {
565 bool isBarometer = false;
566 if (system_info_get_value_bool(SYSTEM_INFO_KEY_BAROMETER_SENSOR_SUPPORTED, &isBarometer) == SYSTEM_INFO_ERROR_NONE) {
567 LoggerD("barometer : " << isBarometer);
568 deviceCapabilitiesInfo->barometer = isBarometer;
570 return convert.toJSValueRef(deviceCapabilitiesInfo->barometer);
571 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_BAROMETER_WAKEUP)) {
572 return convert.toJSValueRef(deviceCapabilitiesInfo->barometerWakeup);
573 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE)) {
574 bool isGyroscope = false;
575 if (sensor_is_supported(SENSOR_GYROSCOPE, &isGyroscope) == SENSOR_ERROR_NONE) {
576 LoggerD("gyroscope : " << isGyroscope);
577 deviceCapabilitiesInfo->gyroscope = isGyroscope;
579 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscope);
580 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GYROSCOPE_WAKEUP)) {
581 return convert.toJSValueRef(deviceCapabilitiesInfo->gyroscopeWakeup);
582 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER)) {
583 bool isMagnetometer = false;
584 if (sensor_is_supported(SENSOR_MAGNETIC, &isMagnetometer) == SENSOR_ERROR_NONE) {
585 LoggerD("magnetometer : " << isMagnetometer);
586 deviceCapabilitiesInfo->magnetometer = isMagnetometer;
588 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometer);
589 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_MAGNETOMETER_WAKEUP)) {
590 return convert.toJSValueRef(deviceCapabilitiesInfo->magnetometerWakeup);
591 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER)) {
592 return convert.toJSValueRef(deviceCapabilitiesInfo->photometer);
593 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PHOTOMETER_WAKEUP)) {
594 return convert.toJSValueRef(deviceCapabilitiesInfo->photometerWakeup);
595 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY)) {
596 bool isProximity = false;
597 if (sensor_is_supported(SENSOR_PROXIMITY, &isProximity) == SENSOR_ERROR_NONE) {
598 LoggerD("proximity : " << isProximity);
599 deviceCapabilitiesInfo->proximity = isProximity;
601 return convert.toJSValueRef(deviceCapabilitiesInfo->proximity);
602 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PROXIMITY_WAKEUP)) {
603 return convert.toJSValueRef(deviceCapabilitiesInfo->proximityWakeup);
604 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER)) {
605 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeter);
606 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TILTMETER_WAKEUP)) {
607 return convert.toJSValueRef(deviceCapabilitiesInfo->tiltmeterWakeup);
608 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_DATA_ENCRYPTION)) {
609 return convert.toJSValueRef(deviceCapabilitiesInfo->dataEncryption);
610 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_GRAPHICS_ACCELERATION)) {
611 return convert.toJSValueRef(deviceCapabilitiesInfo->graphicsAcceleration);
612 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_PUSH)) {
613 return convert.toJSValueRef(deviceCapabilitiesInfo->push);
614 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY)) {
615 return convert.toJSValueRef(deviceCapabilitiesInfo->telephony);
616 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_MMS)) {
617 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonyMms);
618 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_TELEPHONY_SMS)) {
619 return convert.toJSValueRef(deviceCapabilitiesInfo->telephonySms);
620 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_NORMAL)) {
621 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSizeNormal);
622 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_480_800)) {
623 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize480_800);
624 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SCREENSIZE_720_1280)) {
625 return convert.toJSValueRef(deviceCapabilitiesInfo->screenSize720_1280);
626 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_AUTO_ROTATION)) {
627 return convert.toJSValueRef(deviceCapabilitiesInfo->autoRotation);
628 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SHELL_APP_WIDGET)) {
629 return convert.toJSValueRef(deviceCapabilitiesInfo->shellAppWidget);
630 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_IMAGE_RECOGNITION)) {
631 return convert.toJSValueRef(deviceCapabilitiesInfo->visionImageRecognition);
632 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_GENERATION)) {
633 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeGeneration);
634 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_QRCODE_RECOGNITION)) {
635 return convert.toJSValueRef(deviceCapabilitiesInfo->visionQrcodeRecognition);
636 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_VISION_FACE_RECOGNITION)) {
637 return convert.toJSValueRef(deviceCapabilitiesInfo->visionFaceRecognition);
638 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_SECURE_ELEMENT)) {
639 return convert.toJSValueRef(deviceCapabilitiesInfo->secureElement);
640 } else if (JSStringIsEqualToUTF8CString(propertyName, DEVICE_CAPABILITIES_NATIVE_OSP_COMPATIBLE)) {
641 return convert.toJSValueRef(deviceCapabilitiesInfo->nativeOspCompatible);
646 LoggerE("Exception: " << _rethrown_exception.GetMessage());
648 return JSValueMakeUndefined(context);