#include #include // for NULL #include "lights.h" static pattern_t on_pattern [] = { { 1, 0x10 }, PATTERN_END }; static pattern_t blink_pattern[] = { { 1, 0x1 }, { 0, 0x2 }, { 1, 0x1 }, { 0, 0x8 }, { 1, 0x1 }, { 0, 0x8 }, PATTERN_END }; static pattern_t slow_pattern[] = { { 1, 0x1 }, { 0, 0x1F }, PATTERN_END }; static unsigned char light_mode, shutdown_in_progress; void init_control() { light_mode = 1; shutdown_in_progress = 0; short_press(); } void long_press_start() { shutdown_in_progress = 1; pattern_reload(); } void short_press() { if (++light_mode >= 2*N_PWMLED_MODES) light_mode = 0; pwmled_set_target(light_mode < N_PWMLED_MODES ? light_mode : light_mode - N_PWMLED_MODES); pattern_reload(); } void long_press() { shutdown_in_progress = 0; pattern_reload(); } pattern_t *pwmled_pattern_select() { if (shutdown_in_progress) return NULL; if (light_mode == 0) { return slow_pattern; } else if (light_mode < N_PWMLED_MODES) { return blink_pattern; } else { return on_pattern; } } pattern_t *status_led_pattern_select() { if (shutdown_in_progress) return on_pattern; return number_pattern(light_mode+1, 0); } #if 0 void brake_on() { braking = 1; gpio_set(0, 1); led_set_pattern(N_PWMLEDS, status_led_pattern_select()); led_set_pattern(0, pwmled0_pattern_select()); } void brake_off() { braking = 0; gpio_set(0, 0); led_set_pattern(N_PWMLEDS, status_led_pattern_select()); led_set_pattern(0, pwmled0_pattern_select()); } #endif