]> www.fi.muni.cz Git - tinyboard.git/blobdiff - projects/step-up/pwmled.c
Experimental step-up driver for chain of 5630 LEDs.
[tinyboard.git] / projects / step-up / pwmled.c
index b066c59e8824bd67e1f84e645ac95f9bda66dceb..2ede13b3026bec1ac80ef2d68bf755125ff045b2 100644 (file)
@@ -25,8 +25,7 @@ static uint16_t adc_max = MA_TO_ADC(30);
 
 static uint16_t targets[N_PWMLED_MODES] = {
        MA_TO_ADC( 2),
-       MA_TO_ADC( 8),
-       MA_TO_ADC(14),
+       MA_TO_ADC(10),
        MA_TO_ADC(20),
 };
 
@@ -46,18 +45,25 @@ void init_pwmled()
        state = ST_OFF;
 }
 
-void pwmled_set_mode(unsigned char mode)
+void pwmled_set_target(unsigned char mode)
+{
+       target = targets[mode];
+       mode_changed = 1;
+}
+
+void pwmled_on_off(unsigned char mode)
 {
        if (!ST_CAN_SET_MODE(state))
                return;
 
        if (mode) {
-               target = targets[mode - 1];
                state = ST_ON;
                mode_changed = 1;
+               need_pwmled_adc = 1;
                pwm_set(pwm_val);
        } else {
                state = ST_OFF;
+               need_pwmled_adc = 0;
                pwm_off();
        }
 }
@@ -69,6 +75,8 @@ static inline void pwmled_err()
 
        log_byte(0xF1);
        log_flush();
+
+       set_error(ERR_PWMLED);
 }
 
 
@@ -106,6 +114,7 @@ void pwmled_adc(uint16_t adcval)
        if (pwm_val >= PWM_MAX
                || (pwm_val > (2*PWM_MAX/3) && adcval < 0x08)) {
                pwmled_err();
+               need_pwmled_adc = 0;
                return;
        }