X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=firmware%2Fcontrol.c;h=3012ba65856aaa02d9e2939ace37ed2463863da0;hp=a789acce1b7a57827d3328b51dbd32879cf1ea0b;hb=94524330d5709845fe0bbe8562fd68deedcb818c;hpb=b8e8d71d31246f04d261e8cd71055f4c980a039a diff --git a/firmware/control.c b/firmware/control.c index a789acc..3012ba6 100644 --- a/firmware/control.c +++ b/firmware/control.c @@ -28,12 +28,6 @@ static pattern_t panic_pattern[] = { PATTERN_END }; -static pattern_t brake_pattern [] = { - { 4, D_2 }, - { 3, D_8 }, - PATTERN_END -}; - static pattern_t slow_pattern[] = { { PWM_PAT(1, 0, 0), D_1 }, { PWM_PAT(0, 0, 1), D_1 }, @@ -70,13 +64,27 @@ pattern_t on_pattern[] = { PATTERN_END }; -static unsigned char dim_mode, towbar_mode, braking; +// #define TEST_PATTERN 1 +#ifdef TEST_PATTERN +pattern_t test_pattern[] = { + { PWM_PAT(1, 0, 0), D_13 }, + { PWM_PAT(2, 0, 0), D_13 }, + { PWM_PAT(0, 0, 1), D_13 }, + { PWM_PAT(0, 0, 2), D_13 }, + PATTERN_END +}; +#endif + +volatile unsigned char braking; +static unsigned char dim_mode, towbar_mode; void init_control() { dim_mode = 0; towbar_mode = 0; braking = 0; + + pwmled_select_brightness(); } void brake_on() @@ -84,7 +92,7 @@ void brake_on() braking = 1; gpio_set(0, 1); led_set_pattern(N_STATUS_LED, status_led_pattern_select()); - led_set_pattern(0, pwmled_pattern_select()); + pwmleds_update_mode(); } void brake_off() @@ -92,12 +100,13 @@ void brake_off() braking = 0; gpio_set(0, 0); led_set_pattern(N_STATUS_LED, status_led_pattern_select()); - led_set_pattern(0, pwmled_pattern_select()); + pwmleds_update_mode(); } void toggle_dim_mode() { dim_mode = !dim_mode; + pwmled_select_brightness(); pattern_reload(); } @@ -109,15 +118,12 @@ void set_panic_mode() pattern_t *pwmled_pattern_select() { +#ifdef TEST_PATTERN + return tmp_pattern; +#endif if (battery_critical) return slow_pattern; - if (towbar_mode) - return NULL; - - if (braking) - return brake_pattern; - switch (ambient_zone) { case 0: return night_pattern; case 1: @@ -169,3 +175,23 @@ pattern_t *laser_pattern_select() else return NULL; } + +void pwmled_select_brightness() +{ + uint16_t brightness = PWMLED_BRIGHTNESS(0, 2, 1, 0, 2); // default + + if (battery_critical) { + brightness = PWMLED_BRIGHTNESS(0, 0, 0, 0, 0); + } else if (ambient_zone < 2) { + if (dim_mode) + brightness = PWMLED_BRIGHTNESS(0, 1, 0, 0, 1); + else + brightness = PWMLED_BRIGHTNESS(0, 2, 1, 0, 2); + } else if (ambient_zone == 2) { + brightness = PWMLED_BRIGHTNESS(1, 3, 2, 1, 3); + } else if (ambient_zone == 3) { + brightness = PWMLED_BRIGHTNESS(2, 4, 2, 2, 4); + } + + pwmled_set_brightness(brightness); +}