// we try to change the state of the connection void Model::serial_try_connect (bool connect) { int result; if (connect) { m_signal_serial_state_changed.emit (SERIAL_CONNECTING); result = rr_dev_open (m_device, settings.Hardware.PortName.c_str(), settings.Hardware.SerialSpeed); if(result < 0) { m_signal_serial_state_changed.emit (SERIAL_DISCONNECTED); Gtk::MessageDialog dialog("Failed to connect to device", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE); dialog.set_secondary_text(strerror(errno)); dialog.run(); } else { rr_dev_reset (m_device); m_signal_serial_state_changed.emit (SERIAL_CONNECTED); } } else { m_signal_serial_state_changed.emit (SERIAL_DISCONNECTING); m_devconn.disconnect(); rr_dev_close (m_device); m_devconn.disconnect(); m_signal_serial_state_changed.emit (SERIAL_DISCONNECTED); if (m_printing) { Pause(); g_warning ("FIXME: warn of dis-connect while printing !"); } } }
void rr_dev_free (rr_dev dev) { rr_dev_close (dev); empty_buffers (dev); free (dev->recvbuf); free (dev); }
// 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 { } }