1 #include "DeviceManager.h"
2 #include "AlarmSender.h"
3 #include "HWKeyListener.h"
4 #include "StartupSettings.h"
5 #include "DeviceDataStorage.h"
6 #include "DeviceConfigurator.h"
7 #include "OperationModeToggler.h"
10 #include <QStringList>
12 DeviceManager::DeviceManager( StartupSettings *aSettings ) :
20 qDebug() << "DeviceManager::DeviceManager( StartupSettings * )";
22 iSettings = aSettings;
23 iSendErrorMessages = true;
26 DeviceManager::~DeviceManager()
28 qDebug() << "DeviceManager::~DeviceManager()";
37 delete iHWKeyListener;
41 void DeviceManager::initDeviceManager()
43 qDebug() << "DeviceManager::init()";
45 qRegisterMetaType<DeviceManager::ErrorCode>("DeviceManager::ErrorCode");
47 iDataStorage = new DeviceDataStorage();
48 connect( iDataStorage, SIGNAL( dataStorageInitFailed( DeviceManager::ErrorCode ) ),
49 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
51 iAlarmSender = new AlarmSender( iDataStorage );
52 connect( iAlarmSender, SIGNAL( alarmSendingFailed( DeviceManager::ErrorCode, const QString& ) ),
53 this, SLOT( errorSender( DeviceManager::ErrorCode, const QString& ) ) );
55 iConfigurator = new DeviceConfigurator( iDataStorage );
56 connect( iConfigurator, SIGNAL( configuringError( DeviceManager::ErrorCode ) ),
57 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
59 if ( !iDataStorage->initDataStorage() || !setCurrentOperationMode() )
62 iHWKeyListener = new HWKeyListener();
63 handleHWKeyPresses( true );
66 DeviceManager::OperationMode DeviceManager::currentOperationMode()
71 QString DeviceManager::operationModeToString( OperationMode aMode )
78 return "Stand Alone-mode";
84 void DeviceManager::changeMode()
86 qDebug() << "void DeviceManager::changeMode()";
87 if( iModeToggler == 0 ) {
88 iModeToggler = new OperationModeToggler( iMode, iSettings, iAlarmSender, iConfigurator, iDataStorage );
89 connect( iModeToggler, SIGNAL( finished() ), this, SLOT( modeChanged() ) );
90 connect( iModeToggler, SIGNAL( error( DeviceManager::ErrorCode, const QString & ) ),
91 this, SLOT( errorSender( DeviceManager::ErrorCode, const QString & ) ) );
92 connect( iModeToggler, SIGNAL( changingMode( const QString & ) ), this, SIGNAL( changingMode( const QString & ) ) );
93 connect( iModeToggler, SIGNAL( toggleErrorSending( bool ) ), this, SLOT( toggleErrorSending( bool ) ) );
94 iModeToggler->start();
98 bool DeviceManager::setCurrentOperationMode()
100 qDebug() << "DeviceManager::setCurrentOperationMode()";
101 QStringList modeResult;
102 if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
104 errorSender( ModeNotFetched );
109 if ( !modeResult.empty() )
111 iMode = ( OperationMode )modeResult.at( 0 ).toInt();
112 if ( iMode == StandAloneModeInProgress )
114 if ( !finalizeStandAloneMode() )
117 iMode = StandAloneMode;
120 else //this must be the first time, so no mode info saved yet
121 iMode = StandAloneMode;
126 bool DeviceManager::finalizeStandAloneMode()
128 qDebug() << "DeviceManager::finalizeStandAloneMode()";
129 if ( !OperationModeToggler::storeOperationMode( StandAloneMode, iDataStorage ) || !iConfigurator->toggleInitScript( false ) ) {
130 errorSender( DeviceManager::ModeNotStored );
136 void DeviceManager::HWKeyFullScreenPressed()
138 qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
139 handleHWKeyPresses( false );
140 // no more key presses before this one is handled
141 //handleKeyPresses( false );
142 OperationMode nextMode;
145 nextMode = StandAloneMode;
148 nextMode = KioskMode;
151 nextMode = EmptyMode;
154 if ( nextMode != EmptyMode )
155 emit changeModeOrdered( nextMode );
158 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
160 qDebug() << "DeviceManager::errorSender( ErrorCode, QString & )";
161 qDebug() << "DeviceManager::errorSender: aErrorCode == " << aErrorCode << " " << aAddInfo;
162 if ( !iSendErrorMessages )
165 emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );
168 void DeviceManager::toggleErrorSending( bool aToggle )
170 qDebug() << "DeviceManager::toggleErrorSending( bool )";
171 iSendErrorMessages = aToggle;
174 void DeviceManager::modeChanged()
176 qDebug() << "DeviceManager::modeChanged()";
177 if( iModeToggler != 0 ) {
178 if ( iModeToggler->success() ) {//mode changing went well
179 emit changingMode( "Restarting device" );
181 iConfigurator->restartDevice();
184 emit changeModeFailed();
188 handleHWKeyPresses( true );
191 void DeviceManager::handleHWKeyPresses( bool aToggle )
193 qDebug() << "DeviceManager::handleHWKeyPresses( bool )";
195 connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
197 disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );