add $J for instant jog of one axis.
[clinton/Smoothieware.git] / src / modules / robot / Conveyor.h
index 936a750..1418188 100644 (file)
@@ -5,61 +5,54 @@
       You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef CONVEYOR_H
-#define CONVEYOR_H
+#pragma once
 
 #include "libs/Module.h"
-#include "HeapRing.h"
+#include "BlockQueue.h"
 
-using namespace std;
-#include <string>
-#include <vector>
-
-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<Block> 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