#define CONVEYOR_H
#include "libs/Module.h"
-#include "libs/Kernel.h"
#include "HeapRing.h"
using namespace std;
#include <vector>
class Gcode;
+class Block;
class Conveyor : public Module
{
Conveyor();
void on_module_loaded(void);
- void on_idle(void*);
- void on_main_loop(void*);
- void on_block_end(void*);
- void on_config_reload(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 notify_block_finished(Block *);
void wait_for_empty_queue();
+ bool is_queue_empty() { return queue.is_empty(); };
+ bool is_queue_full() { return queue.is_full(); };
void ensure_running(void);
- void append_gcode(Gcode*);
+ void append_gcode(Gcode *);
void queue_head_block(void);
void dump_queue(void);
+ void flush_queue(void);
+ bool is_flushing() const { return flush; }
- // right now block queue size can only be changed at compile time by changing the value below
+ friend class Planner; // for queue
+
+private:
typedef HeapRing<Block> Queue_t;
Queue_t queue; // Queue of Blocks
+ volatile unsigned int gc_pending;
- volatile bool running;
+ struct {
+ volatile bool running:1;
+ volatile bool flush:1;
+ volatile bool halted:1;
+ };
- volatile unsigned int gc_pending;
};
#endif // CONVEYOR_H