diff options
Diffstat (limited to 'ss_device_change_handler.c')
-rwxr-xr-x | ss_device_change_handler.c | 670 |
1 files changed, 670 insertions, 0 deletions
diff --git a/ss_device_change_handler.c b/ss_device_change_handler.c new file mode 100755 index 0000000..9129a24 --- /dev/null +++ b/ss_device_change_handler.c @@ -0,0 +1,670 @@ +/* + * Copyright (c) 2012 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include <stdlib.h> +#include <stdbool.h> +#include <fcntl.h> +#include <dirent.h> +#include <errno.h> +#include <vconf.h> +#include <sysman.h> +#include <pmapi.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/mount.h> +#include <syspopup_caller.h> +#include <aul.h> +#include <bundle.h> +#include <dirent.h> +#include <libudev.h> +#include "ss_queue.h" +#include "ss_log.h" +#include "ss_device_handler.h" +#include "device-node.h" +#include "ss_noti.h" +#include "include/ss_data.h" +#include "sys_pci_noti/sys_pci_noti.h" +#include "ss_predefine.h" +#define BUFF_MAX 255 +#define SYS_CLASS_INPUT "/sys/class/input" +#define USBCON_EXEC_PATH PREFIX"/bin/usb-server" +#define DEFAULT_USB_INFO_PATH "/tmp/usb_default" +#define STORE_DEFAULT_USB_INFO "usb-devices > "DEFAULT_USB_INFO_PATH +#define HDMI_NOT_SUPPORTED (-1) +#ifdef ENABLE_EDBUS_USE +#include <E_DBus.h> +static E_DBus_Connection *conn; +#endif /* ENABLE_EDBUS_USE */ + +typedef enum { + CB_NOTI_BATT_CHARGE, + CB_NOTI_BATT_LOW, + CB_NOTI_BATT_FULL, + CB_NOTI_MAX +} cb_noti_type; + +typedef enum { + CB_NOTI_OFF = 0, + CB_NOTI_ON = 1 +} cb_noti_onoff_type; + +struct input_event { + long dummy[2]; + unsigned short type; + unsigned short code; + int value; +}; + +enum snd_jack_types { + SND_JACK_HEADPHONE = 0x0001, + SND_JACK_MICROPHONE = 0x0002, + SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE, + SND_JACK_LINEOUT = 0x0004, + SND_JACK_MECHANICAL = 0x0008, /* If detected separately */ + SND_JACK_VIDEOOUT = 0x0010, + SND_JACK_AVOUT = SND_JACK_LINEOUT | SND_JACK_VIDEOOUT, +}; + +#define CHANGE_ACTION "change" +#define ENV_FILTER "CHGDET" +#define ENV_VALUE_USB "usb" +#define ENV_VALUE_CHARGER "charger" +#define ENV_VALUE_EARJACK "earjack" +#define ENV_VALUE_EARKEY "earkey" +#define ENV_VALUE_TVOUT "tvout" +#define ENV_VALUE_HDMI "hdmi" +#define ENV_VALUE_KEYBOARD "keyboard" + + +#define ABNORMAL_POPUP_COUNTER 5 + +static int input_device_number; + +static struct udev_monitor *mon = NULL; +static struct udev *udev = NULL; +static Ecore_Fd_Handler *ufdh = NULL; + +static int uevent_control_cb(void *data, Ecore_Fd_Handler *fd_handler); + +static int check_lowbat_charge_device(int bInserted) +{ + static int bChargeDeviceInserted = 0; + int val = -1; + int bat_state = -1; + int ret = -1; + if (bInserted == 1) { + if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) == 0) { + if (val == 1) + bChargeDeviceInserted = 1; + return 0; + } + } else if (bInserted == 0) { + if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &val) == 0) { + if (val == 0 && bChargeDeviceInserted == 1) { + bChargeDeviceInserted = 0; + //low bat popup during charging device removing + if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &bat_state) == 0) { + if(bat_state < VCONFKEY_SYSMAN_BAT_NORMAL + || bat_state == VCONFKEY_SYSMAN_BAT_REAL_POWER_OFF) { + bundle *b = NULL; + b = bundle_create(); + if(bat_state == VCONFKEY_SYSMAN_BAT_REAL_POWER_OFF) + bundle_add(b,"_SYSPOPUP_CONTENT_", "poweroff"); + else + bundle_add(b, "_SYSPOPUP_CONTENT_", "warning"); + ret = syspopup_launch("lowbat-syspopup", b); + if (ret < 0) { + PRT_TRACE_EM("popup lauch failed\n"); + } + bundle_free(b); + } + } else { + PRT_TRACE_ERR("failed to get vconf key"); + return -1; + } + } + return 0; + } + } + return -1; +} + +static void usb_chgdet_cb(struct ss_main_data *ad) +{ + int val = -1; + char params[BUFF_MAX]; + + predefine_pm_change_state(LCD_NORMAL); + + /* check charging now */ + ss_lowbat_is_charge_in_now(); + /* check current battery level */ + ss_lowbat_monitor(NULL); + ss_action_entry_call_internal(PREDEF_USBCON, 0); + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_USB_ONLINE, &val) == 0) { + PRT_TRACE("jack - usb changed %d",val); + check_lowbat_charge_device(val); + if (val==1) { + snprintf(params, sizeof(params), "%d", CB_NOTI_BATT_CHARGE); + ss_launch_if_noexist("/usr/bin/sys_device_noti", params); + PRT_TRACE("usb device notification"); + } + } else { + PRT_TRACE_ERR("fail to get usb_online status"); + } +} + +static void __sync_usb_status(void) +{ + int val = -1; + int status = -1; + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_USB_ONLINE, &val) != 0 || + vconf_get_int(VCONFKEY_SYSMAN_USB_STATUS,&status) != 0) + return; + if ((val == 1 && status == VCONFKEY_SYSMAN_USB_DISCONNECTED) || + (val == 0 && status == VCONFKEY_SYSMAN_USB_AVAILABLE)) + ss_action_entry_call_internal(PREDEF_USBCON, 0); +} + +static void ta_chgdet_cb(struct ss_main_data *ad) +{ + int val = -1; + int ret = -1; + int bat_state = VCONFKEY_SYSMAN_BAT_NORMAL; + char params[BUFF_MAX]; + + predefine_pm_change_state(LCD_NORMAL); + + /* check charging now */ + ss_lowbat_is_charge_in_now(); + /* check current battery level */ + ss_lowbat_monitor(NULL); + + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_TA_ONLINE, &val) == 0) { + PRT_TRACE("jack - ta changed %d",val); + check_lowbat_charge_device(val); + vconf_set_int(VCONFKEY_SYSMAN_CHARGER_STATUS, val); + if (val == 0) { + pm_unlock_state(LCD_OFF, STAY_CUR_STATE); + } else { + pm_lock_state(LCD_OFF, STAY_CUR_STATE, 0); + snprintf(params, sizeof(params), "%d", CB_NOTI_BATT_CHARGE); + ss_launch_if_noexist("/usr/bin/sys_device_noti", params); + PRT_TRACE("ta device notification"); + } + __sync_usb_status(); + } + else + PRT_TRACE_ERR("failed to get ta status\n"); +} + +static void earjack_chgdet_cb(struct ss_main_data *ad) +{ + PRT_TRACE("jack - earjack changed\n"); + ss_action_entry_call_internal(PREDEF_EARJACKCON, 0); +} + +static void earkey_chgdet_cb(struct ss_main_data *ad) +{ + int val; + PRT_TRACE("jack - earkey changed\n"); + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_EARKEY_ONLINE, &val) == 0) + vconf_set_int(VCONFKEY_SYSMAN_EARJACKKEY, val); +} + +static void tvout_chgdet_cb(struct ss_main_data *ad) +{ + PRT_TRACE("jack - tvout changed\n"); + pm_change_state(LCD_NORMAL); +} + +static void hdmi_chgdet_cb(struct ss_main_data *ad) +{ + int val; + int ret = -1; + + pm_change_state(LCD_NORMAL); + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_HDMI_SUPPORT, &val) == 0) { + if (val!=1) { + PRT_TRACE_ERR("target is not support HDMI"); + vconf_set_int(VCONFKEY_SYSMAN_HDMI, HDMI_NOT_SUPPORTED); + return; + } + } + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_HDMI_ONLINE, &val) == 0) { + PRT_TRACE("jack - hdmi changed %d",val); + vconf_set_int(VCONFKEY_SYSMAN_HDMI,val); + if(val == 1) + pm_lock_state(LCD_NORMAL, GOTO_STATE_NOW, 0); + else + pm_unlock_state(LCD_NORMAL, PM_SLEEP_MARGIN); + } else { + PRT_TRACE_ERR("failed to get hdmi_online status"); + } +} + +static void keyboard_chgdet_cb(struct ss_main_data *ad) +{ + int val = -1; + + if (device_get_property(DEVICE_TYPE_EXTCON, PROP_EXTCON_KEYBOARD_ONLINE, &val) == 0) { + PRT_TRACE("jack - keyboard changed %d",val); + if(val != 1) + val = 0; + vconf_set_int(VCONFKEY_SYSMAN_SLIDING_KEYBOARD, val); + } else { + vconf_set_int(VCONFKEY_SYSMAN_SLIDING_KEYBOARD, VCONFKEY_SYSMAN_SLIDING_KEYBOARD_NOT_SUPPORTED); + } +} + +static void mmc_chgdet_cb(void *data) +{ + static bool first, inserted; + int mmc_status; + int ret = -1; + int val = -1; + + /* at first time, this part will be judge mmc is already inserted or not. */ + if (!first) { + vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_status); + if (mmc_status == VCONFKEY_SYSMAN_MMC_MOUNTED) + inserted = true; + first = true; + } + + if (data == NULL) { + /* when removed mmc, emul kernel notify twice + * So this code ignores second event */ + if (!inserted) + return; + inserted = false; + PRT_TRACE("mmc removed"); + ss_mmc_removed(); + } else { + /* when inserted mmc, emul kernel notify twice(insert, changed) + * So this code ignores second event */ + if (inserted) + return; + inserted = true; + PRT_TRACE("mmc added"); + ret = ss_mmc_inserted(); + if (ret == -1) { + vconf_get_int(VCONFKEY_SYSMAN_MMC_MOUNT,&val); + if (val == VCONFKEY_SYSMAN_MMC_MOUNT_FAILED) { + bundle *b = NULL; + b = bundle_create(); + if (b == NULL) { + PRT_TRACE_ERR("error bundle_create()"); + return; + } + bundle_add(b, "_SYSPOPUP_CONTENT_", "mounterr"); + ret = syspopup_launch("mmc-syspopup", b); + if (ret < 0) { + PRT_TRACE_ERR("popup launch failed"); + } + bundle_free(b); + } else if (val == VCONFKEY_SYSMAN_MMC_MOUNT_COMPLETED) { + bundle *b = NULL; + b = bundle_create(); + if (b == NULL) { + PRT_TRACE_ERR("error bundle_create()"); + return; + } + bundle_add(b, "_SYSPOPUP_CONTENT_", "mountrdonly"); + ret = syspopup_launch("mmc-syspopup", b); + if (ret < 0) { + PRT_TRACE_ERR("popup launch failed"); + } + bundle_free(b); + } + } + } +} + +static void ums_unmount_cb(void *data) +{ + umount(MOVINAND_MOUNT_POINT); +} + +static int __check_abnormal_popup_launch(void) +{ + static int noti_count = 0; + if (noti_count >= ABNORMAL_POPUP_COUNTER) { + noti_count = 0; + return 0; + } else { + noti_count++; + return -EAGAIN; + } +} + +static void charge_cb(struct ss_main_data *ad) +{ + int val = -1; + int charge_now = -1; + int capacity = -1; + char params[BUFF_MAX]; + static int bat_full_noti = 0; + + ss_lowbat_monitor(NULL); + + if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_NOW, &charge_now) != 0 || + device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CAPACITY, &capacity) != 0) + PRT_TRACE_ERR("fail to get battery node value"); + if (charge_now == 0 && capacity == 0) { + PRT_TRACE_ERR("target will be shut down"); + ss_action_entry_call_internal(PREDEF_LOWBAT, 1, POWER_OFF_BAT_ACT); + return; + } + + if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_HEALTH, &val) == 0) { + if (val==BATTERY_OVERHEAT || val==BATTERY_COLD) { + PRT_TRACE_ERR("Battery health status is not good (%d)", val); + + if (__check_abnormal_popup_launch() != 0) + return; + + if (device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CAPACITY, &val) == 0 && val <= 0) + ss_action_entry_call_internal(PREDEF_LOWBAT, 1, POWER_OFF_BAT_ACT); + else + ss_action_entry_call_internal(PREDEF_LOWBAT, 1, CHARGE_ERROR_ACT); + return; + } + } else { + PRT_TRACE_ERR("failed to get battery health status"); + } + device_get_property(DEVICE_TYPE_POWER, PROP_POWER_CHARGE_FULL, &val); + if (val==0) { + if (bat_full_noti==1) { + snprintf(params, sizeof(params), "%d %d", CB_NOTI_BATT_FULL, CB_NOTI_OFF); + ss_launch_if_noexist("/usr/bin/sys_device_noti", params); + } + bat_full_noti = 0; + } else { + if (val==1 && bat_full_noti==0) { + bat_full_noti = 1; + PRT_TRACE("battery full noti"); + snprintf(params, sizeof(params), "%d %d", CB_NOTI_BATT_FULL, CB_NOTI_ON); + ss_launch_if_noexist("/usr/bin/sys_device_noti", params); + } + } +} + +#ifdef ENABLE_EDBUS_USE +static void cb_xxxxx_signaled(void *data, DBusMessage * msg) +{ + char *args; + DBusError err; + struct ss_main_data *ad; + + ad = data; + + dbus_error_init(&err); + if (dbus_message_get_args + (msg, &err, DBUS_TYPE_STRING, &args, DBUS_TYPE_INVALID)) { + if (!strcmp(args, "action")) ; /* action */ + } + + return; +} +#endif /* ENABLE_EDBUS_USE */ + +static void usb_host_chgdet_cb(keynode_t *in_key, struct ss_main_data *ad) +{ + PRT_TRACE("ENTER: usb_host_chgdet_cb()"); + int status; + int ret = vconf_get_int(VCONFKEY_SYSMAN_USB_HOST_STATUS, &status); + if (ret != 0) { + PRT_TRACE_ERR("vconf get failed(VCONFKEY_SYSMAN_USB_HOST_STATUS)\n"); + return ; + } + + if(VCONFKEY_SYSMAN_USB_HOST_CONNECTED == status) { + int pid = ss_launch_if_noexist(USBCON_EXEC_PATH, NULL); + if (pid < 0) { + PRT_TRACE("usb-server launching failed\n"); + return; + } + } + PRT_TRACE("EXIT: usb_host_chgdet_cb()"); +} + +static void usb_host_add_cb() +{ + PRT_TRACE("ENTER: usb_host_add_cb()\n"); + int status; + int ret = vconf_get_int(VCONFKEY_SYSMAN_USB_HOST_STATUS, &status); + if (ret != 0) { + PRT_TRACE("vconf get failed ()\n"); + return; + } + + if (-1 == status) { /* '-1' means that USB host mode is not loaded yet */ + PRT_TRACE("This usb device is connected defaultly\n"); + + ret = system(STORE_DEFAULT_USB_INFO); + PRT_TRACE("Return value of usb-devices: %d\n", ret); + if (0 != access(DEFAULT_USB_INFO_PATH, F_OK)) { + ret = system(STORE_DEFAULT_USB_INFO); + PRT_TRACE("Return value of usb-devices: %d\n", ret); + } + } + PRT_TRACE("EXIT: usb_host_add_cb()\n"); +} + +static int uevent_control_stop(int ufd) +{ + if (ufdh) { + ecore_main_fd_handler_del(ufdh); + ufdh = NULL; + } + if (ufd >= 0) { + close(ufd); + ufd = -1; + } + if (mon) { + udev_monitor_unref(mon); + mon = NULL; + } + if (udev) { + udev_unref(udev); + udev = NULL; + } + return 0; +} + +static int uevent_control_start(void) +{ + int ufd = -1; + + udev = udev_new(); + if (!udev) { + PRT_TRACE_ERR("error create udev"); + return -1; + } + + mon = udev_monitor_new_from_netlink(udev, "kernel"); + if (mon == NULL) { + PRT_TRACE_ERR("error udev_monitor create"); + uevent_control_stop(-1); + return -1; + } + + udev_monitor_set_receive_buffer_size(mon, 1024); + if (udev_monitor_filter_add_match_subsystem_devtype(mon, "platform", NULL) < 0) { + PRT_TRACE_ERR("error apply subsystem filter"); + uevent_control_stop(-1); + return -1; + } + + ufd = udev_monitor_get_fd(mon); + if (ufd == -1) { + PRT_TRACE_ERR("error udev_monitor_get_fd"); + uevent_control_stop(ufd); + return -1; + } + + ufdh = ecore_main_fd_handler_add(ufd, ECORE_FD_READ, uevent_control_cb, NULL, NULL, NULL); + if (!ufdh) { + PRT_TRACE_ERR("error ecore_main_fd_handler_add"); + uevent_control_stop(ufd); + return -1; + } + + if (udev_monitor_enable_receiving(mon) < 0) { + PRT_TRACE_ERR("error unable to subscribe to udev events"); + uevent_control_stop(ufd); + return -1; + } + + return 0; +} + +static int uevent_control_cb(void *data, Ecore_Fd_Handler *fd_handler) +{ + struct udev_device *dev = NULL; + struct udev_list_entry *list_entry = NULL; + char *env_name = NULL; + char *env_value = NULL; + int ufd = -1; + int ret = -1; + + if (!ecore_main_fd_handler_active_get(fd_handler,ECORE_FD_READ)) + return -1; + if ((ufd = ecore_main_fd_handler_fd_get(fd_handler)) == -1) + return -1; + if ((dev = udev_monitor_receive_device(mon)) == NULL) + return -1; + + udev_list_entry_foreach(list_entry,udev_device_get_properties_list_entry(dev)) { + env_name = udev_list_entry_get_name(list_entry); + if (strncmp(env_name, ENV_FILTER, strlen(ENV_FILTER)) == 0) { + env_value = udev_list_entry_get_value(list_entry); + ret = 0; + break; + } + } + + if (ret != 0) { + udev_device_unref(dev); + return -1; + } + + PRT_TRACE("UEVENT DETECTED (%s)",env_value); + ss_action_entry_call_internal(PREDEF_DEVICE_CHANGED,1,env_value); + + udev_device_unref(dev); + uevent_control_stop(ufd); + uevent_control_start(); + + return 0; +} + +int changed_device_def_predefine_action(int argc, char **argv) +{ + if (argc != 1 || argv[0] == NULL) { + PRT_TRACE_ERR("param is failed"); + return -1; + } + + if (strncmp(argv[0], ENV_VALUE_USB, strlen(ENV_VALUE_USB)) == 0) + usb_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_CHARGER, strlen(ENV_VALUE_CHARGER)) == 0) + ta_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_EARJACK, strlen(ENV_VALUE_EARJACK)) == 0) + earjack_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_EARKEY, strlen(ENV_VALUE_EARKEY)) == 0) + earkey_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_TVOUT, strlen(ENV_VALUE_TVOUT)) == 0) + tvout_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_HDMI, strlen(ENV_VALUE_HDMI)) == 0) + hdmi_chgdet_cb(NULL); + if (strncmp(argv[0], ENV_VALUE_KEYBOARD, strlen(ENV_VALUE_KEYBOARD)) == 0) + keyboard_chgdet_cb(NULL); + + return 0; +} + +static void pci_keyboard_add_cb(struct ss_main_data *ad) +{ + char params[BUFF_MAX]; + PRT_TRACE("pci- keyboard inserted\n"); + pm_change_state(LCD_NORMAL); + + snprintf(params, sizeof(params), "%d", CB_NOTI_PCI_INSERTED); + ss_launch_if_noexist("/usr/bin/sys_pci_noti", params); + +} +static void pci_keyboard_remove_cb(struct ss_main_data *ad) +{ + char params[BUFF_MAX]; + PRT_TRACE("pci- keyboard removed\n"); + pm_change_state(LCD_NORMAL); + + snprintf(params, sizeof(params), "%d", CB_NOTI_PCI_REMOVED); + ss_launch_if_noexist("/usr/bin/sys_pci_noti", params); +} +int ss_device_change_init(struct ss_main_data *ad) +{ + ss_action_entry_add_internal(PREDEF_DEVICE_CHANGED, changed_device_def_predefine_action, NULL, NULL); + + if (uevent_control_start() == -1) { + PRT_TRACE_ERR("fail uevent control init"); + return -1; + } + /* for simple noti change cb */ + ss_noti_add("device_usb_chgdet", (void *)usb_chgdet_cb, (void *)ad); + ss_noti_add("device_ta_chgdet", (void *)ta_chgdet_cb, (void *)ad); + ss_noti_add("device_earjack_chgdet", (void *)earjack_chgdet_cb, (void *)ad); + ss_noti_add("device_earkey_chgdet", (void *)earkey_chgdet_cb, (void *)ad); + ss_noti_add("device_tvout_chgdet", (void *)tvout_chgdet_cb, (void *)ad); + ss_noti_add("device_hdmi_chgdet", (void *)hdmi_chgdet_cb, (void *)ad); + ss_noti_add("device_keyboard_chgdet", (void *)keyboard_chgdet_cb, (void *)ad); + + ss_noti_add("device_usb_host_add", (void *)usb_host_add_cb, (void *)ad); + ss_noti_add("mmcblk_add", (void *)mmc_chgdet_cb, (void *)1); + ss_noti_add("mmcblk_remove", (void *)mmc_chgdet_cb, NULL); + + ss_noti_add("unmount_ums", (void *)ums_unmount_cb, NULL); + ss_noti_add("device_charge_chgdet", (void *)charge_cb, (void *)ad); + + ss_noti_add("device_pci_keyboard_add", (void *)pci_keyboard_add_cb, (void *)ad); + ss_noti_add("device_pci_keyboard_remove", (void *)pci_keyboard_remove_cb, (void *)ad); + + if (vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_HOST_STATUS, usb_host_chgdet_cb, NULL) < 0) { + PRT_TRACE_ERR("vconf key notify failed(VCONFKEY_SYSMAN_USB_HOST_STATUS)"); + } + /* dbus noti change cb */ +#ifdef ENABLE_EDBUS_USE + e_dbus_init(); + conn = e_dbus_bus_get(DBUS_BUS_SYSTEM); + if (!conn) + PRT_TRACE_ERR("check system dbus running!\n"); + + e_dbus_signal_handler_add(conn, NULL, "/system/uevent/xxxxx", + "system.uevent.xxxxx", + "Change", cb_xxxxx_signaled, ad); +#endif /* ENABLE_EDBUS_USE */ + + /* set initial state for devices */ + input_device_number = 0; + keyboard_chgdet_cb(NULL); + hdmi_chgdet_cb(NULL); + system(STORE_DEFAULT_USB_INFO); + + return 0; +} |