// 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 {
  }
}
Beispiel #2
0
bool Printer::temp_timeout_cb()
{
  if (IsConnected() && m_model && m_model->settings.Misc.TempReadingEnabled)
    SendNow("M105");
  UpdateTemperatureMonitor();
  return true;
}
Beispiel #3
0
bool Printer::Idle( void ) {
    string str;
    bool is_connected;

    while ( ( str = ReadResponse() ) != "" )
        ParseResponse( str );

    if ( m_view ) {
        while ( ( str = ReadLog() ) != "" )
            m_view->comm_log( str );

        while ( ( str = ReadErrorLog() ) != "" ) {
            alert( str.c_str() );
        }
    }

    if ( ( is_connected = IsConnected() ) != was_connected ) {
        was_connected = is_connected;
        signal_serial_state_changed.emit( is_connected ? SERIAL_CONNECTED : SERIAL_DISCONNECTED );
    }

    if ( waiting_temp && --temp_countdown == 0 &&
            m_model && m_model->settings.get_boolean("Misc","TempReadingEnabled") ) {
        UpdateTemperatureMonitor();
        temp_countdown = 100;
        waiting_temp = false;
    }

    return true;
}
Beispiel #4
0
bool Printer::Connect( string device, int baudrate ) {
    signal_serial_state_changed.emit( SERIAL_CONNECTING );
    bool ret = ThreadedPrinterSerial::Connect( device, baudrate );
    signal_serial_state_changed.emit( ret ? SERIAL_CONNECTED : SERIAL_DISCONNECTED );
    UpdateTemperatureMonitor();

    return ret;
}
Beispiel #5
0
void Printer::setModel(Model *model)
{
  m_model = model;

  UpdateTemperatureMonitor();
}