5 * off = not paused, nothing to do
7 * on = a block is being executed
10 #include "PauseButton.h"
11 #include "modules/robot/Conveyor.h"
12 #include "SlowTicker.h"
15 #include "checksumm.h"
16 #include "ConfigValue.h"
19 #define pause_led_pin_checksum CHECKSUM("pause_led_pin")
20 #define play_led_pin_checksum CHECKSUM("play_led_pin")
21 #define play_led_disable_checksum CHECKSUM("play_led_disable")
25 void PlayLed::on_module_loaded()
27 if(THEKERNEL
->config
->value( play_led_disable_checksum
)->by_default(false)->as_bool()) {
32 //register_for_event(ON_PLAY);
33 //TODO: these two events happen in interrupt context and it's extremely important they don't last long. This should be done by checking the size of the queue once a second or something
34 //register_for_event(ON_BLOCK_BEGIN);
35 //register_for_event(ON_BLOCK_END);
37 on_config_reload(this);
39 THEKERNEL
->slow_ticker
->attach(4, this, &PlayLed::half_second_tick
);
42 void PlayLed::on_config_reload(void *argument
)
44 string ledpin
= "4.28!";
46 ledpin
= THEKERNEL
->config
->value( pause_led_pin_checksum
)->by_default(ledpin
)->as_string(); // check for pause_led_pin first
47 ledpin
= THEKERNEL
->config
->value( play_led_pin_checksum
)->by_default(ledpin
)->as_string(); // override with play_led_pin if it's found
49 led
.from_string(ledpin
)->as_output()->set(false);
52 void PlayLed::on_block_begin(void *argument
)
57 void PlayLed::on_block_end(void *argument
)
62 void PlayLed::on_play(void *argument
)
67 uint32_t PlayLed::half_second_tick(uint32_t)
69 if (THEKERNEL
->pauser
->paused())
71 else led
.set(!THEKERNEL
->conveyor
->is_queue_empty());