示例#1
0
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;
	}
}
示例#2
0
文件: fitbit.c 项目: pacew/fitbit
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 ();
}