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-08-18 15:29:09 +01: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-05-26 23:53:21 +01:00
std : : cout < < " Copyright (C) 2015 Andrius Štikonas. \n License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> \n This is free software: you are free to change and redistribute it. \n There is NO WARRANTY, to the extent permitted by law. " < < std : : endl ;
2015-02-28 23:30:00 +00:00
connectSignals ( ) ;
2015-02-03 01:24:47 +00:00
listSockets ( ) ;
std : : string command ;
2015-01-31 18:12:20 +00:00
unsigned int number = 0 ;
bool cont = true ;
2015-08-18 15:29:09 +01:00
while ( cont ) {
2015-01-31 18:12:20 +00:00
std : : cin > > command ;
2015-08-18 15:29:09 +01:00
switch ( command [ 0 ] ) {
case ' a ' : {
2015-02-28 23:30:00 +00:00
std : : cout < < " Please set your Orvibo socket to pair mode (rapidly blinking blue light) and wait until new wifi network (WiWo-S20) appears " < < std : : endl ;
2015-05-26 00:02:19 +01:00
std : : string ssid , password ;
std : : cout < < " Wireless name ( \" c \" for current wifi): " ;
std : : cin > > ssid ;
2015-02-22 23:20:20 +00:00
std : : cout < < " Password: " ;
std : : cin > > password ;
2015-05-26 00:02:19 +01:00
Server * server = new Server ( 48899 , QByteArray : : fromStdString ( ssid ) , QByteArray : : fromStdString ( password ) ) ; // HF-LPB100 chip can be controlled over port 48899
2015-03-11 12:34:56 +00:00
break ;
}
2015-08-18 15:29:09 +01:00
case ' A ' : {
2015-03-11 12:34:56 +00:00
std : : cout < < " Please set your Orvibo socket to factory reset mode (rapidly blinking red light) " < < std : : endl ;
std : : string password ;
std : : cout < < " Password: " ;
std : : cin > > password ;
broadcastPassword ( QString : : fromStdString ( password ) ) ; // HF-LPB100 chip can be controlled over port 49999
2015-02-22 23:20:20 +00:00
break ;
}
2015-08-18 14:25:32 +01:00
case ' c ' :
uint16_t countdown ;
std : : cout < < " Countdown time in seconds: " ;
std : : cin > > countdown ;
( * sockets ) [ number ] - > setCountDown ( countdown ) ;
break ;
case ' C ' :
2015-09-04 22:49:13 +01:00
( * sockets ) [ number ] - > toggleCountDown ( ) ;
2015-08-18 14:25:32 +01:00
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 ;
2015-04-02 22:10:06 +01:00
case ' D ' :
( * sockets ) [ number ] - > discover ( ) ;
break ;
2015-08-18 15:29:09 +01:00
case ' n ' : {
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-05-26 00:02:19 +01:00
case ' o ' :
if ( command = = " off " )
( * sockets ) [ number ] - > powerOff ( ) ;
else if ( command = = " on " )
( * sockets ) [ number ] - > powerOn ( ) ;
break ;
2015-08-18 15:29:09 +01:00
case ' P ' : {
2015-02-15 12:31:21 +00:00
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 ;
2015-08-18 15:29:09 +01:00
emit ( QCoreApplication : : quit ( ) ) ;
2015-02-01 01:42:45 +00:00
break ;
case ' s ' :
std : : cin > > number ;
- - number ; // count from 0
listSockets ( ) ;
break ;
2015-08-18 15:29:09 +01:00
case ' t ' : {
2015-02-15 12:31:21 +00:00
int timezone ;
std : : cout < < " Please enter a new timezone (integer from -11 to 12): " ;
std : : cin > > timezone ;
2015-11-15 03:09:37 +00:00
if ( timezone > = - 11 & & timezone < = 12 )
( * sockets ) [ number ] - > changeTimezone ( timezone ) ;
else
std : : cout < < " Invalid timezone " ;
2015-02-15 12:31:21 +00:00
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-08-18 15:29:09 +01:00
for ( std : : vector < Socket * > : : const_iterator i = sockets - > begin ( ) ; i ! = sockets - > end ( ) ; + + i ) {
2015-02-15 12:31:21 +00:00
std : : cout < < " _____________________________________________________________________________ \n " < < std : : endl ;
2015-08-18 15:29:09 +01: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-11-01 22:25:23 +00:00
std : : cout < < " Socket Name: " < < ( * i ) - > socketName . toStdString ( ) < < " \t Remote Password: " < < ( * i ) - > remotePassword . toStdString ( ) < < " \t Timezone: " < < + ( * i ) - > timezone < < std : : endl ;
2015-08-18 15:29:09 +01:00
std : : cout < < " Countdown: " < < ( * i ) - > countdown < < " " < < ( ( * i ) - > countdownEnabled ? " (enabled) " : " (disabled) " ) < < " \t \t Time: " < < ( * i ) - > socketDateTime . toString ( ) . 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-04-02 22:10:06 +01:00
std : : cout < < " a - add unpaired socket (WiFi needed) \n " ;
std : : cout < < " A - add unpaired socket (no WiFi needed) \n " ;
2015-08-18 14:25:32 +01:00
std : : cout < < " c - set countdown \n " ;
std : : cout < < " C - enable/disable countdown \n " ;
2015-04-02 22:10:06 +01:00
std : : cout < < " d - update table data \n " ;
2015-04-02 22:56:57 +01:00
std : : cout < < " D - resend discovery packet to the current socket \n " ;
2015-04-02 22:10:06 +01:00
std : : cout < < " n - change socket name (max 16 characters) \n " ;
2015-05-27 00:09:50 +01:00
std : : cout < < " p - toggle power state (there are also \" on \" and \" off \" commands) \n " ;
2015-02-22 23:20:20 +00:00
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
}
2015-02-28 23:30:00 +00:00
void ConsoleReader : : connectSignals ( )
{
2015-08-18 15:29:09 +01:00
for ( unsigned i = 0 ; i < sockets - > size ( ) ; + + i ) {
2015-02-28 23:30:00 +00:00
connect ( ( * sockets ) [ i ] , & Socket : : stateChanged , this , & ConsoleReader : : listSockets ) ;
}
}