2015-01-31 18:12:20 +00:00
/*************************************************************************
* Copyright ( C ) 2015 by Andrius Š tikonas < andrius @ stikonas . eu > *
* *
* 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 < http : //www.gnu.org/licenses/>.*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include <iostream>
# include "consolereader.h"
2015-02-22 23:20:20 +00:00
# include "server.h"
2015-01-31 18:12:20 +00:00
2015-02-01 01:42:45 +00:00
ConsoleReader : : ConsoleReader ( std : : vector < Socket * > * sockets_vector )
2015-01-31 18:12:20 +00:00
{
sockets = sockets_vector ;
2015-02-01 01:42:45 +00:00
start ( ) ;
2015-01-31 18:12:20 +00:00
}
void ConsoleReader : : run ( )
{
2015-02-03 01:24:47 +00:00
QThread : : sleep ( 1 ) ; // wait until sockets are discovered
for ( unsigned i = 0 ; i < sockets - > size ( ) ; + + i )
{
connect ( ( * sockets ) [ i ] , & Socket : : stateChanged , this , & ConsoleReader : : listSockets ) ;
}
listSockets ( ) ;
std : : string command ;
2015-01-31 18:12:20 +00:00
unsigned int number = 0 ;
bool cont = true ;
2015-02-01 01:42:45 +00:00
while ( cont )
2015-01-31 18:12:20 +00:00
{
std : : cin > > command ;
2015-02-03 01:24:47 +00:00
switch ( command [ 0 ] )
2015-01-31 18:12:20 +00:00
{
2015-02-22 23:20:20 +00:00
case ' a ' :
{
std : : cout < < " Please set your Orvibo socket to pair mode (rapidly blinking blue light) and connect computer to socket's WiFi network (WiWo-S20) " < < std : : endl ;
std : : string ssid ;
std : : cout < < " SSID of your Wifi: " ;
std : : cin > > ssid ;
std : : string password ;
std : : cout < < " Password: " ;
std : : cin > > password ;
Server * server = new Server ( 48899 , QByteArray : : fromStdString ( ssid ) , QByteArray : : fromStdString ( password ) ) ; // HF-A11 chip can be controlled over port 48899
break ;
}
2015-02-01 01:42:45 +00:00
case ' d ' :
2015-02-03 01:24:47 +00:00
( * sockets ) [ number ] - > tableData ( ) ;
2015-02-01 01:42:45 +00:00
break ;
case ' n ' :
2015-02-03 01:24:47 +00:00
{
2015-02-09 21:09:50 +00:00
std : : string name ;
std : : cout < < " Please enter a new name: " ;
std : : cin > > name ;
( * sockets ) [ number ] - > changeSocketName ( QString : : fromStdString ( name ) ) ;
2015-02-01 01:42:45 +00:00
break ;
2015-02-03 01:24:47 +00:00
}
2015-02-01 01:42:45 +00:00
case ' p ' :
2015-02-03 01:24:47 +00:00
( * sockets ) [ number ] - > toggle ( ) ;
2015-02-01 01:42:45 +00:00
break ;
2015-02-15 12:31:21 +00:00
case ' P ' :
{
std : : string password ;
std : : cout < < " Please enter a new password: " ;
std : : cin > > password ;
( * sockets ) [ number ] - > changeSocketPassword ( QString : : fromStdString ( password ) ) ;
break ;
}
2015-02-01 01:42:45 +00:00
case ' q ' :
cont = false ;
emit ( QCoreApplication : : quit ( ) ) ;
break ;
case ' s ' :
std : : cin > > number ;
- - number ; // count from 0
listSockets ( ) ;
break ;
2015-02-15 12:31:21 +00:00
case ' t ' :
{
int timezone ;
std : : cout < < " Please enter a new timezone (integer from -11 to 12): " ;
std : : cin > > timezone ;
( * sockets ) [ number ] - > changeTimezone ( timezone ) ;
break ;
}
2015-02-01 01:42:45 +00:00
default :
std : : cout < < " Invalid command: try again " < < std : : endl ;
2015-01-31 18:12:20 +00:00
}
}
}
void ConsoleReader : : listSockets ( )
{
2015-02-01 01:42:45 +00:00
for ( std : : vector < Socket * > : : const_iterator i = sockets - > begin ( ) ; i ! = sockets - > end ( ) ; + + i )
2015-01-31 18:12:20 +00:00
{
2015-02-15 12:31:21 +00:00
std : : cout < < " _____________________________________________________________________________ \n " < < std : : endl ;
2015-02-01 01:42:45 +00:00
std : : cout < < " IP Address: " < < ( * i ) - > ip . toString ( ) . toStdString ( ) < < " \t MAC Address: " < < ( * i ) - > mac . toHex ( ) . toStdString ( ) < < " \t Power: " < < ( ( * i ) - > powered ? " On " : " Off " ) < < std : : endl ;
2015-02-22 23:20:20 +00:00
std : : cout < < " Socket Name: " < < ( * i ) - > socketName . toStdString ( ) < < " \t Remote Password: " < < ( * i ) - > remotePassword . toStdString ( ) < < " \t Timezone: " < < ( * i ) - > timeZone . toHex ( ) . toStdString ( ) < < std : : endl ;
2015-02-21 21:14:22 +00:00
std : : cout < < " Countdown: " < < ( * i ) - > countdown . toHex ( ) . toStdString ( ) < < std : : endl ;
2015-01-31 18:12:20 +00:00
}
2015-02-15 12:31:21 +00:00
std : : cout < < " _____________________________________________________________________________ \n " < < std : : endl ;
2015-02-22 23:20:20 +00:00
std : : cout < < " a - add unpaired socket (WiFi needed) \n d - update table data \n n - change socket name (max 16 characters) \n p - toggle power state \n " ;
std : : cout < < " P - change remote password (max 12 characters) \n q - quit \n s - pick another socket (default is 1) \n t - change timezone " < < std : : endl ;
2015-02-15 15:26:37 +00:00
std : : cout < < " Enter command: " < < std : : endl ;
2015-01-31 18:12:20 +00:00
}