10 #include <rc/start_stop.h> 11 #include <rc/pthread.h> 14 #include <rc/math/other.h> 23 static pthread_t input_manager_thread;
34 static double __deadzone(
double in,
double zone)
36 if(zone<=0.0)
return in;
37 if(fabs(in)<=zone)
return 0.0;
38 if(in>0.0)
return ((in-zone)/(1.0-zone));
39 else return ((in+zone)/(1.0-zone));
48 static int __wait_for_arming_sequence()
57 if(rc_get_state()==EXITING)
return 0;
62 if(rc_get_state()==EXITING)
return 0;
67 if(rc_get_state()==EXITING)
return 0;
72 if(rc_get_state()==EXITING)
return 0;
73 if(kill_switch==
DISARMED)
goto ARM_SEQUENCE_START;
78 if(rc_get_state()==EXITING)
return 0;
79 if(kill_switch==
DISARMED)
goto ARM_SEQUENCE_START;
83 if(kill_switch==
DISARMED)
goto ARM_SEQUENCE_START;
85 goto ARM_SEQUENCE_START;
93 double new_thr, new_roll, new_pitch, new_yaw, new_mode, new_kill;
123 else kill_switch =
ARMED;
127 fprintf(stderr,
"ERROR in input manager, unhandled settings.dsm_kill_mode\n");
133 rc_saturate_double(&new_thr, -1.0, 1.0);
134 rc_saturate_double(&new_roll, -1.0, 1.0);
135 rc_saturate_double(&new_pitch, -1.0, 1.0);
136 rc_saturate_double(&new_yaw, -1.0, 1.0);
157 fprintf(stderr,
"ERROR, in input_manager, num_dsm_modes must be 1,2 or 3\n");
158 fprintf(stderr,
"selecting flight mode 1\n");
181 printf(
"DSM CONNECTION ESTABLISHED\n");
197 fprintf(stderr,
"LOST DSM CONNECTION\n");
205 while(rc_get_state()!=EXITING){
212 while(rc_get_state()!=EXITING){
215 __wait_for_arming_sequence();
218 if(rc_get_state()!=RUNNING)
continue;
237 if(rc_dsm_init()==-1){
238 fprintf(stderr,
"ERROR in input_manager_init, failed to initialize dsm\n");
244 if(rc_pthread_create(&input_manager_thread, &
input_manager, NULL,
246 fprintf(stderr,
"ERROR in input_manager_init, failed to start thread\n");
254 fprintf(stderr,
"ERROR in input_manager_init, timeout waiting for thread to start\n");
262 fprintf(stderr,
"WARNING in input_manager_cleanup, was never initialized\n");
267 fprintf(stderr,
"WARNING: in input_manager_cleanup, thread join timeout\n");
double pitch
current pitch angle (rad)
arm_state_t
constants and parameters
double roll
current roll angle (rad)
dsm_kill_mode_t dsm_kill_mode
#define ARM_TIP_THRESHOLD
radians from level to allow arming sequence
flight_mode_t flight_mode_2
#define INPUT_MANAGER_TOUT
int initialized
set to 1 after feedback_init()
#define INPUT_MANAGER_PRI
flight_mode_t flight_mode_3
flight_mode_t flight_mode_1