- pwmled_t *led = pwmleds + n;
-
- if (!ST_CAN_SET_MODE(led->state))
- return;
-
- if (led->mode) { // save the previous state
- led->mode_pwm[led->mode - 1] = led->pwm;
- led->err_sums[led->mode - 1] = led->err_sum;
- }
-
- led->mode = mode;
-
- if (mode > 0 && mode <= N_PWMLED_MODES) {
- led->target = adc_vals[n*N_PWMLED_MODES + mode - 1];
- led->state = ST_ON;
- led->pwm = led->mode_pwm[mode - 1];
- led->err_sum = led->err_sums[mode - 1];
- led->mode_changed = 1;
- pwm_set(n, led->pwm);
- } else {
- led->state = ST_OFF;
- pwm_off(n);
- }