/************************************************************************* * Copyright (C) 2015 by Andrius Štikonas * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see .* *************************************************************************/ #ifndef SOCKET_H #define SOCKET_H #include #include #include #include #include class QUdpSocket; const QByteArray magicKey = QByteArray::fromHex ( "68 64" ); // recognize datagrams from the socket class Socket : public QThread { Q_OBJECT Q_SIGNALS: void stateChanged(); void datagramQueued(); public: Socket ( QHostAddress, QByteArray ); // from discovery packet ~Socket(); void toggle(); void tableData(); void changeSocketName ( QString newName ); void changeSocketPassword ( QString newPassword ); void changeTimezone ( int8_t newTimezone ); bool parseReply ( QByteArray ); QHostAddress ip; QByteArray mac; bool powered; QByteArray socketName, remotePassword; QByteArray timeZone; QByteArray countdown; private: enum Datagram {Subscribe, PowerOff, PowerOn, TableData, SocketData, TimingData, WriteSocketData, MaxCommands}; void sendDatagram ( Datagram ); void subscribe(); void listen() { start(); } void run(); void writeSocketData (QByteArray name, QByteArray password, QByteArray timezone); QByteArray commandID[MaxCommands]; QByteArray datagram[MaxCommands]; QByteArray rmac; // Reveresed mac QByteArray versionID; QByteArray icon; // displayed icon QByteArray hardwareVersion; QByteArray firmwareVersion; QByteArray wifiFirmwareVersion; // CC3000 firmware version QByteArray staticServerIP; QByteArray port = QByteArray::fromHex ( "10:27" ); // 10000 in hex (little endian) QByteArray domainServerName; QByteArray localIP; // same as QHostAddress ip but in QByteArray, maybe fix later... QByteArray localGatewayIP; QByteArray localNetMask; QByteArray dhcpNode; QByteArray discoverable; QByteArray timeZoneSet; QByteArray socketTableNumber, socketTableVersion, timingTableNumber, timingTableVersion; // FIXME: not used yet const QByteArray twenties = QByteArray::fromHex ( "20 20 20 20 20 20" ); // mac address padding, 6 spaces const QByteArray zeros = QByteArray::fromHex ( "00 00 00 00" ); const QByteArray zero = QByteArray::fromHex ( "00" ); const QByteArray one = QByteArray::fromHex ( "01" ); QUdpSocket *udpSocket; QTimer *subscribeTimer; bool subscribed; QQueue commands; }; #endif /* SOCKET_H */