-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCANOpenShellStateMachine.h
More file actions
102 lines (85 loc) · 4.09 KB
/
Copy pathCANOpenShellStateMachine.h
File metadata and controls
102 lines (85 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
* state_machine.h
*
* Created on: 12/mag/2015
* Author: luca
*/
#ifndef STATE_MACHINE_H_
#define STATE_MACHINE_H_
#include "canfestival.h"
#define CANOPEN_NODE_NUMBER 128 // 127 nodi più quello di broadcast
#define SMART_TABLE_SIZE 45
//#define SDO_SYNC // se impostato, la macchina a stati _machine_exe viene eseguita da un thread (motore)
// per volta. Questo riduce il carico istantaneo sul bus, anche se aumenta il tempo
// complessivo di esecuzione.
struct state_machine_struct
{
void **function;
int function_size;
UNS32 *param;
int param_size;
char **error;
};
extern int motor_active[CANOPEN_NODE_NUMBER];
extern int motor_active_number;
extern int motor_homing[CANOPEN_NODE_NUMBER];
extern volatile int motor_started[CANOPEN_NODE_NUMBER];
extern long motor_position[CANOPEN_NODE_NUMBER];
extern UNS32 motor_interp_status[CANOPEN_NODE_NUMBER];
extern volatile UNS16 motor_status[CANOPEN_NODE_NUMBER];
extern volatile UNS16 motor_statusword0[CANOPEN_NODE_NUMBER];
extern UNS8 motor_mode[CANOPEN_NODE_NUMBER];
extern void **sin_interpolation_function;
extern UNS32 *sin_interpolation_param;
extern struct state_machine_struct sin_interpolation_machine;
extern void **sin_final_function;
extern UNS32 *sin_final_param;
extern struct state_machine_struct sin_final_machine;
extern struct state_machine_struct smart_start_machine;
extern struct state_machine_struct map1_pdo_machine;
extern struct state_machine_struct map2_pdo_machine;
extern struct state_machine_struct map3_pdo_machine;
extern struct state_machine_struct map4_pdo_machine;
extern struct state_machine_struct heart_start_machine;
extern struct state_machine_struct smart_stop_machine;
extern struct state_machine_struct smart_position_set_machine;
extern struct state_machine_struct smart_position_start_machine;
extern struct state_machine_struct smart_interpolation_test1_machine;
extern struct state_machine_struct smart_interpolation_test2_machine;
extern struct state_machine_struct stop_interpolation_machine;
extern struct state_machine_struct start_interpolation_machine;
extern struct state_machine_struct init_interpolation_machine;
extern struct state_machine_struct smart_homing_machine;
extern struct state_machine_struct smart_read_machine;
extern struct state_machine_struct smart_statusword_machine;
extern struct state_machine_struct smart_reset_statusword_machine;
extern struct state_machine_struct smart_origin_machine;
extern struct state_machine_struct resume_interpolation_machine;
extern struct state_machine_struct smart_velocity_pp_get_machine;
extern struct state_machine_struct smart_velocity_pp_set_machine;
extern struct state_machine_struct torque_machine;
extern struct state_machine_struct smart_limit_enable_machine;
extern struct state_machine_struct smart_limit_disable_machine;
extern struct state_machine_struct smart_following_error_get_machine;
extern struct state_machine_struct smart_acceleration_pp_get_machine;
extern struct state_machine_struct smart_off_machine;
extern struct state_machine_struct gosub_machine;
extern struct state_machine_struct smart_message_machine;
extern struct state_machine_struct smart_set_mode_machine;
typedef UNS8 (*writeNetworkDictCallBack_t)(CO_Data* d, UNS8 nodeId, UNS16 index,
UNS8 subIndex, UNS32 count, UNS8 dataType, void *data,
SDOCallback_t Callback, UNS8 useBlockMode);
typedef UNS8 (*readNetworkDictCallback_t)(CO_Data* d, UNS8 nodeId, UNS16 index,
UNS8 subIndex, UNS8 dataType, SDOCallback_t Callback, UNS8 useBlockMode);
typedef void (*masterSendNMTstateChange_t)(CO_Data* d, UNS8 Node_ID, UNS8 cs);
typedef void (*CustomFunction_t)(CO_Data* d, UNS8 Node_ID, UNS32 *param_array,
UNS32 param_array_size);
typedef void (*MachineCallback_t)(CO_Data* d, UNS8 Node_ID, int machine_state,
int is_register, UNS32 return_value);
void _machine_init();
void _machine_destroy();
void _machine_reset(CO_Data* d, UNS8 nodeId);
int _machine_exe(CO_Data *d, UNS8 nodeId, MachineCallback_t machine_callback,
struct state_machine_struct *machine[], int callback_num, int from_callback,
int var_count, ...);
#endif /* STATE_MACHINE_H_ */