Read socket name and remote password.
This commit is contained in:
parent
bdba0234b2
commit
e17074384a
29
main.cpp
29
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;
|
||||
|
|
26
socket.cpp
26
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
6
socket.h
6
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);
|
||||
|
|
Loading…
Reference in New Issue