Prusa-MMU-Private
PrusaMultiMaterialUpgradev3firmwareforMK3SMK4
leds.h
Go to the documentation of this file.
1 #pragma once
3 #include "../config/config.h"
4 #include <stdint.h>
5 
6 namespace modules {
7 
19 namespace leds {
20 
23 enum Mode {
24  off,
25  on,
27  blink1
28 };
29 
31 enum Color {
32  red = 0,
33  green = 1
34 };
35 
37 class LED {
38 public:
39  constexpr inline LED() = default;
40 
43  void SetMode(leds::Mode mode);
44 
46  inline leds::Mode Mode() const { return (leds::Mode)state.mode; }
47 
50  bool Step(bool oddPeriod);
51 
53  inline bool On() const { return state.on; }
54 
55 private:
56  struct State {
57  uint8_t on : 1;
58  uint8_t mode : 2;
59  constexpr inline State()
60  : on(0)
61  , mode(leds::Mode::off) {}
62  };
63 
64  State state;
65 };
66 
68 class LEDs {
69 public:
70  constexpr inline LEDs() = default;
71 
73  void Step();
74 
76  inline constexpr uint8_t LedPairsCount() const { return ledPairs; }
77 
82  inline void SetMode(uint8_t slot, Color color, Mode mode) {
83  SetMode(slot * 2 + color, mode);
84  }
85 
89  inline void SetMode(uint8_t index, Mode mode) {
90  leds[index].SetMode(mode);
91  }
92 
96  inline leds::Mode Mode(uint8_t slot, Color color) {
97  return Mode(slot * 2 + color);
98  }
99 
102  inline leds::Mode Mode(uint8_t index) {
103  return leds[index].Mode();
104  }
105 
108  inline bool LedOn(uint8_t index) const {
109  return leds[index].On();
110  }
111 
115  inline bool LedOn(uint8_t slot, Color color) const {
116  return leds[slot * 2 + color].On();
117  }
118 
120  void SetPairButOffOthers(uint8_t activeSlot, modules::leds::Mode greenMode, modules::leds::Mode redMode);
121 
123  void SetAllOff();
124 
125 private:
126  constexpr static const uint8_t ledPairs = config::toolCount;
138  LED leds[ledPairs * 2];
139 
141  uint16_t cachedState = 0;
142 };
143 
145 extern LEDs leds;
146 
147 } // namespace LEDs
148 } // namespace modules
149 
150 namespace ml = modules::leds;
A single LED.
Definition: leds.h:37
leds::Mode Mode() const
Definition: leds.h:46
void SetMode(leds::Mode mode)
Definition: leds.cpp:11
bool Step(bool oddPeriod)
Definition: leds.cpp:29
bool On() const
Definition: leds.h:53
The main LEDs API takes care of the whole set of LEDs.
Definition: leds.h:68
bool LedOn(uint8_t index) const
Definition: leds.h:108
bool LedOn(uint8_t slot, Color color) const
Definition: leds.h:115
void SetMode(uint8_t slot, Color color, Mode mode)
Definition: leds.h:82
void SetAllOff()
Turn off all LEDs.
Definition: leds.cpp:64
constexpr uint8_t LedPairsCount() const
Definition: leds.h:76
void SetPairButOffOthers(uint8_t activeSlot, modules::leds::Mode greenMode, modules::leds::Mode redMode)
Sets active slot LEDs to some mode and turns off all the others.
Definition: leds.cpp:58
void Step()
step LED automaton
Definition: leds.cpp:44
leds::Mode Mode(uint8_t slot, Color color)
Definition: leds.h:96
leds::Mode Mode(uint8_t index)
Definition: leds.h:102
void SetMode(uint8_t index, Mode mode)
Definition: leds.h:89
static constexpr const uint8_t toolCount
Definition: config.h:24
The leds namespace provides all necessary facilities related to the logical model of the sets of LEDs...
Definition: leds.cpp:7
LEDs leds
The one and only instance of FINDA in the FW.
Definition: leds.cpp:9
Color
Enum of LEDs color - green or red.
Definition: leds.h:31
Mode
Definition: leds.h:23
@ blink0
start blinking at even periods
Definition: leds.h:26
@ blink1
start blinking at odd periods
Definition: leds.h:27
The modules namespace contains models of MMU's components.
Definition: command_base.h:8