#include "ledctl.h" enum { MODE_SOLID_RED, MODE_SOLID_GREEN, MODE_SOLID_BLUE, MODE_SOLID_YELLOW, MODE_RAINBOW, } mode; int brightness = 7; int enabled = 0; int current_brightness = 0; const char *mode_string[] = { [MODE_SOLID_RED] = "#FF0000", [MODE_SOLID_GREEN] = "#00FF00", [MODE_SOLID_BLUE] = "#0000FF", [MODE_SOLID_YELLOW] = "#FFFF00", [MODE_RAINBOW] = "{\"type\":\"rainbow\", \"wait\":50}", }; enum { STATE_DEFAULT, STATE_COLOR_SELECT, STATE_BRIGHTNESS_SELECT, } state = STATE_DEFAULT; void update_brightness() { if (!enabled) current_brightness = 0; else current_brightness = brightness > 7 ? 100 : (1 << (brightness - 1)); bc_radio_pub_int("led/brightness/set", ¤t_brightness); } void update_mode() { if (mode == MODE_RAINBOW) bc_radio_pub_string("led/effect/set", mode_string[mode]); else bc_radio_pub_string("led/color/set", mode_string[mode]); } void click_left() { switch (state) { case STATE_DEFAULT: enabled = 1; update_brightness(); break; case STATE_BRIGHTNESS_SELECT: if (brightness <= 8) brightness++; update_brightness(); break; case STATE_COLOR_SELECT: if (mode >= MODE_RAINBOW) mode = MODE_SOLID_RED; else mode++; update_mode(); break; default: break; } } void click_right() { switch (state) { case STATE_DEFAULT: enabled = 0; update_brightness(); break; case STATE_BRIGHTNESS_SELECT: if (brightness >= 1) brightness--; update_brightness(); break; case STATE_COLOR_SELECT: if (mode <= MODE_SOLID_RED) mode = MODE_RAINBOW; else mode--; update_mode(); break; default: break; } } void hold_left() { switch (state) { case STATE_DEFAULT: state = STATE_BRIGHTNESS_SELECT; // TODO update image break; case STATE_COLOR_SELECT: state = STATE_COLOR_SELECT; // TODO break; case STATE_BRIGHTNESS_SELECT: state = STATE_DEFAULT; // TODO break; default: break; } } void hold_right() { switch (state) { case STATE_DEFAULT: state = STATE_COLOR_SELECT; // TODO update image break; case STATE_COLOR_SELECT: state = STATE_DEFAULT; // TODO break; case STATE_BRIGHTNESS_SELECT: state = STATE_BRIGHTNESS_SELECT; // TODO break; default: break; } }