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);
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;

View File

@ -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;
}
}
}

View File

@ -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);