示例#1
0
文件: user.c 项目: Wordclock/firmware
/**
 * @brief Handles the given user command
 *
 * This handles the given user command (user_command_t) either by processing
 * it directly, or by passing it over to the actual handler using
 * UserState_HandleUserCommand().
 *
 * g_eepromSaveDelay and g_checkIfAutoOffDelay get reset every time this
 * function is called to make sure the appropriate functionality works as
 * intended.
 *
 * @param user_command The user command that should be handled
 *
 * @see UserState_HandleUserCommand()
 * @see g_eepromSaveDelay
 * @see g_checkIfAutoOffDelay
 */
void handle_user_command(user_command_t user_command)
{

    if (UC_ONOFF == user_command) {

        log_state("OF\n");

        if (user_power_state < UPS_AUTO_OFF) {

            user_power_state = UPS_MANUAL_OFF;
            pwm_off();

        } else {

            if (user_power_state == UPS_MANUAL_OFF) {

                user_power_state = UPS_NORMAL_ON;

            } else {

                user_power_state = UPS_OVERRIDE_ON;

            }

            pwm_on();
            user_setNewTime(NULL);

        }

        preferences_save();

    } else {

        int8_t i;
        bool handled = false;

        for (i = g_topOfStack - 1; i >= 0 && !handled; --i) {

            handled |= UserState_HandleUserCommand(g_stateStack[i], user_command);

        }

        if (!handled) {

            if (UC_BRIGHTNESS_UP == user_command) {

                log_state("B+\n");
                pwm_increase_brightness();

            } else if (UC_BRIGHTNESS_DOWN == user_command) {

                log_state("B-\n");
                pwm_decrease_brightness();

            } else if (UC_NORMAL_MODE == user_command) {

                addSubState(-1, MS_normalMode, (void*)1);

            } else if (UC_SET_TIME == user_command) {

                addState(MS_setSystemTime, NULL);

            } else if (UC_SET_ONOFF_TIMES == user_command) {

                addState(MS_setOnOffTime, NULL);

            } else if (UC_DEMO_MODE == user_command) {

                menu_state_t curTop = user_get_current_menu_state();

                log_state("BS\n");

                if (MS_demoMode == curTop) {

                    quitMyself(MS_demoMode, NULL);

                } else {

                    addState(MS_demoMode, NULL);

                }

            } else if (UC_CALIB_BRIGHTNESS == user_command) {

                pwm_modifyLdrBrightness2pwmStep();

                // Indicate the change to user
                if (pwm_is_enabled()) {

                    pwm_off();
                    _delay_ms(USER_VISUAL_INDICATION_TOGGLE_MS);
                    pwm_on();

                }

            } else if (UC_PULSE_MODE == user_command) {

                menu_state_t curTop = user_get_current_menu_state();

                log_state("PLS\n");

                if (MS_pulse == curTop) {

                    leaveSubState(g_topOfStack - 1);

                } else {

                    if ((MS_normalMode == curTop)
                    #if (ENABLE_RGB_SUPPORT == 1)
                        || (MS_hueMode == curTop)
                    #endif
                    ) {

                        addState(MS_pulse, NULL);

                    }

                }

                DISPLAY_SPECIAL_USER_COMMANDS_HANDLER

                #if (ENABLE_RGB_SUPPORT == 1)

                    } else if (UC_HUE_MODE == user_command) {

                        log_state("HM");

                        addSubState(-1, MS_hueMode, NULL);

                #endif

                #if (ENABLE_DCF_SUPPORT == 1)

                    } else if (UC_DCF_GET_TIME == user_command) {

                        log_state("DCF\n");

                        dcf77_enable();

                #endif

                #if (ENABLE_AMBILIGHT_SUPPORT == 1)

                    } else if (UC_AMBILIGHT == user_command) {

                        log_state("AL\n");

                        PIN(USER_AMBILIGHT) |= _BV(BIT(USER_AMBILIGHT));

                #endif

                #if (ENABLE_BLUETOOTH_SUPPORT == 1)

                    } else if (UC_BLUETOOTH == user_command) {

                        log_state("BT\n");

                        PIN(USER_BLUETOOTH) |= _BV(BIT(USER_BLUETOOTH));

                #endif

                #if (ENABLE_AUXPOWER_SUPPORT == 1)

                    } else if (UC_AUXPOWER == user_command) {

                        log_state("AUX\n");

                        PIN(USER_AUXPOWER) |= _BV(BIT(USER_AUXPOWER));

                #endif

                    } else {

                        return;

                    }

        }
示例#2
0
void handle_apply (GtkWidget *propertybox, gint page_num, gpointer data)
{
  GtkWidget *radio_keyboard;
  GtkWidget *radio_mouse;
  GtkWidget *check_hide_cursor;
  GtkWidget *check_lazy_dragging;
  GtkWidget *check_score_time;
  GtkWidget *scroll_sensitivity;
  GtkAdjustment *adjustment;

  if (page_num == 0 /* general */ )
    {
      /* get widgets */
      check_score_time = glade_xml_get_widget (pref_xml, "check_score_time");

      /* set new values */
      preferences->score_time_enabled =
	gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_score_time));
    }
  else if (page_num == 1 /* control */ )
    {
      /* get widgets */
      radio_keyboard = glade_xml_get_widget (pref_xml, "radio_keyboard");
      radio_mouse = glade_xml_get_widget (pref_xml, "radio_mouse");
      check_hide_cursor =
	glade_xml_get_widget (pref_xml, "check_hide_cursor");
      check_lazy_dragging =
	glade_xml_get_widget (pref_xml, "check_lazy_dragging");
      scroll_sensitivity =
	glade_xml_get_widget (pref_xml, "scroll_sensitivity");
      adjustment = gtk_range_get_adjustment (GTK_RANGE (scroll_sensitivity));

      /* switch keyboard/mouse control if neccessary */
      if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_mouse)))
	{
	  if (!preferences->mouse_control)
	    {
	      board_set_mouse_control ();
	    }
	}
      else
	{
	  if (!preferences->keyboard_control)
	    {
	      board_set_keyboard_control ();
	    }
	}

      /* set new values */
      preferences->mouse_control =
	gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_mouse));
      preferences->keyboard_control =
	gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio_keyboard));
      preferences->hide_cursor =
	gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_hide_cursor));
      preferences->lazy_dragging =
	gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
				      (check_lazy_dragging));
      preferences->mouse_sensitivity = (gint) (adjustment->value * 2);
    }
  else if (page_num == -1 /* all */ )
    {
      /* save preferences */
      preferences_save ();
    }
}