Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 25157) +++ apps/lang/english.lang (working copy) @@ -13377,4 +13377,21 @@ recording_histogram: "Histogram interval" + + id: LANG_USB_CHARGING_MODE + desc: in settings -> system menu + user: core + + *: none + charging: "USB Charging By Default?" + + + *: none + charging: "USB Charging By Default?" + + + *: none + charging: "U S B Charging By Default?" + + Index: apps/settings.h =================================================================== --- apps/settings.h (revision 25157) +++ apps/settings.h (working copy) @@ -540,6 +540,7 @@ bool audioscrobbler; /* Audioscrobbler logging */ bool cuesheet; bool car_adapter_mode; /* 0=off 1=on */ + bool usb_charging_mode; /* 0=off 1=on */ int start_in_screen; #if defined(HAVE_RTC_ALARM) && \ (defined(HAVE_RECORDING) || CONFIG_TUNER) Index: apps/menus/settings_menu.c =================================================================== --- apps/menus/settings_menu.c (revision 25157) +++ apps/menus/settings_menu.c (working copy) @@ -245,6 +245,10 @@ #if CONFIG_CHARGING MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); #endif +#ifdef HAVE_USB_POWER +MENUITEM_SETTING(usb_charging_mode, &global_settings.usb_charging_mode, + NULL); +#endif #ifdef IPOD_ACCESSORY_PROTOCOL MENUITEM_SETTING(serial_bitrate, &global_settings.serial_bitrate, NULL); #endif @@ -293,6 +297,9 @@ #if CONFIG_CHARGING &car_adapter_mode, #endif +#ifdef HAVE_USB_POWER + &usb_charging_mode, +#endif #ifdef IPOD_ACCESSORY_PROTOCOL &serial_bitrate, #endif Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 25157) +++ apps/settings_list.c (working copy) @@ -690,6 +690,11 @@ OFFON_SETTING(NVRAM(1), car_adapter_mode, LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL), #endif +#ifdef HAVE_USB_POWER + OFFON_SETTING(0, usb_charging_mode,LANG_USB_CHARGING_MODE, + false, "usb charging mode", + usb_set_charging_by_default_mode), +#endif #ifdef IPOD_ACCESSORY_PROTOCOL CHOICE_SETTING(0, serial_bitrate, LANG_SERIAL_BITRATE, 0, "serial bitrate", "auto,9600,19200,38400,57600", iap_bitrate_set, 5, ID2P(LANG_SERIAL_BITRATE_AUTO), Index: firmware/export/usb.h =================================================================== --- firmware/export/usb.h (revision 25157) +++ firmware/export/usb.h (working copy) @@ -146,6 +146,7 @@ void usb_status_event(int current_status); #ifdef HAVE_USB_POWER bool usb_powered(void); +void usb_set_charging_by_default_mode(bool usb_mode); #ifdef CONFIG_CHARGING bool usb_charging_enable(bool on); bool usb_charging_enabled(void); Index: firmware/usb.c =================================================================== --- firmware/usb.c (revision 25157) +++ firmware/usb.c (working copy) @@ -56,6 +56,10 @@ #define USB_FULL_INIT #endif +#ifdef HAVE_USB_POWER +static bool usb_charging_by_default = false; +#endif + #ifdef HAVE_LCD_BITMAP bool do_screendump_instead_of_usb = false; #endif @@ -201,12 +205,29 @@ #endif /* HAVE_USBSTACK */ #ifdef HAVE_USB_POWER +void usb_set_charging_by_default_mode(bool usb_mode) +{ + usb_charging_by_default = usb_mode; +} + static inline bool usb_power_button(void) { #if (defined(IRIVER_H10) || defined (IRIVER_H10_5GB)) && !defined(USE_ROCKBOX_USB) - return (button_status() & ~USBPOWER_BTN_IGNORE) != USBPOWER_BUTTON; + if (usb_charging_by_default) + { + /* Charging by default mode is ON. inverse power button state */ + return !((button_status() & ~USBPOWER_BTN_IGNORE) != USBPOWER_BUTTON) + } + /* Charging by default is OFF. return real status of power button */ + return ((button_status() & ~USBPOWER_BTN_IGNORE) != USBPOWER_BUTTON); #else - return (button_status() & ~USBPOWER_BTN_IGNORE) == USBPOWER_BUTTON; + if (usb_charging_by_default) + { + /* Charging by default mode is ON. inverse power button state */ + return !((button_status() & ~USBPOWER_BTN_IGNORE) == USBPOWER_BUTTON); + } + /* Charging by default is OFF. return real status of power button */ + return ((button_status() & ~USBPOWER_BTN_IGNORE) == USBPOWER_BUTTON); #endif }