Read socket name and remote password.

This commit is contained in:
Andrius Štikonas 2015-01-26 00:55:20 +00:00
parent bdba0234b2
commit e17074384a
3 changed files with 45 additions and 16 deletions

View File

@ -38,25 +38,32 @@ int main(int argc, char *argv[])
readDiscoverDatagrams(udpSocketGet, sockets); readDiscoverDatagrams(udpSocketGet, sockets);
delete udpSocketGet; delete udpSocketGet;
listSockets(sockets);
char command; char command;
unsigned int number = 1; unsigned int number = 0;
bool cont=true; bool cont=true;
while (cont) 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; std::cin >> command;
switch (command) switch (command)
{ {
case 'q': case 'd':
cont = false; sockets[number].tableData();
break; break;
case 's': case 'p':
std::cin >> number; sockets[number].toggle();
case 't': break;
sockets[number-1].toggle(); case 'q':
listSockets(sockets); cont = false;
break;
case 's':
std::cin >> number;
--number; // count from 0
break;
default:
std::cout << "Invalid command" << std::endl;
} }
} }
return 0; return 0;

View File

@ -34,15 +34,21 @@ Socket::Socket(QHostAddress IPaddress, QByteArray reply)
commandID[PowerOn] = QByteArray::fromHex("73 66"); commandID[PowerOn] = QByteArray::fromHex("73 66");
commandID[PowerOff] = commandID[PowerOn]; commandID[PowerOff] = commandID[PowerOn];
commandID[TableData] = QByteArray::fromHex("72 74"); commandID[TableData] = QByteArray::fromHex("72 74");
commandID[SocketData] = commandID[TableData];
commandID[TimingData] = commandID[TableData];
// 2 hex bytes are the total length of the message // 2 hex bytes are the total length of the message
datagram[Subscribe] = magicKey + QByteArray::fromHex("00 1e") + commandID[Subscribe] + mac + twenties + rmac + twenties; 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[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[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; bool powerOld = powered;
while (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) void Socket::sendDatagram(Datagram d)
{ {
udpSocketGet = new QUdpSocket(); 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]) 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) switch (d)
{ {
case Subscribe: case Subscribe:
case PowerOff: case PowerOff:
case PowerOn: case PowerOn:
powered = datagramGet.right(1) == one; powered = datagramGet.right(1) == one;
break;
case SocketData:
remotePassword = datagramGet.mid(58, 12);
name = datagramGet.mid(70, 16);
break;
} }
} }
} }

View File

@ -23,14 +23,16 @@ class Socket
{ {
public: public:
Socket(QHostAddress, QByteArray); Socket(QHostAddress, QByteArray);
bool toggle(); void toggle();
void tableData();
QHostAddress ip; QHostAddress ip;
QByteArray mac; QByteArray mac;
bool powered; bool powered;
QString name, remotePassword;
private: private:
enum Datagram {Subscribe, PowerOff, PowerOn, TableData, MaxCommands}; enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, MaxCommands};
void sendDatagram(Datagram); void sendDatagram(Datagram);
void readDatagrams(QUdpSocket *udpSocketGet, Datagram d); void readDatagrams(QUdpSocket *udpSocketGet, Datagram d);