Merge remote-tracking branch 'upstream/edge' into upstream-master
[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 6 * fast flash = halted
4a679a75
MM
7 * on = a block is being executed
8 */
9
68d16168 10#include "modules/robot/Conveyor.h"
61134a65
JM
11#include "SlowTicker.h"
12#include "Config.h"
7af0714f 13#include "checksumm.h"
8d54c34c 14#include "ConfigValue.h"
44e34b21 15#include "Gcode.h"
4e722c00
JM
16
17#define pause_led_pin_checksum CHECKSUM("pause_led_pin")
18#define play_led_pin_checksum CHECKSUM("play_led_pin")
19#define play_led_disable_checksum CHECKSUM("play_led_disable")
20
f1afd661 21PlayLed::PlayLed() {
f1afd661
JM
22 cnt= 0;
23}
4a679a75
MM
24
25void PlayLed::on_module_loaded()
26{
4e722c00
JM
27 if(THEKERNEL->config->value( play_led_disable_checksum )->by_default(false)->as_bool()) {
28 delete this;
29 return;
30 }
31
4a679a75 32 on_config_reload(this);
73706276 33
f1afd661 34 THEKERNEL->slow_ticker->attach(12, this, &PlayLed::led_tick);
4a679a75
MM
35}
36
4e722c00 37void PlayLed::on_config_reload(void *argument)
4a679a75
MM
38{
39 string ledpin = "4.28!";
40
347854ff
MM
41 ledpin = THEKERNEL->config->value( pause_led_pin_checksum )->by_default(ledpin)->as_string(); // check for pause_led_pin first
42 ledpin = THEKERNEL->config->value( play_led_pin_checksum )->by_default(ledpin)->as_string(); // override with play_led_pin if it's found
4a679a75 43
34bd2443 44 led.from_string(ledpin)->as_output()->set(false);
4a679a75
MM
45}
46
f1afd661 47uint32_t PlayLed::led_tick(uint32_t)
4a679a75 48{
73706276 49 if(THEKERNEL->is_halted()) {
f1afd661
JM
50 led.set(!led.get());
51 return 0;
52 }
4a679a75 53
373d0bf1 54 if(++cnt >= 6) { // 6 ticks ~ 500ms
f1afd661 55 cnt= 0;
35e7b158 56 led.set(!THEKERNEL->conveyor->is_queue_empty());
f1afd661
JM
57 }
58
59 return 0;
4a679a75 60}