X-Git-Url: https://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/788e58098eeb7fa567a2a3d380289477b40b9098..18ca10a33a1ecb389a234eceea3631f2751aea6d:/src/modules/robot/Conveyor.h diff --git a/src/modules/robot/Conveyor.h b/src/modules/robot/Conveyor.h index 936a7501..14181889 100644 --- a/src/modules/robot/Conveyor.h +++ b/src/modules/robot/Conveyor.h @@ -5,61 +5,54 @@ You should have received a copy of the GNU General Public License along with Smoothie. If not, see . */ -#ifndef CONVEYOR_H -#define CONVEYOR_H +#pragma once #include "libs/Module.h" -#include "HeapRing.h" +#include "BlockQueue.h" -using namespace std; -#include -#include - -class Gcode; class Block; class Conveyor : public Module { public: Conveyor(); + void start(uint8_t n_actuators); void on_module_loaded(void); void on_idle(void *); - void on_main_loop(void *); - void on_block_end(void *); void on_halt(void *); - void on_config_reload(void *); - - void notify_block_finished(Block *); - void wait_for_empty_queue(); + void wait_for_idle(bool wait_for_motors=true); bool is_queue_empty() { return queue.is_empty(); }; bool is_queue_full() { return queue.is_full(); }; + bool is_idle() const; - void ensure_running(void); - - void append_gcode(Gcode *); - void queue_head_block(void); + // returns next available block writes it to block and returns true + bool get_next_block(Block **block); + void block_finished(); void dump_queue(void); void flush_queue(void); - bool is_flushing() const { return flush; } float get_current_feedrate() const { return current_feedrate; } + void force_queue() { check_queue(true); } + friend class Planner; // for queue private: - typedef HeapRing Queue_t; + void check_queue(bool force= false); + void queue_head_block(void); + using Queue_t= BlockQueue; Queue_t queue; // Queue of Blocks - volatile unsigned int gc_pending; + + uint32_t queue_delay_time_ms; + size_t queue_size; float current_feedrate{0}; // actual nominal feedrate that current block is running at in mm/sec struct { volatile bool running:1; - volatile bool flush:1; - volatile bool halted:1; + volatile bool allow_fetch:1; + bool flush:1; }; }; - -#endif // CONVEYOR_H