예제 #1
0
파일: setup.cpp 프로젝트: mtu-most/franklin
void connect_end() {
	// Set things up that need information from the firmware.
	num_subfragments_bits = int(std::log2(settings.hwtime_step / TIME_PER_ISR));
	delete[] history;
	history = new History[FRAGMENTS_PER_BUFFER];
	for (int i = 0; i < 2; ++i) {
		int f = (current_fragment - i + FRAGMENTS_PER_BUFFER) % FRAGMENTS_PER_BUFFER;
		history[f].hwtime = 0;
		history[f].cbs = 0;
		history[f].queue_start = 0;
		history[f].queue_end = 0;
		history[f].queue_full = false;
	}
	for (int s = 0; s < NUM_SPACES; ++s) {
		Space &sp = spaces[s];
		sp.history = new Space_History[FRAGMENTS_PER_BUFFER];
		for (int a = 0; a < sp.num_axes; ++a) {
			delete[] sp.axis[a]->history;
			sp.axis[a]->history = setup_axis_history();
		}
		for (int m = 0; m < sp.num_motors; ++m) {
			delete[] sp.motor[m]->history;
			sp.motor[m]->history = setup_motor_history();
		}
	}
	// Restore all temps to their current values.
	for (int t = 0; t < num_temps; ++t) {
		settemp(t, temps[t].target[0]);
		if (temps[t].power_pin[1].valid())
			arch_set_duty(temps[t].power_pin[1], temps[t].fan_duty);
	}
	// Set all gpio duty cycle values.
	for (int g = 0; g < num_gpios; ++g) {
		if (gpios[g].pin.valid())
			arch_set_duty(gpios[g].pin, gpios[g].duty);
	}
	// Update current position.
	first_fragment = current_fragment;
	arch_stop(true);
	// Update pin names at next globals update.
	if (connected) {
		prepare_interrupt();
		send_to_parent(CMD_CONNECTED);
	}
}
예제 #2
0
void Temp::load(int32_t &addr, int id)
{
	R0 = read_float(addr);
	R1 = read_float(addr);
	logRc = read_float(addr);
	Tc = read_float(addr);
	beta = read_float(addr);
	K = exp(logRc - beta / Tc);
	//debug("K %f R0 %f R1 %f logRc %f Tc %f beta %f", K, R0, R1, logRc, Tc, beta);
	/*
	core_C = read_float(addr);
	shell_C = read_float(addr);
	transfer = read_float(addr);
	radiation = read_float(addr);
	power = read_float(addr);
	*/
	power_pin[0].read(read_16(addr));
	power_pin[1].read(read_16(addr));
	int old_pin = thermistor_pin.write();
	bool old_valid = thermistor_pin.valid();
	thermistor_pin.read(read_16(addr));
	target[1] = read_float(addr);
	arch_set_duty(power_pin[1], read_float(addr));
	for (int i = 0; i < 2; ++i) {
		adctarget[i] = toadc(target[i], MAXINT);
		SET_OUTPUT(power_pin[i]);
		if (is_on[i])
			SET(power_pin[i]);
		else
			RESET(power_pin[i]);
	}
	if (old_pin != thermistor_pin.write() && old_valid)
		arch_setup_temp(~0, old_pin, false);
	if (thermistor_pin.valid())
		arch_setup_temp(id, thermistor_pin.pin, true, power_pin[0].valid() ? power_pin[0].pin : ~0, power_pin[0].inverted(), adctarget[0], power_pin[1].valid() ? power_pin[1].pin : ~0, power_pin[1].inverted(), adctarget[1]);
}