aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hwdef-emisar-2ch-fet.c26
-rw-r--r--hwdef-emisar-2ch.c26
-rw-r--r--hwdef-emisar-d4.c14
-rw-r--r--hwdef-emisar-d4sv2.c18
-rw-r--r--hwdef-emisar-d4v2-nofet.c14
-rw-r--r--hwdef-emisar-d4v2.c16
-rw-r--r--hwdef-noctigon-dm11-boost.c18
-rw-r--r--hwdef-noctigon-k1.c20
-rw-r--r--hwdef-noctigon-kr4-nofet.c18
-rw-r--r--hwdef-noctigon-kr4.c18
-rw-r--r--hwdef-sofirn-lt1s-pro.c62
11 files changed, 95 insertions, 155 deletions
diff --git a/hwdef-emisar-2ch-fet.c b/hwdef-emisar-2ch-fet.c
index 7cf48d3..caf579d 100644
--- a/hwdef-emisar-2ch-fet.c
+++ b/hwdef-emisar-2ch-fet.c
@@ -7,6 +7,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_ch1(uint8_t level);
void set_level_ch2(uint8_t level);
void set_level_both(uint8_t level);
@@ -92,11 +94,11 @@ void set_pwms(uint8_t ch1_pwm, uint8_t ch2_pwm, uint8_t ch3_pwm, uint16_t top) {
if (! was_on) PWM_CNT = 0;
}
-void set_level_ch1(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, 0, PWM_TOP_INIT);
+void set_level_zero() {
+ return set_pwms(0, 0, 0, PWM_TOP_INIT);
+}
- level --;
+void set_level_ch1(uint8_t level) {
uint8_t pwm1 = PWM_GET8 (pwm1_levels, level);
uint8_t pwm3 = PWM_GET8 (pwm2_levels, level);
uint16_t top = PWM_GET16(pwm3_levels, level);
@@ -104,20 +106,12 @@ void set_level_ch1(uint8_t level) {
}
void set_level_ch2(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, 0, PWM_TOP_INIT);
-
- level --;
uint8_t pwm2 = PWM_GET8 (pwm4_levels, level);
uint16_t top = PWM_GET16(pwm5_levels, level);
set_pwms(0, pwm2, 0, top);
}
void set_level_both(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, 0, PWM_TOP_INIT);
-
- level --;
uint8_t pwm1 = PWM_GET8 (pwm1_levels, level);
uint8_t pwm3 = PWM_GET8 (pwm2_levels, level);
uint16_t top = PWM_GET16(pwm3_levels, level);
@@ -125,10 +119,6 @@ void set_level_both(uint8_t level) {
}
void set_level_blend(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, 0, PWM_TOP_INIT);
-
- level --;
uint16_t pwm1, pwm2;
uint8_t pwm3 = PWM_GET8 (pwm2_levels, level); // DD FET
//uint16_t brightness = PWM_GET8 (pwm1_levels, level) << 1;
@@ -142,10 +132,6 @@ void set_level_blend(uint8_t level) {
}
void set_level_auto(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, 0, PWM_TOP_INIT);
-
- level --;
uint16_t pwm1, pwm2;
uint8_t brightness = PWM_GET8 (pwm4_levels, level);
uint16_t top = PWM_GET16(pwm5_levels, level);
diff --git a/hwdef-emisar-2ch.c b/hwdef-emisar-2ch.c
index 7955cf6..31d27af 100644
--- a/hwdef-emisar-2ch.c
+++ b/hwdef-emisar-2ch.c
@@ -7,6 +7,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_ch1(uint8_t level);
void set_level_ch2(uint8_t level);
void set_level_both(uint8_t level);
@@ -90,41 +92,29 @@ void set_pwms(uint16_t ch1_pwm, uint16_t ch2_pwm, uint16_t top) {
if (! was_on) PWM_CNT = 0;
}
-void set_level_ch1(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, PWM_TOP_INIT);
+void set_level_zero() {
+ return set_pwms(0, 0, PWM_TOP_INIT);
+}
- level --;
+void set_level_ch1(uint8_t level) {
uint16_t pwm = PWM_GET(pwm1_levels, level);
uint16_t top = PWM_GET(pwm_tops, level);
set_pwms(pwm, 0, top);
}
void set_level_ch2(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, PWM_TOP_INIT);
-
- level --;
uint16_t pwm = PWM_GET(pwm1_levels, level);
uint16_t top = PWM_GET(pwm_tops, level);
set_pwms(0, pwm, top);
}
void set_level_both(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, PWM_TOP_INIT);
-
- level --;
uint16_t pwm = PWM_GET(pwm1_levels, level);
uint16_t top = PWM_GET(pwm_tops, level);
set_pwms(pwm, pwm, top);
}
void set_level_blend(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, PWM_TOP_INIT);
-
- level --;
PWM_DATATYPE ch1_pwm, ch2_pwm;
PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level);
PWM_DATATYPE top = PWM_GET(pwm_tops, level);
@@ -136,10 +126,6 @@ void set_level_blend(uint8_t level) {
}
void set_level_auto(uint8_t level) {
- if (0 == level)
- return set_pwms(0, 0, PWM_TOP_INIT);
-
- level --;
PWM_DATATYPE ch1_pwm, ch2_pwm;
PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level);
PWM_DATATYPE top = PWM_GET(pwm_tops, level);
diff --git a/hwdef-emisar-d4.c b/hwdef-emisar-d4.c
index 6069530..972f682 100644
--- a/hwdef-emisar-d4.c
+++ b/hwdef-emisar-d4.c
@@ -11,6 +11,8 @@
#define AUX_CHANNELS
#endif
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -24,17 +26,15 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ CH2_PWM = 0;
+}
+
// TODO: implement delta-sigma modulation for better low modes
// single set of LEDs with 2 stacked power channels, DDFET+1 or DDFET+linear
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- CH2_PWM = 0;
- return;
- }
-
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
PWM_DATATYPE ch2_pwm = PWM_GET(pwm2_levels, level);
diff --git a/hwdef-emisar-d4sv2.c b/hwdef-emisar-d4sv2.c
index c19054e..6399fb8 100644
--- a/hwdef-emisar-d4sv2.c
+++ b/hwdef-emisar-d4sv2.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,17 +21,15 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ CH2_PWM = 0;
+ CH3_PWM = 0;
+ PWM_CNT = 0; // reset phase
+}
+
// single set of LEDs with 3 stacked power channels, DDFET+3+1
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- CH2_PWM = 0;
- CH3_PWM = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
PWM_DATATYPE ch2_pwm = PWM_GET(pwm2_levels, level);
PWM_DATATYPE ch3_pwm = PWM_GET(pwm3_levels, level);
diff --git a/hwdef-emisar-d4v2-nofet.c b/hwdef-emisar-d4v2-nofet.c
index 60d80ea..24477a7 100644
--- a/hwdef-emisar-d4v2-nofet.c
+++ b/hwdef-emisar-d4v2-nofet.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,15 +21,13 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ PWM_CNT = 0; // reset phase
+}
+
// single set of LEDs with just a 1x7135 chip, max 350 mA or ~130 lm
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
uint16_t top = PWM_GET16(pwm_tops, level);
diff --git a/hwdef-emisar-d4v2.c b/hwdef-emisar-d4v2.c
index ada4eb8..026b30d 100644
--- a/hwdef-emisar-d4v2.c
+++ b/hwdef-emisar-d4v2.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,16 +21,14 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ CH2_PWM = 0;
+ PWM_CNT = 0; // reset phase
+}
+
// single set of LEDs with 2 stacked power channels, DDFET+1 or DDFET+linear
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- CH2_PWM = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
PWM_DATATYPE ch2_pwm = PWM_GET(pwm2_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
diff --git a/hwdef-noctigon-dm11-boost.c b/hwdef-noctigon-dm11-boost.c
index 006cbf8..08e2798 100644
--- a/hwdef-noctigon-dm11-boost.c
+++ b/hwdef-noctigon-dm11-boost.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,20 +21,18 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ PWM_CNT = 0; // reset phase
+ CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN ); // disable opamp
+ CH1_ENABLE_PORT2 &= ~(1 << CH1_ENABLE_PIN2); // disable PMIC
+}
+
// single set of LEDs with single power channel, boost
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- PWM_CNT = 0; // reset phase
- CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN ); // disable opamp
- CH1_ENABLE_PORT2 &= ~(1 << CH1_ENABLE_PIN2); // disable PMIC
- return;
- }
-
CH1_ENABLE_PORT |= (1 << CH1_ENABLE_PIN ); // enable opamp
CH1_ENABLE_PORT2 |= (1 << CH1_ENABLE_PIN2); // enable PMIC
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
uint16_t top = PWM_GET16(pwm_tops, level);
diff --git a/hwdef-noctigon-k1.c b/hwdef-noctigon-k1.c
index 5063fd5..5d61860 100644
--- a/hwdef-noctigon-k1.c
+++ b/hwdef-noctigon-k1.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,19 +21,17 @@ Channel channels[] = {
};
-// single set of LEDs with 2 stacked power channels, linear + DD FET
-void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- //CH2_PWM = 0;
- //PWM_CNT = 0; // reset phase
- CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
- return;
- }
+void set_level_zero() {
+ CH1_PWM = 0;
+ //CH2_PWM = 0;
+ //PWM_CNT = 0; // reset phase
+ CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
+}
+// single LED with 1 power channels, linear
+void set_level_main(uint8_t level) {
CH1_ENABLE_PORT |= (1 << CH1_ENABLE_PIN); // enable opamp
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
//PWM_DATATYPE ch2_pwm = PWM_GET(pwm2_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
diff --git a/hwdef-noctigon-kr4-nofet.c b/hwdef-noctigon-kr4-nofet.c
index 8ce9525..0492def 100644
--- a/hwdef-noctigon-kr4-nofet.c
+++ b/hwdef-noctigon-kr4-nofet.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,19 +21,17 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ CH2_PWM = 0;
+ PWM_CNT = 0; // reset phase
+ CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
+}
+
// single set of LEDs with linear power channel
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- CH2_PWM = 0;
- PWM_CNT = 0; // reset phase
- CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
- return;
- }
-
CH1_ENABLE_PORT |= (1 << CH1_ENABLE_PIN); // enable opamp
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
uint16_t top = PWM_GET16(pwm_tops, level);
diff --git a/hwdef-noctigon-kr4.c b/hwdef-noctigon-kr4.c
index e49ff69..b721bdc 100644
--- a/hwdef-noctigon-kr4.c
+++ b/hwdef-noctigon-kr4.c
@@ -6,6 +6,8 @@
#include "chan-rgbaux.c"
+void set_level_zero();
+
void set_level_main(uint8_t level);
bool gradual_tick_main(uint8_t gt);
@@ -19,19 +21,17 @@ Channel channels[] = {
};
+void set_level_zero() {
+ CH1_PWM = 0;
+ CH2_PWM = 0;
+ PWM_CNT = 0; // reset phase
+ CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
+}
+
// single set of LEDs with 2 stacked power channels, linear + DD FET
void set_level_main(uint8_t level) {
- if (level == 0) {
- CH1_PWM = 0;
- CH2_PWM = 0;
- PWM_CNT = 0; // reset phase
- CH1_ENABLE_PORT &= ~(1 << CH1_ENABLE_PIN); // disable opamp
- return;
- }
-
CH1_ENABLE_PORT |= (1 << CH1_ENABLE_PIN); // enable opamp
- level --; // PWM array index = level - 1
PWM_DATATYPE ch1_pwm = PWM_GET(pwm1_levels, level);
PWM_DATATYPE ch2_pwm = PWM_GET(pwm2_levels, level);
// pulse frequency modulation, a.k.a. dynamic PWM
diff --git a/hwdef-sofirn-lt1s-pro.c b/hwdef-sofirn-lt1s-pro.c
index 1359c29..90c2c07 100644
--- a/hwdef-sofirn-lt1s-pro.c
+++ b/hwdef-sofirn-lt1s-pro.c
@@ -4,6 +4,8 @@
#pragma once
+void set_level_zero();
+
void set_level_red(uint8_t level);
void set_level_white_blend(uint8_t level);
void set_level_auto_2ch_blend(uint8_t level);
@@ -76,34 +78,26 @@ void calc_auto_3ch_blend(
}
+void set_level_zero() {
+ WARM_PWM_LVL = 0;
+ COOL_PWM_LVL = 0;
+ RED_PWM_LVL = 0;
+ PWM_CNT = 0; // reset phase
+}
+
// single set of LEDs with 1 power channel and dynamic PWM
void set_level_red(uint8_t level) {
- if (level == 0) {
- RED_PWM_LVL = 0;
- PWM_CNT = 0; // reset phase
- } else {
- level --; // PWM array index = level - 1
- RED_PWM_LVL = PWM_GET(pwm1_levels, level);
- // pulse frequency modulation, a.k.a. dynamic PWM
- PWM_TOP = PWM_GET(pwm_tops, level);
- // force reset phase when turning on from zero
- // (because otherwise the initial response is inconsistent)
- if (! actual_level) PWM_CNT = 0;
- }
+ RED_PWM_LVL = PWM_GET(pwm1_levels, level);
+ // pulse frequency modulation, a.k.a. dynamic PWM
+ PWM_TOP = PWM_GET(pwm_tops, level);
+ // force reset phase when turning on from zero
+ // (because otherwise the initial response is inconsistent)
+ if (! actual_level) PWM_CNT = 0;
}
// warm + cool blend w/ dynamic PWM
void set_level_white_blend(uint8_t level) {
- if (level == 0) {
- WARM_PWM_LVL = 0;
- COOL_PWM_LVL = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
-
PWM_DATATYPE warm_PWM, cool_PWM;
PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level);
PWM_DATATYPE top = PWM_GET(pwm_tops, level);
@@ -120,15 +114,6 @@ void set_level_white_blend(uint8_t level) {
// same as white blend, but tint is calculated from the ramp level
void set_level_auto_2ch_blend(uint8_t level) {
- if (level == 0) {
- WARM_PWM_LVL = 0;
- COOL_PWM_LVL = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
-
PWM_DATATYPE warm_PWM, cool_PWM;
PWM_DATATYPE brightness = PWM_GET(pwm1_levels, level);
PWM_DATATYPE top = PWM_GET(pwm_tops, level);
@@ -145,16 +130,6 @@ void set_level_auto_2ch_blend(uint8_t level) {
// "auto tint" channel mode with dynamic PWM
void set_level_auto_3ch_blend(uint8_t level) {
- if (level == 0) {
- WARM_PWM_LVL = 0;
- COOL_PWM_LVL = 0;
- RED_PWM_LVL = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
-
PWM_DATATYPE a, b, c;
calc_auto_3ch_blend(&a, &b, &c, level);
@@ -176,13 +151,6 @@ void set_level_red_white_blend(uint8_t level) {
set_level_white_blend(level);
channel_mode = CM_WHITE_RED;
- if (level == 0) {
- RED_PWM_LVL = 0;
- PWM_CNT = 0; // reset phase
- return;
- }
-
- level --; // PWM array index = level - 1
PWM_DATATYPE vpwm = PWM_GET(pwm1_levels, level);
// set the red LED as a ratio of the white output level