/** * Datapipe trigger for the charger state * * @param data TRUE if the charger was connected, * FALSE if the charger was disconnected */ static void charger_state_trigger(gconstpointer const data) { submode_t submode = mce_get_submode_int32(); charger_connected = GPOINTER_TO_INT(data); if ((submode & MCE_SOFTOFF_SUBMODE) != 0) { if (softoff_charger_connect_policy == SOFTOFF_CHARGER_CONNECT_WAKEUP) { request_soft_poweron(); } } }
/** * Logic for long key press * * @return TRUE on success, FALSE on failure */ static gboolean handle_longpress(void) { system_state_t state = datapipe_get_gint(system_state_pipe); alarm_ui_state_t alarm_ui_state = datapipe_get_gint(alarm_ui_state_pipe); submode_t submode = mce_get_submode_int32(); gboolean status = TRUE; /* Ignore keypress if the alarm UI is visible */ if ((alarm_ui_state == MCE_ALARM_UI_VISIBLE_INT32) || (alarm_ui_state == MCE_ALARM_UI_RINGING_INT32)) goto EXIT; /* Ignore if we're already shutting down/rebooting */ switch (state) { case MCE_STATE_SHUTDOWN: case MCE_STATE_REBOOT: status = FALSE; break; case MCE_STATE_ACTDEAD: request_powerup(); break; case MCE_STATE_USER: /* If softoff is enabled, wake up * Otherwise, perform long press action */ if ((submode & MCE_SOFTOFF_SUBMODE)) { request_soft_poweron(); } else { generic_powerkey_handler(longpressaction, longpresssignal); } break; default: /* If no special cases are needed, * just do a regular shutdown */ mce_log(LL_WARN, "Requesting shutdown; state: %d", state); request_normal_shutdown(); break; } EXIT: return status; }