extern void get_control(double time, struct sensordata *sensorData_ptr, struct nav *navData_ptr, struct control *controlData_ptr, struct mission *missionData_ptr) { unsigned short claw_mode = missionData_ptr -> claw_mode; // mode switching unsigned short claw_select = missionData_ptr -> claw_select; // mode switching static int t0_latched = FALSE; // time latching static double t0 = 0; double flare_time; switch(claw_mode){ case 0: // experiment mode t0_latched = FALSE; switch(claw_select){ case 0: // chirp, open loop L3/R3, L4/R4 at 23 m/s reset_tracker(); missionData_ptr -> run_excitation = 1; missionData_ptr -> sysid_select = 0; open_loop(time, exp_speed, sensorData_ptr, navData_ptr, controlData_ptr); break; case 1: // 3211, open loop L3/R3, L4/R4 at 17 m/s reset_tracker(); missionData_ptr -> run_excitation = 1; missionData_ptr -> sysid_select = 1; open_loop(time, flare_speed, sensorData_ptr, navData_ptr, controlData_ptr); break; default: // 3211, open loop L3/R3, L4/R4 at 20 m/s reset_tracker(); missionData_ptr -> run_excitation = 1; missionData_ptr -> sysid_select = 1; open_loop(time, trim_speed, sensorData_ptr, navData_ptr, controlData_ptr); break; } break; case 2: // autolanding mode missionData_ptr -> run_excitation = 0; switch(claw_select){ case 0: // approach t0_latched = FALSE; approach_control(time, sensorData_ptr, navData_ptr, controlData_ptr); break; case 1: // flare if(t0_latched == FALSE){ // get the time since flare started t0 = time; t0_latched = TRUE; } flare_time = time - t0; flare_control(flare_time, sensorData_ptr, navData_ptr, controlData_ptr); break; default: // pilot guidance t0_latched = FALSE; pilot_flying(time, (flare_speed + pilot_flare_delta), sensorData_ptr, navData_ptr, controlData_ptr); break; } break; default: // pilot mode missionData_ptr -> run_excitation = 0; t0_latched = FALSE; pilot_flying(time, trim_speed,sensorData_ptr, navData_ptr, controlData_ptr); break; } }
void init_tracker_for_transfer (void) { unsigned char data[100]; int n; protocol_channel = 0; init_fitbit (); wait_for_beacon (); reset_tracker (); while (1) { device_number = getrandom () & 0xffff; if (device_number != 0 && device_number != 0xffff) break; } pairing_request = 0; device_type = 1; transmission_type = 1; dbg ("init_tracker_for_transfer: tell device to change dev num\n"); n = 0; data[n++] = 0x78; data[n++] = 0x02; data[n++] = device_number; data[n++] = device_number >> 8; data[n++] = 0x00; data[n++] = 0x00; data[n++] = 0x00; data[n++] = 0x00; protocol_send_acknowledged_data (data, n); protocol_close_channel (); /* * we're supposed to wait for EVENT_CHANNEL_CLOSED but it never * seems to come */ soak (.2); dbg ("hoping channel close has happened...\n"); init_device_channel (device_number, pairing_request, device_type, transmission_type); wait_for_beacon (); ping_tracker (); }