~toykeeper/flashlight-firmware/fsm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Fireflies ROT66 G2 config options for Anduril
// Copyright (C) 2019-2023 Selene ToyKeeper
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once

#include "cfg-ff-rot66.h"
#undef MODEL_NUMBER
#define MODEL_NUMBER "0413"

// if the "low" mode was disabled, turn it back on
#ifdef INDICATOR_LED_SKIP_LOW
#undef INDICATOR_LED_SKIP_LOW
#endif

// lockout: blinking (3), off: low (1)
#ifdef INDICATOR_LED_DEFAULT_MODE
#undef INDICATOR_LED_DEFAULT_MODE
#endif
#define INDICATOR_LED_DEFAULT_MODE ((3<<2) + 1)

// the button is *not* visible while main LEDs are on
#undef USE_INDICATOR_LED_WHILE_RAMPING

// ramp shape is different than original ROT66
// 1x7135: 150 lm
// Nx7135: 1200 lm
// FET: 4500 lm
// ../../../bin/level_calc.py 7.0 3 150 7135 1 4 180.16 7135 8 1 1374.48 FET 1 10 4000
// (plus some manual tweaks)
#undef PWM1_LEVELS
#undef PWM2_LEVELS
#undef PWM3_LEVELS
#define PWM1_LEVELS 1,1,2,3,3,4,4,5,6,7,7,8,9,10,11,12,16,17,18,19,20,21,22,24,26,28,30,32,35,37,40,42,45,48,51,55,58,62,65,69,74,78,83,87,92,98,103,109,115,121,128,134,142,149,157,165,173,182,191,201,211,221,232,243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0
#define PWM2_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,11,13,14,16,18,20,22,24,26,28,30,33,35,38,41,43,46,49,52,55,59,62,66,69,73,77,81,85,89,94,98,103,108,113,118,124,129,135,141,147,153,160,166,173,180,188,195,203,211,219,228,237,246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0
#define PWM3_LEVELS 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,11,17,23,29,36,42,49,56,63,71,78,86,94,102,111,119,128,137,147,156,166,176,187,197,208,219,231,243,255

#undef MAX_1x7135
#undef MAX_Nx7135
#define MAX_1x7135 65  // ~150 lm
#define MAX_Nx7135 120  // ~1200 m
#undef HALFSPEED_LEVEL
#undef QUARTERSPEED_LEVEL
#define HALFSPEED_LEVEL 17
#define QUARTERSPEED_LEVEL 6

// higher floor than default, and stop at highest regulated level
#define RAMP_SMOOTH_FLOOR 1   // ~0.3 lm
#define RAMP_SMOOTH_CEIL  MAX_Nx7135  // ~1200 lm
// 10, 28, 46, [65], 83, 101, [120]
#define RAMP_DISCRETE_FLOOR 10
#define RAMP_DISCRETE_CEIL  MAX_Nx7135
#define RAMP_DISCRETE_STEPS 7

// safe limit max regulated power
// 10 37 65 92 [120]
#define SIMPLE_UI_FLOOR RAMP_DISCRETE_FLOOR
#define SIMPLE_UI_CEIL MAX_Nx7135
#define SIMPLE_UI_STEPS 5