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);
|
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;
|
||||||
|
|
26
socket.cpp
26
socket.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
6
socket.h
6
socket.h
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue