2 * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 * @brief user experiance library(read configuration file in all system)
17 #include <sys/types.h>
25 #include "ico_apf_log.h"
26 #include "ico_apf_apimacro.h"
27 #include "ico_uxf_conf_common.h"
29 static Ico_Uxf_Sys_Config *reloadSysConfig(void);
31 static Ico_Uxf_Sys_Config *_ico_sys_config = NULL;
34 /*--------------------------------------------------------------------------*/
36 * @brief ico_uxf_getSysConfig: get system configurations
39 * @return system configuration table
40 * @retval != NULL success(system configuration table address)
41 * @retval == NULL error(can not read configuration file)
43 /*--------------------------------------------------------------------------*/
44 ICO_APF_API const Ico_Uxf_Sys_Config *
45 ico_uxf_getSysConfig(void)
47 if (_ico_sys_config) {
48 return _ico_sys_config;
50 _ico_sys_config = g_new0(Ico_Uxf_Sys_Config,1);
51 return reloadSysConfig();
54 /*--------------------------------------------------------------------------*/
56 * @brief ico_uxf_ifGetSysConfig: get system configurations
59 * @return system configuration table
60 * @retval != NULL success(system configuration table address)
61 * @retval == NULL error(the configuration file is not yet read)
63 /*--------------------------------------------------------------------------*/
64 ICO_APF_API const Ico_Uxf_Sys_Config *
65 ico_uxf_ifGetSysConfig(void)
67 return _ico_sys_config;
70 /*--------------------------------------------------------------------------*/
72 * @brief pars_dispposition: calculate an expression about display size(static function)
74 * @param[in] exp expression
75 * @param[in] display display configuration table
76 * @return calculation result
78 /*--------------------------------------------------------------------------*/
80 pars_dispposition(const char *exp, Ico_Uxf_conf_display *display)
90 if (exp[i] == ' ') continue;
91 if ((exp[i] == 0) || (exp[i] == '+') || (exp[i] == '-') ||
92 (exp[i] == '*') || (exp[i] == '-') || (exp[i] == '/')) {
95 if ((strcasecmp(word, "dispw") == 0) ||
96 (strcasecmp(word, "width") == 0)) {
97 wval = display->width;
99 else if ((strcasecmp(word, "disph") == 0) ||
100 (strcasecmp(word, "heigh") == 0)) {
101 wval = display->height;
104 wval = strtol(word, (char **)0, 0);
130 if (exp[i] == '+') sign = 1;
131 else if (exp[i] == '-') sign = 2;
132 else if (exp[i] == '*') sign = 3;
133 else if (exp[i] == '/') sign = 4;
137 if ((sign > 0) && (exp[i] == '-')) {
141 if (exp[i] == '+') sign = 1;
142 else if (exp[i] == '-') sign = 2;
143 else if (exp[i] == '*') sign = 3;
144 else if (exp[i] == '/') sign = 4;
148 if (exp[i] == 0) break;
151 if (j < ((int)sizeof(word)-1)) {
159 /*--------------------------------------------------------------------------*/
161 * @brief reloadSysConfig: load system configuration file(static function)
164 * @return system configuration table
165 * @retval != NULL success(system configuration table address)
166 * @retval == NULL error(can not read configuration file)
168 /*--------------------------------------------------------------------------*/
169 static Ico_Uxf_Sys_Config *
170 reloadSysConfig(void)
174 GError *error = NULL;
183 apfw_trace("reloadSysConfig: Enter");
185 /* decide top directory in all configurations */
186 dirp = getenv(ICO_UXF_TOP_ENV);
188 dirp = ICO_UXF_TOP_TOPDIR;
190 strncpy(_ico_sys_config->misc.topdir, dirp, ICO_UXF_CONF_DIR_MAX);
192 /* decide top directory in configuration file's */
193 dirp = getenv(ICO_UXF_CONFIG_ENV);
195 strncpy(_ico_sys_config->misc.confdir, dirp, ICO_UXF_CONF_DIR_MAX);
198 snprintf(_ico_sys_config->misc.confdir, ICO_UXF_CONF_DIR_MAX,
199 "%s/%s", _ico_sys_config->misc.topdir, ICO_UXF_CONFIG_DIR);
200 dirp = _ico_sys_config->misc.confdir;
203 /* A system-wide definition */
204 keyfile = g_key_file_new();
205 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
207 GString* filepath = g_string_new("xx");
208 g_string_printf(filepath, "%s/%s", dirp, ICO_UXF_CONFIG_SYSTEM);
210 if (!g_key_file_load_from_file(keyfile, filepath->str, flags, &error)) {
211 fprintf(stderr, "%s: %s\n", (char *)filepath->str, error->message);
212 g_string_free(filepath, TRUE);
215 g_string_free(filepath, TRUE);
218 _ico_sys_config->misc.loglevel
219 = g_key_file_get_integer(keyfile, "log", "loglevel", &error);
220 ico_uxf_conf_checkGerror(&error);
221 _ico_sys_config->misc.logflush =
222 ico_uxf_getSysBoolByName(g_key_file_get_string(keyfile, "log", "logflush", &error));
223 ico_uxf_conf_checkGerror(&error);
226 if (getenv("ICO_IVI_NO_LOG")) {
227 ico_uxf_log_setlevel(0);
230 ico_uxf_log_setlevel(_ico_sys_config->misc.loglevel |
231 ((_ico_sys_config->misc.logflush) ?
232 ICO_APF_LOG_FLUSH : ICO_APF_LOG_NOFLUSH));
235 /* [category] application category name and attributes */
236 idlist = ico_uxf_conf_countNumericalKey(keyfile, "category");
237 length = g_list_length(idlist);
238 _ico_sys_config->categoryNum = length;
239 _ico_sys_config->category = g_malloc0(sizeof(Ico_Uxf_conf_category) * length);
241 for (i = 0; i < (int)length; i++) {
242 const char* key = (const char*) g_list_nth_data(idlist, i);
243 const char* g = "category";
244 _ico_sys_config->category[i].id = ico_uxf_conf_getUint(key);
245 ico_uxf_conf_checkGerror(&error);
246 _ico_sys_config->category[i].name = g_key_file_get_string(keyfile, g, key, &error);
247 ico_uxf_conf_checkGerror(&error);
249 strp = (char *)g_key_file_get_string(keyfile, g,
250 ico_uxf_conf_appendStr(key, ".view"), &error);
251 ico_uxf_conf_checkGerror(&error);
252 if (strncasecmp(strp, "alway", 5) == 0) {
253 _ico_sys_config->category[i].view = ICO_UXF_POLICY_ALWAYS;
255 else if (strncasecmp(strp, "run", 3) == 0) {
256 _ico_sys_config->category[i].view = ICO_UXF_POLICY_RUNNING;
258 else if (strncasecmp(strp, "park", 4) == 0) {
259 _ico_sys_config->category[i].view = ICO_UXF_POLICY_PARKED;
261 else if (strncasecmp(strp, "shift_park", 10) == 0) {
262 _ico_sys_config->category[i].view = ICO_UXF_POLICY_SHIFT_PARKING;
264 else if ((strncasecmp(strp, "shift_back", 10) == 0) ||
265 (strncasecmp(strp, "shift_rev", 9) == 0)) {
266 _ico_sys_config->category[i].view = ICO_UXF_POLICY_SHIFT_REVERSES;
268 else if (strcasecmp(strp, "blinker_left") == 0) {
269 _ico_sys_config->category[i].view = ICO_UXF_POLICY_BLINKER_LEFT;
271 else if (strcasecmp(strp, "blinker_right") == 0) {
272 _ico_sys_config->category[i].view = ICO_UXF_POLICY_BLINKER_RIGHT;
275 fprintf(stderr, "[%s.view: %s] Unknown view mode\n", key, strp);
276 g_list_free_full(idlist,g_free);
277 g_key_file_free(keyfile);
281 strp = (char *)g_key_file_get_string(keyfile, g,
282 ico_uxf_conf_appendStr(key, ".sound"), &error);
283 ico_uxf_conf_checkGerror(&error);
284 if (strncasecmp(strp, "alway", 5) == 0) {
285 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_ALWAYS;
287 else if (strncasecmp(strp, "run", 3) == 0) {
288 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_RUNNING;
290 else if (strncasecmp(strp, "park", 4) == 0) {
291 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_PARKED;
293 else if (strncasecmp(strp, "shift_park", 10) == 0) {
294 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_SHIFT_PARKING;
296 else if ((strncasecmp(strp, "shift_back", 10) == 0) ||
297 (strncasecmp(strp, "shift_rev", 9) == 0)) {
298 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_SHIFT_REVERSES;
300 else if (strcasecmp(strp, "blinker_left") == 0) {
301 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_BLINKER_LEFT;
303 else if (strcasecmp(strp, "blinker_right") == 0) {
304 _ico_sys_config->category[i].sound = ICO_UXF_POLICY_BLINKER_RIGHT;
307 fprintf(stderr, "[%s.view: %s] Unknown sound mode\n", key, strp);
308 g_list_free_full(idlist,g_free);
309 g_key_file_free(keyfile);
313 strp = (char *)g_key_file_get_string(keyfile, g,
314 ico_uxf_conf_appendStr(key, ".input"), &error);
315 ico_uxf_conf_checkGerror(&error);
316 if (strncasecmp(strp, "alway", 5) == 0) {
317 _ico_sys_config->category[i].input = ICO_UXF_POLICY_ALWAYS;
319 else if (strncasecmp(strp, "run", 3) == 0) {
320 _ico_sys_config->category[i].input = ICO_UXF_POLICY_RUNNING;
322 else if (strncasecmp(strp, "park", 4) == 0) {
323 _ico_sys_config->category[i].input = ICO_UXF_POLICY_PARKED;
325 else if (strncasecmp(strp, "shift_park", 10) == 0) {
326 _ico_sys_config->category[i].input = ICO_UXF_POLICY_SHIFT_PARKING;
328 else if ((strncasecmp(strp, "shift_back", 10) == 0) ||
329 (strncasecmp(strp, "shift_rev", 9) == 0)) {
330 _ico_sys_config->category[i].input = ICO_UXF_POLICY_SHIFT_REVERSES;
332 else if (strcasecmp(strp, "blinker_left") == 0) {
333 _ico_sys_config->category[i].input = ICO_UXF_POLICY_BLINKER_LEFT;
335 else if (strcasecmp(strp, "blinker_right") == 0) {
336 _ico_sys_config->category[i].input = ICO_UXF_POLICY_BLINKER_RIGHT;
339 fprintf(stderr, "[%s.view: %s] Unknown input mode\n", key, strp);
340 g_list_free_full(idlist,g_free);
341 g_key_file_free(keyfile);
344 _ico_sys_config->category[i].priority =
345 g_key_file_get_integer(keyfile, g,
346 ico_uxf_conf_appendStr(key,".priority"), &error);
347 ico_uxf_conf_checkGerror(&error);
349 apfw_trace("Categry.%d id = %d name = %s view = %d sound = %d input = %d prio = %d",
350 i, _ico_sys_config->category[i].id, _ico_sys_config->category[i].name,
351 _ico_sys_config->category[i].view, _ico_sys_config->category[i].sound,
352 _ico_sys_config->category[i].input,
353 _ico_sys_config->category[i].priority);
355 g_list_free_full(idlist,g_free);
357 /* [kind] application kind name and attributes */
358 idlist = ico_uxf_conf_countNumericalKey(keyfile, "kind");
359 length = g_list_length(idlist);
360 _ico_sys_config->kindNum = length;
361 _ico_sys_config->kind = g_malloc0(sizeof(Ico_Uxf_conf_kind) * length);
363 for (i = 0; i < (int)length; i++) {
364 const char* key = (const char*) g_list_nth_data(idlist, i);
365 const char* g = "kind";
366 _ico_sys_config->kind[i].id = ico_uxf_conf_getUint(key);
367 ico_uxf_conf_checkGerror(&error);
368 _ico_sys_config->kind[i].name = g_key_file_get_string(keyfile, g, key, &error);
369 ico_uxf_conf_checkGerror(&error);
370 strp = (char *)g_key_file_get_string(
371 keyfile, g, ico_uxf_conf_appendStr(key, ".privilege"), &error);
372 ico_uxf_conf_checkGerror(&error);
373 if (strcasecmp(strp, "almighty") == 0) {
374 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_ALMIGHTY;
376 else if (strcasecmp(strp, "system") == 0) {
377 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_SYSTEM;
379 else if (strcasecmp(strp, "system.audio") == 0) {
380 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_SYSTEM_AUDIO;
382 else if (strcasecmp(strp, "system.visible") == 0) {
383 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_SYSTEM_VISIBLE;
385 else if (strcasecmp(strp, "maker") == 0) {
386 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_MAKER;
388 else if (strcasecmp(strp, "certificate") == 0) {
389 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_CERTIFICATE;
391 else if (strcasecmp(strp, "none") == 0) {
392 _ico_sys_config->kind[i].priv = ICO_UXF_PRIVILEGE_NONE;
395 fprintf(stderr, "[%s.view: %s] Unknown privilege mode\n", key, strp);
396 g_list_free_full(idlist,g_free);
397 g_key_file_free(keyfile);
400 apfw_trace("Kind.%d id = %d name = %s privilege = %d",
401 i, _ico_sys_config->kind[i].id, _ico_sys_config->kind[i].name,
402 _ico_sys_config->kind[i].priv);
404 g_list_free_full(idlist,g_free);
406 /* [port] port numbers */
407 _ico_sys_config->misc.appscontrollerport
408 = g_key_file_get_integer(keyfile, "port", "appscontrollerport", &error);
409 ico_uxf_conf_checkGerror(&error);
410 _ico_sys_config->misc.soundpluginport
411 = g_key_file_get_integer(keyfile, "port", "soundpluginport", &error);
412 ico_uxf_conf_checkGerror(&error);
413 if (_ico_sys_config->misc.appscontrollerport <= 0)
414 _ico_sys_config->misc.appscontrollerport = 18081;
415 if (_ico_sys_config->misc.soundpluginport <= 0)
416 _ico_sys_config->misc.soundpluginport = 18082;
419 idlist = ico_uxf_conf_countNumericalKey(keyfile, "host");
420 length = g_list_length(idlist);
421 _ico_sys_config->hostNum = length;
422 _ico_sys_config->host = g_malloc0(sizeof(Ico_Uxf_conf_host) * length);
424 for (i = 0; i < (int)length; i++) {
425 char* key = (char*) g_list_nth_data(idlist, i);
426 const char* g = "host";
427 _ico_sys_config->host[i].id = ico_uxf_conf_getUint(key);
428 _ico_sys_config->host[i].name = g_key_file_get_string(keyfile, g, key, &error);
429 ico_uxf_conf_checkGerror(&error);
431 _ico_sys_config->host[i].address
432 = g_key_file_get_string(keyfile, g, ico_uxf_conf_appendStr(key, ".ip"), &error);
433 ico_uxf_conf_checkGerror(&error);
434 if (g_hostname_is_ip_address(_ico_sys_config->host[i].address)!= TRUE){
435 apfw_error("host[%d] = %s is not ip address style",
436 _ico_sys_config->host[i].id, _ico_sys_config->host[i].address);
440 _ico_sys_config->host[i].type =
441 ico_uxf_getSysHostTypeByName(
442 g_key_file_get_string(keyfile, g,
443 ico_uxf_conf_appendStr(key, ".type"), &error));
444 ico_uxf_conf_checkGerror(&error);
446 _ico_sys_config->host[i].homescreen =
447 g_key_file_get_string(keyfile, g,
448 ico_uxf_conf_appendStr(key, ".homescreen"), &error);
449 ico_uxf_conf_checkGerror(&error);
450 apfw_trace("Host.%d: Id = %d Name = %s Type = %d Ip = %s HomeScreen = %s",
451 i, _ico_sys_config->host[i].id, (char *)_ico_sys_config->host[i].name,
452 _ico_sys_config->host[i].type, (char *)_ico_sys_config->host[i].address,
453 _ico_sys_config->host[i].homescreen);
455 g_list_free_full(idlist,g_free);
458 const char *penv = getenv(ICO_UXF_ENV_APPINF);
460 int dmy1, dmy2, dmy3;
463 if (sscanf(penv, "%d %d %d %s %d", &dmy1, &dmy2, &dmy3, cdmy4, &hostid) < 5) {
466 apfw_trace("reloadSysConfig: Env(%s) = %s, hostId = %d",
467 ICO_UXF_ENV_APPINF, penv, hostid);
471 if ((gethostname(cdmy4, sizeof(cdmy4)-1) >= 0) &&
472 (strncmp(cdmy4, "localhost", 9) != 0)) {
473 apfw_trace("hostname = %s", cdmy4);
474 for (j = 0; cdmy4[j]; j++) {
475 if ((cdmy4[j] == ' ') || (cdmy4[j] == '(') ||
476 (cdmy4[j] == '@') || (cdmy4[j] == ':')) {
481 for (j = 0; j < _ico_sys_config->hostNum; j++) {
482 if (strcasecmp(_ico_sys_config->host[j].name, cdmy4) == 0) {
483 hostid = _ico_sys_config->host[j].id;
491 FILE *fp = popen("/sbin/ifconfig", "r");
496 while (fgets(sBuf, sizeof(sBuf)-1, fp)) {
497 if ((! foundeth) || (sBuf[0] != ' ')) {
499 /* skip to "eth" device */
500 if (sBuf[0] == ' ' || sBuf[0] == '\t') continue;
501 if (strncmp(sBuf, "eth", 3) != 0) continue;
505 for (j = 0; sBuf[j]; j++) {
506 if (strncmp(&sBuf[j], "inet6", 5) == 0) continue;
507 if (strncmp(&sBuf[j], "inet", 4) == 0) break;
510 /* forget "inet" device */
512 for (; sBuf[j]; j++) {
513 if (sBuf[j] == ':') break;
518 for (k = j +1; sBuf[k]; k++) {
519 if (sBuf[k] == ' ' || sBuf[k] == '\t' ||
520 sBuf[k] == '\n' || sBuf[k] == '\r') {
525 apfw_trace("My Inet Addr = %s", &sBuf[j]);
526 for (k = 0; k < _ico_sys_config->hostNum; k++) {
527 if (strcmp(_ico_sys_config->host[k].address, &sBuf[j]) == 0) {
528 hostid = _ico_sys_config->host[k].id;
534 if (hostid >= 0) break;
540 _ico_sys_config->misc.myhostId = hostid;
543 apfw_trace("Default Host = 0, %s", ico_uxf_get_SysLocation(0));
544 _ico_sys_config->misc.myhostId = _ico_sys_config->host[0].id;
547 /* The validity of MyHost is checked. */
548 Ico_Uxf_conf_host *myhost = (Ico_Uxf_conf_host *)
549 ico_uxf_getSysHostById(_ico_sys_config->misc.myhostId);
551 apfw_critical("MyHostId.%d dose not exist, default 0",
552 _ico_sys_config->misc.myhostId);
553 myhost = &_ico_sys_config->host[0];
555 apfw_error("HostId.0 dose not exist, GiveUp!");
558 _ico_sys_config->misc.myhostId = myhost->id;
561 _ico_sys_config->misc.myaddress =
562 (char *)ico_uxf_get_SysLocation(_ico_sys_config->misc.myhostId);
563 _ico_sys_config->misc.myhostName = myhost->name;
565 _ico_sys_config->misc.homescreen = myhost->homescreen;
567 if (myhost->homescreen) {
568 _ico_sys_config->misc.masterhostId = myhost->id;
571 _ico_sys_config->misc.masterhostId = _ico_sys_config->misc.myhostId;
573 for (i = 0; i < _ico_sys_config->hostNum; i++) {
574 if (_ico_sys_config->host[i].homescreen) {
575 _ico_sys_config->misc.masterhostId = _ico_sys_config->host[i].id;
580 _ico_sys_config->misc.masterhostaddress =
581 (char *)ico_uxf_get_SysLocation(_ico_sys_config->misc.masterhostId);
583 apfw_trace("MyHost %d[%s] Master Host %d(%s)", _ico_sys_config->misc.myhostId,
584 _ico_sys_config->misc.myaddress, _ico_sys_config->misc.masterhostId,
585 _ico_sys_config->misc.masterhostaddress);
587 _ico_sys_config->misc.default_hostId = ico_uxf_getSysHostByName(
588 g_key_file_get_string(keyfile, "default", "host", &error));
589 ico_uxf_conf_checkGerror(&error);
592 idlist = ico_uxf_conf_countNumericalKey(keyfile, "display");
593 length = g_list_length(idlist);
594 _ico_sys_config->displayNum = length;
595 _ico_sys_config->display = g_malloc0(sizeof(Ico_Uxf_conf_display) * length);
598 for (i = 0; i < (int)length; i++) {
599 const char* key = (const char*) g_list_nth_data(idlist, i);
600 const char* g = "display";
601 Ico_Uxf_conf_display *display = &_ico_sys_config->display[i];
602 display->id = ico_uxf_conf_getUint(key);
603 ico_uxf_conf_checkGerror(&error);
604 display->name = g_key_file_get_string(keyfile, g, key, &error);
605 ico_uxf_conf_checkGerror(&error);
608 ico_uxf_getSysHostByName(
609 g_key_file_get_string(keyfile, g,
610 ico_uxf_conf_appendStr(key,".host"), &error));
611 ico_uxf_conf_checkGerror(&error);
613 g_key_file_get_integer(keyfile, g,
614 ico_uxf_conf_appendStr(key,".displayno"), &error);
616 display->displayno = -1;
617 g_clear_error(&error);
620 g_key_file_get_string(keyfile, g,
621 ico_uxf_conf_appendStr(key,".wayland"), &error);
622 ico_uxf_conf_checkGerror(&error);
625 ico_uxf_getSysDispTypeByName(g_key_file_get_string(keyfile, g,
626 ico_uxf_conf_appendStr(key,".type"), &error));
627 ico_uxf_conf_checkGerror(&error);
630 g_key_file_get_integer(keyfile, g, ico_uxf_conf_appendStr(key,".width"), &error);
631 ico_uxf_conf_checkGerror(&error);
633 g_key_file_get_integer(keyfile, g, ico_uxf_conf_appendStr(key,".height"), &error);
634 ico_uxf_conf_checkGerror(&error);
636 g_key_file_get_integer(keyfile, g, ico_uxf_conf_appendStr(key,".layer"), &error);
637 ico_uxf_conf_checkGerror(&error);
641 g_key_file_get_integer(keyfile,g,ico_uxf_conf_appendStr(key,".inch"),&error);
642 ico_uxf_conf_checkGerror(&error);
644 apfw_trace("Display.%d Id = %d Name = %s Host = %d DispNo = %d W/H = %d/%d Wayland = %s inch = %d",
645 i, display->id, (char *)display->name, display->hostId,
646 display->displayno, display->width, display->height,
647 display->wayland, display->inch);
650 int displayer_length;
651 GString* layer_key = g_string_new("");
652 for (displayer_length = 0;
653 displayer_length < ICO_UXF_DISPLAY_LAYER_MAX; displayer_length++) {
654 g_string_printf(layer_key,"%s.layer.%d",key,displayer_length);
655 if (g_key_file_has_key(keyfile,g,layer_key->str,NULL) != TRUE) break;
657 apfw_trace("Display.%d layerNum = %d" ,i, displayer_length);
658 display->layerNum = displayer_length;
659 display->layer = g_malloc0(sizeof(Ico_Uxf_conf_display_layer)*displayer_length);
661 for (j = 0; j < displayer_length; j++) {
662 g_string_printf(layer_key,"%s.layer.%d",key,j);
663 display->layer[j].id = j;
664 display->layer[j].name =
665 g_key_file_get_string(keyfile, g, layer_key->str, &error);
666 ico_uxf_conf_checkGerror(&error);
667 apfw_trace("Display.%d Layer.%d id = %d name = %s", i, j,
668 display->layer[j].id, display->layer[j].name);
670 g_string_free(layer_key,TRUE);
674 GString* zone_key = g_string_new("");
675 for (dispzone_length = 0;
676 dispzone_length < ICO_UXF_DISPLAY_ZONE_MAX; dispzone_length++) {
677 g_string_printf(zone_key,"%s.zone.%d",key,dispzone_length);
678 if (g_key_file_has_key(keyfile,g,zone_key->str,NULL) != TRUE) break;
680 apfw_trace("Display.%d zoneNum = %d" ,i, dispzone_length);
681 display->zoneNum = dispzone_length;
682 display->zone = g_malloc0(sizeof(Ico_Uxf_conf_display_zone)*dispzone_length);
684 gsize zonesizes[ICO_UXF_DISPLAY_ZONE_MAX];
685 gchar **zonelists[ICO_UXF_DISPLAY_ZONE_MAX];
687 Ico_Uxf_conf_display_zone *zone;
689 for (j = 0; j < dispzone_length; j++) {
690 g_string_printf(zone_key,"%s.zone.%d",key,j);
691 zonelists[j] = g_key_file_get_string_list(
692 keyfile,g,zone_key->str,&zonesizes[j],&error);
693 ico_uxf_conf_checkGerror(&error);
694 if ((! zonelists[j]) || (zonesizes[j] <= 0)) {
695 apfw_error("reloadSysConfig: display.%d zone.%d dose not exist",i,j);
699 for (j = 0; j < dispzone_length; j++) {
700 zone = &(display->zone[j]);
702 zone->zoneidx = zoneidx++;
703 zone->display = display;
705 if (zonesizes[j] <= 0) continue;
707 zonelist = zonelists[j];
708 zone->name = strdup((char*)zonelist[0]);
709 if (zonesizes[j] < 5) {
710 /* default zone is full screen */
713 zone->width = display->width;
714 zone->height = display->height;
717 zone->x = pars_dispposition((char *)zonelist[1], display);
718 zone->y = pars_dispposition((char *)zonelist[2], display);
719 zone->width = pars_dispposition((char *)zonelist[3], display);
720 zone->height = pars_dispposition((char *)zonelist[4], display);
723 for (j = 0; j < dispzone_length; j++) {
725 if (zonesizes[j] <= 5) continue;
726 zonelist = zonelists[j];
727 zone = &(display->zone[j]);
729 for (k = 5; (m < ZONE_MAX_OVERLAP) && (k < (int)zonesizes[j]); k++) {
730 for (l = 0; l < dispzone_length; l++) {
731 if (l == j) continue;
732 if (strcasecmp(zonelist[k], display->zone[l].name) == 0) {
733 for (n = 0; n < m; n++) {
734 if (zone->overlap[n] == display->zone[l].id) break;
737 zone->overlap[m++] = display->zone[l].id;
742 if (l >= dispzone_length) {
743 apfw_error("reloadSysConfig: disp.%d zone.%d overlap zone(%s) "
744 "dose not exist", i, j, (char *)zonelist[k]);
747 zone->overlapNum = m;
749 for (j = 0; j < dispzone_length; j++) {
750 if (zonelists[j]) g_strfreev(zonelists[j]);
751 zone = &(display->zone[j]);
752 apfw_trace("Disp.%d zone.%d x/y = %d/%d w/h = %d/%d over = %d.%d %d %d %d %d",
753 i, j, zone->x, zone->y, zone->width, zone->height,
754 zone->overlapNum, zone->overlap[0], zone->overlap[1],
755 zone->overlap[2], zone->overlap[3], zone->overlap[4]);
757 g_string_free(zone_key,TRUE);
759 g_list_free_full(idlist,g_free);
762 idlist = ico_uxf_conf_countNumericalKey(keyfile, "sound");
763 length = g_list_length(idlist);
764 _ico_sys_config->soundNum = length;
765 _ico_sys_config->sound = g_malloc0(sizeof(Ico_Uxf_conf_sound) * length);
768 for (i = 0; i < (int)length; i++) {
769 const char* key = (const char*) g_list_nth_data(idlist, i);
770 const char* g = "sound";
771 Ico_Uxf_conf_sound *sound = &_ico_sys_config->sound[i];
772 sound->id = ico_uxf_conf_getUint(key);
773 ico_uxf_conf_checkGerror(&error);
774 sound->name = g_key_file_get_string(keyfile, g, key, &error);
775 ico_uxf_conf_checkGerror(&error);
778 ico_uxf_getSysHostByName(g_key_file_get_string(
779 keyfile, g, ico_uxf_conf_appendStr(key,".host"), &error));
780 ico_uxf_conf_checkGerror(&error);
782 g_key_file_get_integer(keyfile, g,
783 ico_uxf_conf_appendStr(key,".soundno"), &error);
786 g_clear_error(&error);
789 apfw_trace("Sound.%d Id = %d Name = %s Host = %d SoundNo = %d",
790 i, sound->id, (char *)sound->name, sound->hostId, sound->soundno);
794 GString* sound_key = g_string_new("");
795 for (sound_length = 0;
796 sound_length < ICO_UXF_SOUND_ZONE_MAX; sound_length++) {
797 g_string_printf(sound_key,"%s.zone.%d", key, sound_length);
798 if (g_key_file_has_key(keyfile,g,sound_key->str,NULL) != TRUE) break;
800 apfw_trace("Sound.%d zoneNum = %d" ,i, sound_length);
801 sound->zoneNum = sound_length;
802 sound->zone = g_malloc0(sizeof(Ico_Uxf_conf_sound_zone)*sound_length);
804 gsize zonesizes[ICO_UXF_SOUND_ZONE_MAX];
805 gchar **zonelists[ICO_UXF_SOUND_ZONE_MAX];
807 Ico_Uxf_conf_sound_zone *zone;
809 for (j = 0; j < sound_length; j++) {
810 g_string_printf(sound_key,"%s.zone.%d",key,j);
812 g_key_file_get_string_list(keyfile,g,sound_key->str,&zonesizes[j],&error);
813 ico_uxf_conf_checkGerror(&error);
814 if ((! zonelists[j]) || (zonesizes[j] <= 0)) {
815 apfw_error("reloadSysConfig: sound.%d zone.%d dose not exist",i,j);
819 for (j = 0; j < sound_length; j++) {
820 zone = &(sound->zone[j]);
822 zone->zoneidx = zoneidx++;
824 if (zonesizes[j] <= 0) continue;
826 zonelist = zonelists[j];
827 zone->name = strdup((char*)zonelist[0]);
829 for (j = 0; j < sound_length; j++) {
831 if (zonesizes[j] <= 1) continue;
832 zonelist = zonelists[j];
833 zone = &(sound->zone[j]);
835 for (k = 1; (m < ZONE_MAX_OVERLAP) && (k < (int)zonesizes[j]); k++) {
836 for (l = 0; l < sound_length; l++) {
837 if (l == j) continue;
838 if (strcasecmp((char*)zonelist[k], sound->zone[l].name) == 0) {
839 for (n = 0; n < m; n++) {
840 if (zone->overlap[n] == sound->zone[l].id) break;
843 zone->overlap[m++] = sound->zone[l].id;
848 if (l >= sound_length) {
849 apfw_error("reloadSysConfig: sound.%d zone.%d overlap zone(%s) "
850 "dose not exist", i, j, (char *)zonelist[k]);
853 zone->overlapNum = m;
855 for (j = 0; j < sound_length; j++) {
856 if (zonelists[j]) g_strfreev(zonelists[j]);
857 zone = &(sound->zone[j]);
858 apfw_trace("Sound.%d zone.%d(%s) over = %d.%d %d %d %d %d",
860 zone->overlapNum, zone->overlap[0], zone->overlap[1],
861 zone->overlap[2], zone->overlap[3], zone->overlap[4]);
863 g_string_free(sound_key,TRUE);
865 g_list_free_full(idlist,g_free);
868 idlist = ico_uxf_conf_countNumericalKey(keyfile, "input");
869 length = g_list_length(idlist);
870 _ico_sys_config->inputdevNum = length;
871 _ico_sys_config->inputdev = g_malloc0(sizeof(Ico_Uxf_conf_inputdev) * length);
873 for (i = 0; i < (int)length; i++) {
874 const char* key = (const char*) g_list_nth_data(idlist, i);
875 const char* g = "input";
876 Ico_Uxf_conf_inputdev *inputdev = &_ico_sys_config->inputdev[i];
877 inputdev->id = ico_uxf_conf_getUint(key);
878 ico_uxf_conf_checkGerror(&error);
879 inputdev->name = g_key_file_get_string(keyfile, g, key, &error);
880 ico_uxf_conf_checkGerror(&error);
884 GString* sw_key = g_string_new("");
885 for (sw_length = 0;; sw_length++) {
886 g_string_printf(sw_key,"%s.sw.%d",key,sw_length);
887 if (g_key_file_has_key(keyfile,g,sw_key->str,NULL) != TRUE) break;
889 apfw_trace("Input.%d swNum = %d" ,i, sw_length);
890 inputdev->inputswNum = sw_length;
891 inputdev->inputsw = g_malloc0(sizeof(Ico_Uxf_conf_inputsw)*sw_length);
896 for (j = 0; j < sw_length; j++) {
897 g_string_printf(sw_key,"%s.sw.%d",key,j);
898 swlist = g_key_file_get_string_list(keyfile,g,sw_key->str,&swsize,&error);
899 ico_uxf_conf_checkGerror(&error);
900 if ((!swlist) || (swsize <= 0)) {
901 apfw_error("reloadSysConfig: input.%d sw.%d dose not exist",i,j);
905 inputdev->inputsw[j].inputdev = inputdev;
906 inputdev->inputsw[j].name = strdup((char *)swlist[0]);
908 inputdev->inputsw[j].appid = strdup((char *)swlist[1]);
912 uifw_trace("reloadSysConfig: input %s.%s app = %s",
914 inputdev->inputsw[j].name ? inputdev->inputsw[j].name : " ",
915 inputdev->inputsw[j].appid ? inputdev->inputsw[j].appid : " ");
917 g_string_free(sw_key,TRUE);
919 g_list_free_full(idlist,g_free);
921 _ico_sys_config->misc.default_kindId = ico_uxf_getSysKindByName(
922 g_key_file_get_string(keyfile, "default", "kind", &error));
923 ico_uxf_conf_checkGerror(&error);
924 _ico_sys_config->misc.default_categoryId = ico_uxf_getSysCategoryByName(
925 g_key_file_get_string(keyfile, "default", "category", &error));
926 ico_uxf_conf_checkGerror(&error);
927 _ico_sys_config->misc.default_displayId = ico_uxf_getSysDisplayByName(
928 g_key_file_get_string(keyfile, "default", "display", &error));
929 ico_uxf_conf_checkGerror(&error);
930 _ico_sys_config->misc.default_layerId = ico_uxf_getSysLayerByName(
931 _ico_sys_config->misc.default_displayId,
932 g_key_file_get_string(keyfile, "default", "layer", &error));
933 ico_uxf_conf_checkGerror(&error);
934 _ico_sys_config->misc.default_dispzoneId = ico_uxf_getSysDispZoneByName(
935 _ico_sys_config->misc.default_displayId,
936 g_key_file_get_string(keyfile, "default", "displayzone", &error));
937 _ico_sys_config->misc.default_soundId = ico_uxf_getSysSoundByName(
938 g_key_file_get_string(keyfile, "default", "sound", &error));
939 _ico_sys_config->misc.default_soundzoneId = ico_uxf_getSysSoundZoneByName(
940 _ico_sys_config->misc.default_soundId,
941 g_key_file_get_string(keyfile, "default", "soundzone", &error));
942 ico_uxf_conf_checkGerror(&error);
943 _ico_sys_config->misc.default_inputdevId = ico_uxf_getSysInputdevByName(
944 g_key_file_get_string(keyfile, "default", "inputdev", &error));
945 _ico_sys_config->misc.default_inputswId = ico_uxf_getSysInputswByName(
946 _ico_sys_config->misc.default_inputdevId,
947 g_key_file_get_string(keyfile, "default", "inputsw", &error));
948 ico_uxf_conf_checkGerror(&error);
950 apfw_trace("Default host = %d kind = %d category = %d disp = %d layer = %d dispzone = %d "
951 "sound = %d soundzone = %d input = %d/%d",
952 _ico_sys_config->misc.default_hostId,
953 _ico_sys_config->misc.default_kindId,
954 _ico_sys_config->misc.default_categoryId,
955 _ico_sys_config->misc.default_displayId,
956 _ico_sys_config->misc.default_layerId,
957 _ico_sys_config->misc.default_dispzoneId,
958 _ico_sys_config->misc.default_soundId,
959 _ico_sys_config->misc.default_soundzoneId,
960 _ico_sys_config->misc.default_inputdevId,
961 _ico_sys_config->misc.default_inputswId);
962 g_key_file_free(keyfile);
964 apfw_trace("reloadSysConfig: Leave");
965 return _ico_sys_config;
968 /*--------------------------------------------------------------------------*/
970 * @brief ico_uxf_getSysHostById: get host configuration by host Id
972 * @param[in] hostId host Id
973 * @return host configuration table
974 * @retval != NULL success(host configuration table address)
975 * @retval == NULL error(host Id dose not exist)
977 /*--------------------------------------------------------------------------*/
978 ICO_APF_API const Ico_Uxf_conf_host *
979 ico_uxf_getSysHostById(const int hostId)
983 if (!_ico_sys_config) {
984 (void)ico_uxf_getSysConfig();
987 for (i = 0; i < _ico_sys_config->hostNum; i++) {
988 if (_ico_sys_config->host[i].id == hostId) {
989 return &_ico_sys_config->host[i];
992 apfw_warn("ico_uxf_getSysHostById(%d) Illegal Host Number", hostId);
996 /*--------------------------------------------------------------------------*/
998 * @brief ico_uxf_get_SysLocation: get host location by host Id
1000 * @param[in] hostId host Id
1001 * @return host location name
1002 * @retval != NULL success(host location name)
1003 * @retval == NULL error(host Id dose not exist)
1005 /*--------------------------------------------------------------------------*/
1006 ICO_APF_API const char *
1007 ico_uxf_get_SysLocation(const int hostId)
1011 if (!_ico_sys_config) {
1012 (void)ico_uxf_getSysConfig();
1015 for (i = 0; i < _ico_sys_config->hostNum; i++) {
1016 if (_ico_sys_config->host[i].id == hostId) {
1017 return _ico_sys_config->host[i].address;
1020 apfw_warn("Ico_uxf_get_SysLocation(%d) Illegal Host Number", hostId);
1024 /*--------------------------------------------------------------------------*/
1026 * @brief ico_uxf_getSysDisplayById: get display configuration by display Id
1028 * @param[in] displayId display Id
1029 * @return display configuration table address
1030 * @retval != NULL success(host oy configuration tabel address)
1031 * @retval == NULL error(displayd dose not exist)
1033 /*--------------------------------------------------------------------------*/
1034 ICO_APF_API const Ico_Uxf_conf_display *
1035 ico_uxf_getSysDisplayById(const int displayId)
1039 if (!_ico_sys_config) {
1040 (void)ico_uxf_getSysConfig();
1043 for (i = 0; i < _ico_sys_config->displayNum; i++) {
1044 if (_ico_sys_config->display[i].id == displayId) {
1045 return &_ico_sys_config->display[i];
1048 apfw_warn("ico_uxf_getSysDisplayById(%d) Illegal Display Number", displayId);
1052 /*--------------------------------------------------------------------------*/
1054 * @brief ico_uxf_getSysHostByName: get host Id bu host name
1056 * @param[in] shost host name
1057 * @return host Id number
1059 /*--------------------------------------------------------------------------*/
1061 ico_uxf_getSysHostByName(const char *shost)
1065 if (!_ico_sys_config) {
1066 (void)ico_uxf_getSysConfig();
1068 if (_ico_sys_config->hostNum <= 0) {
1069 apfw_critical("ico_uxf_getSysHostByName: can not read configuration file");
1070 return _ico_sys_config->misc.default_hostId;
1073 if ((! shost) || (*shost == 0)) {
1074 return _ico_sys_config->host[0].id;
1077 for (i = 0; i < _ico_sys_config->hostNum; i++) {
1078 if (strcasecmp(shost, _ico_sys_config->host[i].name) == 0) {
1079 return _ico_sys_config->host[i].id;
1082 apfw_warn("ico_uxf_getSysHostByName(%s) Illegal Host Name", shost);
1083 return _ico_sys_config->misc.default_hostId;
1086 /*--------------------------------------------------------------------------*/
1088 * @brief ico_uxf_getSysHostTypeByName: get host type number by name(internal function)
1090 * @param[in] stype host type name
1091 * @return host type number
1093 /*--------------------------------------------------------------------------*/
1095 ico_uxf_getSysHostTypeByName(const char *stype)
1097 if ((! stype) || (*stype == 0)) {
1098 return ICO_UXF_HOSTTYPE_CENTER;
1100 if (strcasecmp(stype, "center") == 0) {
1101 return ICO_UXF_HOSTTYPE_CENTER;
1103 else if (strcasecmp(stype, "meter") == 0) {
1104 return ICO_UXF_HOSTTYPE_METER;
1106 else if (strcasecmp(stype, "remote") == 0) {
1107 return ICO_UXF_HOSTTYPE_REMOTE;
1109 else if (strcasecmp(stype, "passenger") == 0) {
1110 return ICO_UXF_HOSTTYPE_PASSENGER;
1112 else if (strcasecmp(stype, "rear") == 0) {
1113 return ICO_UXF_HOSTTYPE_REAR;
1115 else if (strcasecmp(stype, "rearleft") == 0) {
1116 return ICO_UXF_HOSTTYPE_REARLEFT;
1118 else if (strcasecmp(stype, "rearright") == 0) {
1119 return ICO_UXF_HOSTTYPE_REARRIGHT;
1121 apfw_warn("ico_uxf_getSysHostTypeByName(%s) Illegal HostType Name", stype);
1122 return strtol(stype, (char **)0, 0);
1125 /*--------------------------------------------------------------------------*/
1127 * @brief ico_uxf_getSysDispTypeByName: get display type number by name(internal function)
1129 * @param[in] stype display type name
1130 * @return display type number
1132 /*--------------------------------------------------------------------------*/
1134 ico_uxf_getSysDispTypeByName(const char *stype)
1136 if ((! stype) || (*stype == 0)) {
1137 apfw_critical("ico_uxf_getSysDispTypeByName(NULL) Illegal HostType Name");
1140 if (strcasecmp(stype, "center") == 0) {
1141 return ICO_UXF_DISPLAYTYPE_CENTER;
1143 else if (strcasecmp(stype, "meter") == 0) {
1144 return ICO_UXF_DISPLAYTYPE_METER;
1146 else if (strcasecmp(stype, "remote") == 0) {
1147 return ICO_UXF_DISPLAYTYPE_REMOTE;
1149 else if (strcasecmp(stype, "passenger") == 0) {
1150 return ICO_UXF_DISPLAYTYPE_PASSENGER;
1152 else if (strcasecmp(stype, "rear") == 0) {
1153 return ICO_UXF_DISPLAYTYPE_REAR;
1155 else if (strcasecmp(stype, "rearleft") == 0) {
1156 return ICO_UXF_DISPLAYTYPE_REARLEFT;
1158 else if (strcasecmp(stype, "rearright") == 0) {
1159 return ICO_UXF_DISPLAYTYPE_REARRIGHT;
1161 apfw_warn("ico_uxf_getSysDispTypeByName(%s) Illegal DisplayType Name", stype);
1162 return strtol(stype, (char **)0, 0);
1165 /*--------------------------------------------------------------------------*/
1167 * @brief ico_uxf_getSysBoolByName: get boolian value(internal function)
1169 * @param[in] sbool boolian value string
1170 * @return boolian value
1174 /*--------------------------------------------------------------------------*/
1176 ico_uxf_getSysBoolByName(const char *sbool)
1178 if ((! sbool) || (*sbool == 0)) {
1181 if ((strcasecmp(sbool, "true") == 0) ||
1182 (strcasecmp(sbool, "yes") == 0) ||
1183 (strcasecmp(sbool, "1") == 0)) {
1189 /*--------------------------------------------------------------------------*/
1191 * @brief ico_uxf_getSysDisplayByName: get display Id by display name
1193 * @param[in] sdisplay display name
1194 * @return display Id
1196 /*--------------------------------------------------------------------------*/
1198 ico_uxf_getSysDisplayByName(const char *sdisplay)
1202 if (!_ico_sys_config) {
1203 (void)ico_uxf_getSysConfig();
1205 if ((! sdisplay) || (*sdisplay == 0)) {
1206 apfw_trace("ico_uxf_getSysDisplayByName(NULL) Illegal Display Name");
1207 return _ico_sys_config->misc.default_displayId;
1210 for (i = 0; i < _ico_sys_config->displayNum; i++) {
1211 if (strcasecmp(sdisplay, _ico_sys_config->display[i].name) == 0) {
1212 return _ico_sys_config->display[i].id;
1215 apfw_warn("ico_uxf_getSysDisplayByName(%s) Illegal Display Name", sdisplay);
1216 return _ico_sys_config->misc.default_displayId;
1219 /*--------------------------------------------------------------------------*/
1221 * @brief ico_uxf_getSysLayerByName: get layer Id by layer name
1223 * @param[in] display display Id
1224 * @param[in] slayer layer name
1227 /*--------------------------------------------------------------------------*/
1229 ico_uxf_getSysLayerByName(const int display, const char *slayer)
1234 if (!_ico_sys_config) {
1235 (void)ico_uxf_getSysConfig();
1238 if ((display < 0) || (display >= _ico_sys_config->displayNum)) {
1239 apfw_warn("ico_uxf_getSysLayerByName(%d,%s) Illegal Display Number",
1241 return _ico_sys_config->misc.default_layerId;
1243 if ((! slayer) || (*slayer == 0)) {
1244 apfw_trace("ico_uxf_getSysLayerByName(NULL) Illegal Layer Name");
1245 return _ico_sys_config->misc.default_layerId;
1248 for (i = 0; i < _ico_sys_config->display[display].layerNum; i++) {
1249 if (strcasecmp(slayer, _ico_sys_config->display[display].layer[i].name) == 0) {
1250 return _ico_sys_config->display[display].layer[i].id;
1255 i = strtol(slayer, &errp, 0);
1256 if ((errp) && (*errp != 0)) {
1257 apfw_warn("ico_uxf_getSysLayerByName(%d,%s) Illegal Layer Name", display, slayer);
1258 i = _ico_sys_config->misc.default_layerId;
1263 /*--------------------------------------------------------------------------*/
1265 * @brief ico_uxf_getSysKindByName: get kind Id by kind name
1267 * @param[in] skind kind name
1270 /*--------------------------------------------------------------------------*/
1272 ico_uxf_getSysKindByName(const char *skind)
1276 if (!_ico_sys_config) {
1277 (void)ico_uxf_getSysConfig();
1279 if (_ico_sys_config->kindNum <= 0) {
1280 apfw_critical("ico_uxf_getSysKindByName: can not read configuration file");
1281 return _ico_sys_config->misc.default_kindId;
1284 if ((skind) && (*skind != 0)) {
1285 for (i = 0; i < _ico_sys_config->kindNum; i++) {
1286 if (strcasecmp(skind, _ico_sys_config->kind[i].name) == 0) {
1287 return _ico_sys_config->kind[i].id;
1291 apfw_warn("ico_uxf_getSysKindByName(%s) Illegal kind name", skind);
1292 return _ico_sys_config->misc.default_kindId;
1295 /*--------------------------------------------------------------------------*/
1297 * @brief ico_uxf_getSysCategoryByName: get category Id by category name
1299 * @param[in] scategory category name
1300 * @return category Id
1302 /*--------------------------------------------------------------------------*/
1304 ico_uxf_getSysCategoryByName(const char *scategory)
1308 if (!_ico_sys_config) {
1309 (void)ico_uxf_getSysConfig();
1311 if (_ico_sys_config->categoryNum <= 0) {
1312 apfw_critical("ico_uxf_getSysCategoryByName: can not read configuration file");
1313 return _ico_sys_config->misc.default_categoryId;
1316 if ((scategory) && (*scategory != 0)) {
1317 for (i = 0; i < _ico_sys_config->categoryNum; i++) {
1318 if (strcasecmp(scategory, _ico_sys_config->category[i].name) == 0) {
1319 return _ico_sys_config->category[i].id;
1323 apfw_warn("ico_uxf_getSysCategoryByName(%s) Illegal category name", scategory);
1324 return _ico_sys_config->misc.default_categoryId;
1327 /*--------------------------------------------------------------------------*/
1329 * @brief ico_uxf_getSysDispZoneByName: get display zone Id by display zone name
1331 * @param[in] display display Id
1332 * @param[in] sdispzone displahy zone name
1333 * @return display zone Id
1335 /*--------------------------------------------------------------------------*/
1337 ico_uxf_getSysDispZoneByName(const int display, const char *sdispzone)
1341 if (!_ico_sys_config) {
1342 (void)ico_uxf_getSysConfig();
1344 if ((display < 0) || (display >= _ico_sys_config->displayNum) ||
1345 (_ico_sys_config->display[display].zoneNum <= 0)) {
1346 apfw_critical("ico_uxf_getSysDispZoneByName: can not read configuration file");
1347 return _ico_sys_config->misc.default_dispzoneId;
1350 if ((sdispzone) && (*sdispzone != 0)) {
1351 for (i = 0; i < _ico_sys_config->display[display].zoneNum; i++) {
1352 if (strcasecmp(sdispzone, _ico_sys_config->display[display].zone[i].name) == 0) {
1353 return _ico_sys_config->display[display].zone[i].id;
1357 apfw_warn("ico_uxf_getSysDispZoneByName(%s) Illegal zone name", sdispzone);
1358 return _ico_sys_config->misc.default_dispzoneId;
1361 /*--------------------------------------------------------------------------*/
1363 * @brief ico_uxf_getSysSoundByName: get sound Id by sound name
1365 * @param[in] ssound sound name
1368 /*--------------------------------------------------------------------------*/
1370 ico_uxf_getSysSoundByName(const char *ssound)
1374 if (!_ico_sys_config) {
1375 (void)ico_uxf_getSysConfig();
1377 if (_ico_sys_config->soundNum <= 0) {
1378 apfw_critical("ico_uxf_getSysSoundByName: can not read configuration file");
1379 return _ico_sys_config->misc.default_soundId;
1382 if ((ssound) && (*ssound != 0)) {
1383 for (i = 0; i < _ico_sys_config->soundNum; i++) {
1384 if (strcasecmp(ssound, _ico_sys_config->sound[i].name) == 0) {
1385 return _ico_sys_config->sound[i].id;
1389 apfw_warn("ico_uxf_getSysSoundByName(%s) Illegal sound name", ssound);
1390 return _ico_sys_config->misc.default_soundId;
1393 /*--------------------------------------------------------------------------*/
1395 * @brief ico_uxf_getSysSoundZoneByName: get sound zone Id by sound zone name
1397 * @param[in] sound sound Id
1398 * @param[in] ssoundzone sound zone name
1399 * @return sound zone Id
1401 /*--------------------------------------------------------------------------*/
1403 ico_uxf_getSysSoundZoneByName(const int sound, const char *ssoundzone)
1407 if (!_ico_sys_config) {
1408 (void)ico_uxf_getSysConfig();
1410 if ((sound < 0) || (sound >= _ico_sys_config->soundNum) ||
1411 (_ico_sys_config->sound[sound].zoneNum <= 0)) {
1412 apfw_critical("ico_uxf_getSysSoundZoneByName: can not read configuration file");
1413 return _ico_sys_config->misc.default_soundzoneId;
1416 if ((ssoundzone) && (*ssoundzone != 0)) {
1417 for (i = 0; i < _ico_sys_config->sound[sound].zoneNum; i++) {
1418 if (strcasecmp(ssoundzone, _ico_sys_config->sound[sound].zone[i].name) == 0) {
1419 return _ico_sys_config->sound[sound].zone[i].id;
1423 apfw_warn("ico_uxf_getSysSoundZoneByName(%s) Illegal zone name", ssoundzone);
1424 return _ico_sys_config->misc.default_soundzoneId;
1427 /*--------------------------------------------------------------------------*/
1429 * @brief ico_uxf_getSysInputdevByName: get input device Id by input device name
1431 * @param[in] sinputdev input device name
1432 * @return input device Id
1434 /*--------------------------------------------------------------------------*/
1436 ico_uxf_getSysInputdevByName(const char *sinputdev)
1440 if (!_ico_sys_config) {
1441 (void)ico_uxf_getSysConfig();
1443 if (_ico_sys_config->inputdevNum <= 0) {
1444 apfw_critical("ico_uxf_getSysInputdevByName: can not read configuration file");
1445 return _ico_sys_config->misc.default_inputdevId;
1448 if ((! sinputdev) || (*sinputdev == 0)) {
1449 return _ico_sys_config->misc.default_inputdevId;
1452 for (i = 0; i < _ico_sys_config->inputdevNum; i++) {
1453 if (strcasecmp(sinputdev, _ico_sys_config->inputdev[i].name) == 0) {
1454 return _ico_sys_config->inputdev[i].id;
1457 apfw_warn("ico_uxf_getSysInputdevByName(%s) Illegal device Name", sinputdev);
1458 return _ico_sys_config->misc.default_inputdevId;
1461 /*--------------------------------------------------------------------------*/
1463 * @brief ico_uxf_getSysInputswByName: get input switch Id by input switch name
1465 * @param[in] inputdev input device Id
1466 * @param[in] sinputsw input switch name
1467 * @return input switch Id
1469 /*--------------------------------------------------------------------------*/
1471 ico_uxf_getSysInputswByName(const int inputdev, const char *sinputsw)
1475 if (!_ico_sys_config) {
1476 (void)ico_uxf_getSysConfig();
1478 if ((inputdev < 0) || (inputdev >= _ico_sys_config->inputdevNum) ||
1479 (_ico_sys_config->inputdev[inputdev].inputswNum <= 0)) {
1480 apfw_critical("ico_uxf_getSysInputswByName: can not read configuration file");
1484 if ((sinputsw) && (*sinputsw != 0)) {
1485 for (i = 0; i < _ico_sys_config->inputdev[inputdev].inputswNum; i++) {
1486 if (strcasecmp(sinputsw, _ico_sys_config->inputdev[inputdev].inputsw[i].name)
1492 apfw_warn("ico_uxf_getSysInputswByName(%s) Illegal sw name",
1493 sinputsw ? sinputsw : "(NULL)");
1497 /*--------------------------------------------------------------------------*/
1499 * @brief ico_uxf_closeSysConfig: close and release system configuration table
1504 /*--------------------------------------------------------------------------*/
1506 ico_uxf_closeSysConfig(void)
1508 if (_ico_sys_config != NULL) {
1509 g_free(_ico_sys_config->host);
1510 g_free(_ico_sys_config->display);
1511 g_free(_ico_sys_config);
1512 _ico_sys_config = NULL;