refactor ON_HALT, add THEKERNEL->is_halted() for modules that just need to test it...
[clinton/Smoothieware.git] / src / modules / utils / PlayLed / PlayLed.cpp
CommitLineData
4a679a75
MM
1#include "PlayLed.h"
2
3/*
4 * LED indicator:
5 * off = not paused, nothing to do
f1afd661
JM
6 * slow flash = paused
7 * fast flash = halted
4a679a75
MM
8 * on = a block is being executed
9 */
10
11#include "PauseButton.h"
68d16168 12#include "modules/robot/Conveyor.h"
61134a65
JM
13#include "SlowTicker.h"
14#include "Config.h"
15#include "Pauser.h"
7af0714f 16#include "checksumm.h"
8d54c34c 17#include "ConfigValue.h"
44e34b21 18#include "Gcode.h"
4e722c00
JM
19
20#define pause_led_pin_checksum CHECKSUM("pause_led_pin")
21#define play_led_pin_checksum CHECKSUM("play_led_pin")
22#define play_led_disable_checksum CHECKSUM("play_led_disable")
23
f1afd661 24PlayLed::PlayLed() {
f1afd661
JM
25 cnt= 0;
26}
4a679a75
MM
27
28void PlayLed::on_module_loaded()
29{
4e722c00
JM
30 if(THEKERNEL->config->value( play_led_disable_checksum )->by_default(false)->as_bool()) {
31 delete this;
32 return;
33 }
34
4a679a75 35 on_config_reload(this);
73706276 36
f1afd661 37 THEKERNEL->slow_ticker->attach(12, this, &PlayLed::led_tick);
4a679a75
MM
38}
39
4e722c00 40void PlayLed::on_config_reload(void *argument)
4a679a75
MM
41{
42 string ledpin = "4.28!";
43
347854ff
MM
44 ledpin = THEKERNEL->config->value( pause_led_pin_checksum )->by_default(ledpin)->as_string(); // check for pause_led_pin first
45 ledpin = THEKERNEL->config->value( play_led_pin_checksum )->by_default(ledpin)->as_string(); // override with play_led_pin if it's found
4a679a75 46
34bd2443 47 led.from_string(ledpin)->as_output()->set(false);
4a679a75
MM
48}
49
f1afd661 50uint32_t PlayLed::led_tick(uint32_t)
4a679a75 51{
73706276 52 if(THEKERNEL->is_halted()) {
f1afd661
JM
53 led.set(!led.get());
54 return 0;
55 }
4a679a75 56
373d0bf1 57 if(++cnt >= 6) { // 6 ticks ~ 500ms
f1afd661 58 cnt= 0;
4a679a75 59
f1afd661
JM
60 if (THEKERNEL->pauser->paused()) {
61 led.set(!led.get());
62 } else {
63 led.set(!THEKERNEL->conveyor->is_queue_empty());
64 }
65 }
66
67 return 0;
4a679a75 68}