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 */