/ src / emc / motion / homing.h
homing.h
 1  #ifndef HOMING_H
 2  #define HOMING_H
 3  
 4  #include <rtapi_bool.h>
 5  
 6  // SEQUENCE states
 7  typedef enum {
 8    HOME_SEQUENCE_IDLE = 0,        // valid start state
 9    HOME_SEQUENCE_START,           // valid start state
10    HOME_SEQUENCE_DO_ONE_JOINT,    // valid start state
11    HOME_SEQUENCE_DO_ONE_SEQUENCE, // valid start state
12    HOME_SEQUENCE_START_JOINTS,    // homing.c internal usage
13    HOME_SEQUENCE_WAIT_JOINTS,     // homing.c internal usage
14  } home_sequence_state_t;
15  
16  //---------------------------------------------------------------------
17  // INTERFACE routines
18  
19  // per-joint interface parameters (one-time setup)
20  extern void set_joint_homing_params(int    jno,
21                                      double offset,
22                                      double home,
23                                      double home_final_vel,
24                                      double home_search_vel,
25                                      double home_latch_vel,
26                                      int    home_flags,
27                                      int    home_sequence,
28                                      bool   volatile_home
29                                      );
30  
31  // updateable interface params (for inihal pin changes typically):
32  void update_joint_homing_params (int    jno,
33                                   double home_offset,
34                                   double home_home,
35                                   int    home_sequence
36                                  );
37  
38  //---------------------------------------------------------------------
39  // CONTROL routines
40  
41  // one-time initialization:
42  extern void homing_init(void);
43  extern int  export_joint_home_pins(int njoints,int id);
44  
45  // once-per-servo-period functions:
46  extern void read_homing_in_pins(int njoints);
47  extern void do_homing_sequence(void);
48  extern void do_homing(void);
49  extern void write_homing_out_pins(int njoints);
50  
51  // overall sequence control:
52  extern void set_home_sequence_state(home_sequence_state_t);
53  
54  // per-joint control of internal state machine:
55  extern void set_home_start(int jno);
56  extern void set_home_abort(int jno);
57  extern void set_home_idle( int jno);
58  
59  // per-joint set status items:
60  extern void set_joint_homing( int jno, bool value);
61  extern void set_joint_homed(  int jno, bool value);
62  extern void set_joint_at_home(int jno, bool value);
63  
64  //---------------------------------------------------------------------
65  // QUERIES
66  
67  // overall status:
68  extern home_sequence_state_t get_home_sequence_state(void);
69  extern bool get_homing_is_active(void);
70  
71  // per-joint information:
72  extern int  get_home_sequence(int jno);
73  extern bool get_homing(int jno);
74  extern bool get_homed(int jno);
75  extern bool get_index_enable(int jno);
76  extern bool get_home_is_volatile(int jno);
77  extern bool get_home_needs_unlock_first(int jno);
78  extern bool get_home_is_idle(int jno);
79  extern bool get_homing_at_index_search_wait(int jno);
80  extern bool get_home_is_synchronized(int jno);
81  //---------------------------------------------------------------------
82  
83  #endif /* HOMING_H */