TelescopeClientJsonRts2::TelescopeClientJsonRts2(const QString &name, const QString ¶ms, Equinox eq) : TelescopeClient(name) , networkManager(new QNetworkAccessManager) , equinox(eq) , baseurl("http://localhost:8889/") , telName("") , telReadonly(false) , telLatitude(NAN) , telLongitude(NAN) , telAltitude(NAN) , telTargetDist(NAN) , time_delay(50) , reconnectTimer(-1) , refresh_delay(500) , server_micros(0) { telescopeManager = GETSTELMODULE(TelescopeControl); // Example params: // 1000:test:1234@localhost:8889/tel QRegExp paramRx("^(\\d+):(.*)$"); QString url; if (paramRx.exactMatch(params)) { refresh_delay = paramRx.capturedTexts().at(1).toInt() / 1000; // convert microseconds to milliseconds url = paramRx.capturedTexts().at(2).trimmed(); } else { qWarning() << "ERROR creating TelescopeClientJsonRts2: invalid parameters."; return; } qDebug() << "TelescopeRTS2(" << name << ") URL, refresh timeout: " << url << "," << refresh_delay; baseurl.setUrl(url); if (!baseurl.isValid()) { qWarning() << "TelescopeRTS2(" << name << ") invalid URL: " << url; return; } QUrl rurl(baseurl); rurl.setPath(baseurl.path() + "/api/devbytype"); QUrlQuery query; query.addQueryItem("t", "2"); rurl.setQuery(query); cfgRequest.setUrl(rurl); qDebug() << "TelescopeRTS2(" << name << ")::TelescopeRTS2: request url:" << rurl.toString(); connect(&networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); networkManager.get(cfgRequest); }
TelescopeClientDirectLx200::TelescopeClientDirectLx200 (const QString &name, const QString ¶meters, Equinox eq) : TelescopeClient(name), equinox(eq) { interpolatedPosition.reset(); //Extract parameters //Format: "serial_port_name:time_delay" QRegExp paramRx("^([^:]*):(\\d+)$"); QString serialDeviceName; if (paramRx.exactMatch(parameters)) { // This QRegExp only matches valid integers serialDeviceName = paramRx.capturedTexts().at(1).trimmed(); time_delay = paramRx.capturedTexts().at(2).toInt(); } else { qWarning() << "ERROR creating TelescopeClientDirectLx200: invalid parameters."; return; } qDebug() << "TelescopeClientDirectLx200 paramaters: port, time_delay:" << serialDeviceName << time_delay; //Validation: Time delay if (time_delay <= 0 || time_delay > 10000000) { qWarning() << "ERROR creating TelescopeClientDirectLx200: time_delay not valid (should be less than 10000000)"; return; } //end_of_timeout = -0x8000000000000000LL; #ifdef Q_OS_WIN32 if(serialDeviceName.right(serialDeviceName.size() - 3).toInt() > 9) serialDeviceName = "\\\\.\\" + serialDeviceName;//"\\.\COMxx", not sure if it will work else serialDeviceName = serialDeviceName; #endif //Q_OS_WIN32 //Try to establish a connection to the telescope lx200 = new Lx200Connection(*this, qPrintable(serialDeviceName)); if (lx200->isClosed()) { qWarning() << "ERROR creating TelescopeClientDirectLx200: cannot open serial device" << serialDeviceName; return; } // lx200 will be deleted in the destructor of Server addConnection(lx200); long_format_used = false; // unknown last_ra = 0; queue_get_position = true; next_pos_time = -0x8000000000000000LL; answers_received = false; }
TelescopeTCP::TelescopeTCP(const QString &name, const QString ¶ms, Equinox eq) : TelescopeClient(name) , port(0) , tcpSocket(new QTcpSocket()) , end_of_timeout(0) , time_delay(0) , equinox(eq) { hangup(); // Example params: // localhost:10000:500000 // split into: // host = localhost // port = 10000 (int) // time_delay = 500000 (int) QRegExp paramRx("^([^:]*):(\\d+):(\\d+)$"); QString host; if (paramRx.exactMatch(params)) { // I will not use the ok param to toInt as the // QRegExp only matches valid integers. host = paramRx.capturedTexts().at(1).trimmed(); port = paramRx.capturedTexts().at(2).toInt(); time_delay = paramRx.capturedTexts().at(3).toInt(); } else { qWarning() << "WARNING - incorrect TelescopeTCP parameters"; return; } qDebug() << "TelescopeTCP paramaters host, port, time_delay:" << host << port << time_delay; if (port <= 0 || port > 0xFFFF) { qWarning() << "ERROR creating TelescopeTCP - port not valid (should be less than 32767)"; return; } if (time_delay <= 0 || time_delay > 10000000) { qWarning() << "ERROR creating TelescopeTCP - time_delay not valid (should be less than 10000000)"; return; } //BM: TODO: This may cause some delay when there are more telescopes QHostInfo info = QHostInfo::fromName(host); if (info.error()) { qWarning() << "ERROR creating TelescopeTCP: error looking up host " << host << ":" << info.errorString(); return; } //BM: is info.addresses().isEmpty() if there's no error? //qDebug() << "TelescopeClient::create(): Host addresses:" << info.addresses(); foreach(const QHostAddress& resolvedAddress, info.addresses()) { //For now, Stellarium's telescope servers support only IPv4 if(resolvedAddress.protocol() == QTcpSocket::IPv4Protocol) { address = resolvedAddress; break; } } if(address.isNull()) { qWarning() << "ERROR creating TelescopeTCP: cannot find IPv4 address. Addresses found at " << host << ":" << info.addresses(); return; } end_of_timeout = -0x8000000000000000LL; interpolatedPosition.reset(); connect(tcpSocket, SIGNAL(connected()), this, SLOT(socketConnected())); connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketFailed(QAbstractSocket::SocketError))); }