// we try to change the state of the connection void Printer::serial_try_connect (bool connect) { int result; assert(m_model != NULL); // Need a model first if (connect) { void *cl = static_cast<void *>(this); // TODO: Configurable protocol, cache size device = rr_dev_create (RR_PROTO_FIVED, m_model->settings.Hardware.ReceivingBufferSize, rr_reply_fn, cl, rr_more_fn, cl, rr_error_fn, cl, rr_wait_wr_fn, cl, rr_log_fn, cl); signal_serial_state_changed.emit (SERIAL_CONNECTING); result = rr_dev_open (device, m_model->settings.Hardware.PortName.c_str(), m_model->settings.Hardware.SerialSpeed); if(result < 0) { signal_serial_state_changed.emit (SERIAL_DISCONNECTED); error (_("Failed to connect to device"), _("an error occured while connecting")); } else { rr_dev_reset (device); signal_serial_state_changed.emit (SERIAL_CONNECTED); UpdateTemperatureMonitor(); } } else { if (printing) { error (_("Cannot disconnect"), _("printer is printing")); signal_serial_state_changed.emit (SERIAL_CONNECTED); } else { signal_serial_state_changed.emit (SERIAL_DISCONNECTING); devconn.disconnect(); if (device) rr_dev_close (device); devconn.disconnect(); signal_serial_state_changed.emit (SERIAL_DISCONNECTED); Pause(); temp_timeout.disconnect(); if (device) rr_dev_free (device); device = NULL; } } if (connect) { UpdateTemperatureMonitor(); } else { } }
Printer::~Printer() { temp_timeout.disconnect(); Stop(); serial_try_connect(false); if (device==NULL) return; rr_dev_free (device); device = NULL; }
Printer::~Printer() { temp_timeout.disconnect(); Stop(); serial_try_connect(false); #if IOCHANNEL delete rr_serial; #else if (device==NULL) return; rr_dev_free (device); device = NULL; #endif }
Model::~Model() { rr_dev_free (m_device); }