/** * @file Xpl2Client.cpp * @brief TCP client for the Alchemie XPL2 printhead protocol. */ #include "Xpl2Client.h" Xpl2Client::Xpl2Client (QObject *parent) : QObject (parent) { connect (&m_socket, &QTcpSocket::connected, this, &Xpl2Client::onConnected); connect (&m_socket, &QTcpSocket::disconnected, this, &Xpl2Client::onDisconnected); connect (&m_socket, &QTcpSocket::readyRead, this, &Xpl2Client::onReadyRead); connect (&m_socket, &QAbstractSocket::errorOccurred, this, &Xpl2Client::onErrorOccurred); } QString Xpl2Client::host () const { return m_host; } void Xpl2Client::setHost (const QString &host) { if (m_host == host) return; m_host = host; emit hostChanged (); } quint16 Xpl2Client::commandPort () const { return m_commandPort; } void Xpl2Client::setCommandPort (quint16 port) { if (m_commandPort == port) return; m_commandPort = port; emit commandPortChanged (); } quint16 Xpl2Client::imagingPort () const { return m_imagingPort; } void Xpl2Client::setImagingPort (quint16 port) { if (m_imagingPort == port) return; m_imagingPort = port; emit imagingPortChanged (); } quint16 Xpl2Client::statusPort () const { return m_statusPort; } void Xpl2Client::setStatusPort (quint16 port) { if (m_statusPort == port) return; m_statusPort = port; emit statusPortChanged (); } bool Xpl2Client::isConnected () const { return m_socket.state () == QAbstractSocket::ConnectedState; } void Xpl2Client::connectToServer () { if (isConnected ()) { emit statusMessage (QStringLiteral ("Already connected")); return; } emit statusMessage (QStringLiteral ("Connecting to %1:%2…") .arg (m_host) .arg (m_commandPort)); m_socket.connectToHost (m_host, m_commandPort); } void Xpl2Client::disconnectFromServer () { if (!isConnected ()) return; m_socket.disconnectFromHost (); } void Xpl2Client::sendCommand (const QString &command) { if (!isConnected ()) { emit errorOccurred (QStringLiteral ("Not connected")); return; } QByteArray data = command.toUtf8 () + '\n'; m_socket.write (data); emit statusMessage (QStringLiteral ("Sent: %1").arg (command)); } void Xpl2Client::onConnected () { emit connectedChanged (); } void Xpl2Client::onDisconnected () { emit connectedChanged (); } void Xpl2Client::onReadyRead () { while (m_socket.canReadLine ()) { QString line = QString::fromUtf8 (m_socket.readLine ()).trimmed (); emit responseReceived (line); } } void Xpl2Client::onErrorOccurred (QAbstractSocket::SocketError error) { Q_UNUSED (error) emit errorOccurred (m_socket.errorString ()); }