From e17074384adbdc42033867650e060b1db47b15c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Mon, 26 Jan 2015 00:55:20 +0000 Subject: [PATCH] Read socket name and remote password. --- main.cpp | 29 ++++++++++++++++++----------- socket.cpp | 26 +++++++++++++++++++++++--- socket.h | 6 ++++-- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/main.cpp b/main.cpp index 9661413..dac7db1 100644 --- a/main.cpp +++ b/main.cpp @@ -38,25 +38,32 @@ int main(int argc, char *argv[]) readDiscoverDatagrams(udpSocketGet, sockets); delete udpSocketGet; - listSockets(sockets); char command; - unsigned int number = 1; + unsigned int number = 0; bool cont=true; while (cont) { - std::cout << "s - pick another socket (default is 1)\nt - toggle power state\nq - quit" << std::endl; + listSockets(sockets); + std::cout << "d - show table data\ns - pick another socket (default is 1)\np - toggle power state\nq - quit" << std::endl; std::cin >> command; switch (command) { - case 'q': - cont = false; - break; - case 's': - std::cin >> number; - case 't': - sockets[number-1].toggle(); - listSockets(sockets); + case 'd': + sockets[number].tableData(); + break; + case 'p': + sockets[number].toggle(); + break; + case 'q': + cont = false; + break; + case 's': + std::cin >> number; + --number; // count from 0 + break; + default: + std::cout << "Invalid command" << std::endl; } } return 0; diff --git a/socket.cpp b/socket.cpp index 6262391..38b1a8b 100644 --- a/socket.cpp +++ b/socket.cpp @@ -34,15 +34,21 @@ Socket::Socket(QHostAddress IPaddress, QByteArray reply) commandID[PowerOn] = QByteArray::fromHex("73 66"); commandID[PowerOff] = commandID[PowerOn]; commandID[TableData] = QByteArray::fromHex("72 74"); + commandID[SocketData] = commandID[TableData]; + commandID[TimingData] = commandID[TableData]; // 2 hex bytes are the total length of the message datagram[Subscribe] = magicKey + QByteArray::fromHex("00 1e") + commandID[Subscribe] + mac + twenties + rmac + twenties; datagram[PowerOn] = magicKey + QByteArray::fromHex("00 17 64 63") + mac + twenties + zeros + one; datagram[PowerOff] = magicKey + QByteArray::fromHex("00 17 64 63") + mac + twenties + zeros + zero; - datagram[TableData] = magicKey + QByteArray::fromHex("00 1d") + commandID[TableData] + mac + twenties + zeros + one + zeros + zero; + datagram[TableData] = magicKey + QByteArray::fromHex("00 1d") + commandID[TableData] + mac + twenties + zeros + QByteArray::fromHex("01 00 00") + zeros; + // FIXME: parse table versions and numbers + datagram[SocketData] = magicKey + QByteArray::fromHex("00 1d") + commandID[SocketData] + mac + twenties + zeros + QByteArray::fromHex("04 00 02") + zeros; + datagram[TimingData] = magicKey + QByteArray::fromHex("00 1d") + commandID[TimingData] + mac + twenties + zeros + QByteArray::fromHex("03 00 03") + zeros; + // table number 00 version number } -bool Socket::toggle() +void Socket::toggle() { bool powerOld = powered; while (powerOld == powered) @@ -52,6 +58,15 @@ bool Socket::toggle() } } +void Socket::tableData() +{ + sendDatagram(Subscribe); + sendDatagram(TableData); + sendDatagram(SocketData); + sendDatagram(TimingData); + std::cout << name.toStdString() << std::endl; +} + void Socket::sendDatagram(Datagram d) { udpSocketGet = new QUdpSocket(); @@ -80,13 +95,18 @@ void Socket::readDatagrams(QUdpSocket *udpSocketGet, Datagram d) if (datagramGet.left(2) == magicKey && datagramGet.mid(4,2) == commandID[d]) { - std::cout << datagramGet.toHex().toStdString() << std::endl; + std::cout << datagramGet.toHex().toStdString() << " " << d << std::endl; switch (d) { case Subscribe: case PowerOff: case PowerOn: powered = datagramGet.right(1) == one; + break; + case SocketData: + remotePassword = datagramGet.mid(58, 12); + name = datagramGet.mid(70, 16); + break; } } } diff --git a/socket.h b/socket.h index 1464e3a..dac2f95 100644 --- a/socket.h +++ b/socket.h @@ -23,14 +23,16 @@ class Socket { public: Socket(QHostAddress, QByteArray); - bool toggle(); + void toggle(); + void tableData(); QHostAddress ip; QByteArray mac; bool powered; + QString name, remotePassword; private: - enum Datagram {Subscribe, PowerOff, PowerOn, TableData, MaxCommands}; + enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, MaxCommands}; void sendDatagram(Datagram); void readDatagrams(QUdpSocket *udpSocketGet, Datagram d);