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); } }
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]); }