Handle HALT state better during suspend/resume
[clinton/Smoothieware.git] / src / modules / utils / motordrivercontrol / MotorDriverControl.h
1 #pragma once
2
3 #include "Module.h"
4 #include "Pin.h"
5
6 #include <stdint.h>
7
8 namespace mbed {
9 class SPI;
10 }
11
12 class DRV8711DRV;
13 class TMC26X;
14 class StreamOutput;
15 class Gcode;
16
17 class MotorDriverControl : public Module {
18 public:
19 MotorDriverControl(uint8_t id);
20 virtual ~MotorDriverControl();
21
22 void on_module_loaded();
23 void on_gcode_received(void *);
24 void on_halt(void *argument);
25 void on_enable(void *argument);
26 void on_idle(void *argument);
27 void on_second_tick(void *argument);
28
29 private:
30 bool config_module(uint16_t cs);
31 void initialize_chip(uint16_t cs);
32 void set_current( uint32_t current );
33 uint32_t set_microstep( uint32_t ms );
34 void set_decay_mode( uint8_t dm );
35 void dump_status(StreamOutput*, bool);
36 void set_raw_register(StreamOutput *stream, uint32_t reg, uint32_t val);
37 void set_options(Gcode *gcode);
38
39 void enable(bool on);
40 int sendSPI(uint8_t *b, int cnt, uint8_t *r);
41
42 Pin spi_cs_pin;
43 mbed::SPI *spi;
44
45 enum CHIP_TYPE {
46 DRV8711,
47 TMC2660
48 };
49 CHIP_TYPE chip;
50
51 // one of these drivers
52 union {
53 DRV8711DRV *drv8711;
54 TMC26X *tmc26x;
55 };
56
57 //float current_factor;
58 uint32_t max_current; // in milliamps
59 uint32_t current; // in milliamps
60 uint32_t microsteps;
61
62 char axis;
63
64 struct{
65 uint8_t id:4;
66 uint8_t decay_mode:4;
67 bool rawreg:1;
68 bool enable_event:1;
69 bool enable_flg:1;
70 bool current_override:1;
71 bool microstep_override:1;
72 bool halt_on_alarm:1;
73 };
74
75 };