2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
25 #include <system_info.h>
26 #include <system_info_private.h>
27 #include <sys/utsname.h>
33 #define LOG_TAG "CAPI_SYSTEM_INFO"
35 #define SYSTEM_INFO_MAX -1
38 system_info_key_e key;
39 system_info_data_type_e data_type;
40 system_info_get_value_cb get_value_cb;
43 typedef system_info_s * system_info_h;
45 system_info_s system_info_table[] = {
48 /**< The model of the device */
49 SYSTEM_INFO_KEY_MODEL,
50 SYSTEM_INFO_DATA_TYPE_STRING,
55 /**< The version of the Tizen supported by the platform */
56 SYSTEM_INFO_KEY_TIZEN_VERSION,
57 SYSTEM_INFO_DATA_TYPE_STRING,
58 system_info_get_tizen_version
62 /**< The height of the screen in pixels */
63 SYSTEM_INFO_KEY_SCREEN_HEIGHT,
64 SYSTEM_INFO_DATA_TYPE_INT,
65 system_info_get_screen_height
69 /**< The width of the screen in pixels */
70 SYSTEM_INFO_KEY_SCREEN_WIDTH,
71 SYSTEM_INFO_DATA_TYPE_INT,
72 system_info_get_screen_width
76 /**< The Name of the Platform */
77 SYSTEM_INFO_KEY_PLATFORM_NAME,
78 SYSTEM_INFO_DATA_TYPE_STRING,
79 system_info_get_platform_name
83 /**< The Name of the Tizen version */
84 SYSTEM_INFO_KEY_TIZEN_VERSION_NAME,
85 SYSTEM_INFO_DATA_TYPE_STRING,
86 system_info_get_tizen_version_name
90 /**< The CORE CPU architecture of model */
91 SYSTEM_INFO_KEY_CORE_CPU_ARCH,
92 SYSTEM_INFO_DATA_TYPE_STRING,
93 system_info_get_core_cpu_arch
97 /**< The CORE CPU frequency of model */
98 SYSTEM_INFO_KEY_CORE_CPU_FREQ,
99 SYSTEM_INFO_DATA_TYPE_DOUBLE,
100 system_info_get_core_cpu_freq
104 /**< The height of the physical screen size in millimeters */
105 SYSTEM_INFO_KEY_PHYSICAL_SCREEN_HEIGHT,
106 SYSTEM_INFO_DATA_TYPE_INT,
107 system_info_get_physical_screen_height
111 /**< The width of the physical screen size in millimeters */
112 SYSTEM_INFO_KEY_PHYSICAL_SCREEN_WIDTH,
113 SYSTEM_INFO_DATA_TYPE_INT,
114 system_info_get_physical_screen_width
118 /**< The build string of the platform binary */
119 SYSTEM_INFO_KEY_BUILD_STRING,
120 SYSTEM_INFO_DATA_TYPE_STRING,
121 system_info_get_build_string
125 /**< The build date of the platform binary */
126 SYSTEM_INFO_KEY_BUILD_DATE,
127 SYSTEM_INFO_DATA_TYPE_STRING,
128 system_info_get_build_date
132 /**< The build time of the platform binary */
133 SYSTEM_INFO_KEY_BUILD_TIME,
134 SYSTEM_INFO_DATA_TYPE_STRING,
135 system_info_get_build_time
139 /**< The manufacturer of the device */
140 SYSTEM_INFO_KEY_MANUFACTURER,
141 SYSTEM_INFO_DATA_TYPE_STRING,
142 system_info_get_manufacturer
146 /**< Indicates whether the device supports tethering */
147 SYSTEM_INFO_KEY_TETHERING_SUPPORTED,
148 SYSTEM_INFO_DATA_TYPE_BOOL,
149 system_info_get_tethering_supported
153 SYSTEM_INFO_MAX, -1, NULL
158 static system_info_mode_type_e system_info_system_info_model_type;
160 system_info_mode_type_e system_info_get_system_info_model_type(void)
162 return system_info_system_info_model_type;
165 void __attribute__((constructor)) system_info_init(void)
170 ret = system_info_get_platform_string("tizen.org/system/model_name", &str);
172 if (ret != SYSTEM_INFO_ERROR_NONE) {
173 LOGE("initialize error");
177 if (!strcmp(str, "Emulator"))
178 system_info_system_info_model_type = SYSTEM_INFO_MODEL_TYPE_EMULATOR;
180 system_info_system_info_model_type = SYSTEM_INFO_MODEL_TYPE_TARGET;
185 static int system_info_get(system_info_key_e key, system_info_h *system_info)
189 while (system_info_table[index].key != SYSTEM_INFO_MAX) {
190 if (system_info_table[index].key == key) {
191 *system_info = &system_info_table[index];
201 int system_info_get_value(system_info_key_e key, system_info_data_type_e data_type, void **value)
203 system_info_h system_info;
204 system_info_get_value_cb system_info_getter;
207 LOGE("INVALID_PARAMETER(0x%08x) : invalid output param", SYSTEM_INFO_ERROR_INVALID_PARAMETER);
208 return SYSTEM_INFO_ERROR_INVALID_PARAMETER;
211 if (system_info_get(key, &system_info)) {
212 LOGE("INVALID_PARAMETER(0x%08x) : invalid key", SYSTEM_INFO_ERROR_INVALID_PARAMETER);
213 return SYSTEM_INFO_ERROR_INVALID_PARAMETER;
216 if (system_info->data_type != data_type) {
217 LOGE("INVALID_PARAMETER(0x%08x) : invalid data type", SYSTEM_INFO_ERROR_INVALID_PARAMETER);
218 return SYSTEM_INFO_ERROR_INVALID_PARAMETER;
221 system_info_getter = system_info->get_value_cb;
223 if (system_info_getter == NULL) {
224 LOGE("IO_ERROR(0x%08x) : failed to call getter for the system information", SYSTEM_INFO_ERROR_IO_ERROR);
225 return SYSTEM_INFO_ERROR_IO_ERROR;
228 return system_info_getter(key, system_info->data_type, value);
231 API int system_info_get_value_int(system_info_key_e key, int *value)
233 return system_info_get_value(key, SYSTEM_INFO_DATA_TYPE_INT, (void **)value);
236 API int system_info_get_value_bool(system_info_key_e key, bool *value)
238 return system_info_get_value(key, SYSTEM_INFO_DATA_TYPE_BOOL, (void **)value);
241 API int system_info_get_value_double(system_info_key_e key, double *value)
243 return system_info_get_value(key, SYSTEM_INFO_DATA_TYPE_DOUBLE, (void **)value);
246 API int system_info_get_value_string(system_info_key_e key, char **value)
248 return system_info_get_value(key, SYSTEM_INFO_DATA_TYPE_STRING, (void **)value);
251 API int system_info_get_platform_bool(const char *key, bool *value)
257 supported = (bool *)value;
259 if (access(CONFIG_FILE_PATH, R_OK)) {
260 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
261 return SYSTEM_INFO_ERROR_IO_ERROR;
264 ret = system_info_get_value_from_config_xml(PLATFORM_TAG, key, BOOL_TYPE, &string);
266 LOGE("cannot get %s", key);
270 if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
277 return SYSTEM_INFO_ERROR_NONE;
280 API int system_info_get_platform_int(const char *key, int *value)
286 ret_val = (int *)value;
288 if (access(CONFIG_FILE_PATH, R_OK)) {
289 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
290 return SYSTEM_INFO_ERROR_IO_ERROR;
293 ret = system_info_get_value_from_config_xml(PLATFORM_TAG, key, INT_TYPE, &string);
295 LOGE("cannot get %s", key);
299 *ret_val = atoi(string);
303 return SYSTEM_INFO_ERROR_NONE;
306 API int system_info_get_platform_double(const char *key, double *value)
312 ret_val = (double *)value;
314 if (access(CONFIG_FILE_PATH, R_OK)) {
315 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
316 return SYSTEM_INFO_ERROR_IO_ERROR;
319 ret = system_info_get_value_from_config_xml(PLATFORM_TAG, key, DBL_TYPE, &string);
321 LOGE("cannot get %s", key);
325 *ret_val = atof(string);
329 return SYSTEM_INFO_ERROR_NONE;
332 API int system_info_get_platform_string(const char *key, char **value)
337 if (access(CONFIG_FILE_PATH, R_OK)) {
338 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
339 return SYSTEM_INFO_ERROR_IO_ERROR;
342 ret = system_info_get_value_from_config_xml(PLATFORM_TAG, key, STR_TYPE, &string);
344 LOGE("cannot get %s", key);
350 return SYSTEM_INFO_ERROR_NONE;
353 API int system_info_get_custom_bool(const char *key, bool *value)
359 supported = (bool *)value;
361 if (access(CONFIG_FILE_PATH, R_OK)) {
362 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
363 return SYSTEM_INFO_ERROR_IO_ERROR;
366 ret = system_info_get_value_from_config_xml(CUSTOM_TAG, key, BOOL_TYPE, &string);
368 LOGI("cannot get %s", key);
370 return SYSTEM_INFO_ERROR_NONE;
373 if (!strcmp(string, "true") || !strcmp(string, "TRUE"))
380 return SYSTEM_INFO_ERROR_NONE;
383 API int system_info_get_custom_int(const char *key, int *value)
389 ret_val = (int *)value;
391 if (access(CONFIG_FILE_PATH, R_OK)) {
392 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
393 return SYSTEM_INFO_ERROR_IO_ERROR;
396 ret = system_info_get_value_from_config_xml(CUSTOM_TAG, key, INT_TYPE, &string);
398 LOGI("cannot get %s", key);
400 return SYSTEM_INFO_ERROR_NONE;
403 *ret_val = atoi(string);
407 return SYSTEM_INFO_ERROR_NONE;
410 API int system_info_get_custom_double(const char *key, double *value)
416 ret_val = (double *)value;
418 if (access(CONFIG_FILE_PATH, R_OK)) {
419 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
420 return SYSTEM_INFO_ERROR_IO_ERROR;
423 ret = system_info_get_value_from_config_xml(CUSTOM_TAG, key, DBL_TYPE, &string);
425 LOGI("cannot get %s", key);
427 return SYSTEM_INFO_ERROR_NONE;
430 *ret_val = atof(string);
434 return SYSTEM_INFO_ERROR_NONE;
437 API int system_info_get_custom_string(const char *key, char **value)
442 if (access(CONFIG_FILE_PATH, R_OK)) {
443 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
444 return SYSTEM_INFO_ERROR_IO_ERROR;
447 ret = system_info_get_value_from_config_xml(CUSTOM_TAG, key, STR_TYPE, &string);
449 LOGE("cannot get %s info from %s!!!", key, CONFIG_FILE_PATH);
455 return SYSTEM_INFO_ERROR_NONE;
458 API int system_info_get_internal_value(const char *key, char **value)
463 len = strlen(BOARD_CONFIG);
465 if (!strncmp(key, BOARD_CONFIG, len)) {
466 if (system_info_get_bsp_info(key, value) == SYSTEM_INFO_ERROR_NONE)
467 return SYSTEM_INFO_ERROR_NONE;
470 if (access(CONFIG_FILE_PATH, R_OK)) {
471 LOGE("cannot find file %s!!!", CONFIG_FILE_PATH);
472 return SYSTEM_INFO_ERROR_IO_ERROR;
475 ret = system_info_get_value_from_config_xml(INTERNAL_TAG, key, STR_TYPE, &string);
477 LOGE("cannot get %s info from %s!!!", key, CONFIG_FILE_PATH);
483 return SYSTEM_INFO_ERROR_NONE;