// 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 !"); } } }
int rr_dev_close (rr_dev dev) { int result = serial_close(dev->fd); dev->fd = SERIAL_INVALID_INIT; rr_dev_reset (dev); return result; }
// 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 { } }
void Printer::Stop() { if (device==NULL) return; set_printing (false); //assert(m_model != NULL); if (!rr_dev_is_connected (device)) { alert (_("Not connected to printer.\nCannot stop printing")); return; } rr_dev_reset (device); }
void Model::Print() { if (rr_dev_fd (m_device) < 0) { alert ("Not connected to printer.\nCannot start printing"); return; } rr_dev_reset (m_device); delete (m_iter); m_iter = gcode.get_iter(); m_printing = true; m_progress.start ("Printing", gcode.commands.size()); rr_dev_set_paused (m_device, RR_PRIO_NORMAL, 0); }
void Printer::Print() { if (device==NULL) return; if (!rr_dev_is_connected (device)) { alert (_("Not connected to printer.\nCannot start printing")); return; } assert(m_model != NULL); delete (gcode_iter); gcode_iter = m_model->gcode.get_iter(); set_printing (true); rr_dev_reset (device); rr_dev_set_paused (device, RR_PRIO_NORMAL, 0); }
void Model::STOP() { SendNow ("M112"); rr_dev_reset (m_device); }