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 )
14 qDebug() << "DeviceManager::DeviceManager( StartupSettings * )";
16 iSettings = aSettings;
17 iSendErrorMessages = true;
20 DeviceManager::~DeviceManager()
22 qDebug() << "DeviceManager::~DeviceManager()";
31 delete iHWKeyListener;
35 void DeviceManager::initDeviceManager()
37 qDebug() << "DeviceManager::init()";
38 iDataStorage = new DeviceDataStorage();
39 connect( iDataStorage, SIGNAL( dataStorageInitFailed( DeviceManager::ErrorCode ) ),
40 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
42 iAlarmSender = new AlarmSender( iDataStorage );
43 connect( iAlarmSender, SIGNAL( alarmSendingFailed( DeviceManager::ErrorCode, const QString& ) ),
44 this, SLOT( errorSender( DeviceManager::ErrorCode, const QString& ) ) );
46 iConfigurator = new DeviceConfigurator( iDataStorage );
47 connect( iConfigurator, SIGNAL( configuringError( DeviceManager::ErrorCode ) ),
48 this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
50 if ( !iDataStorage->initDataStorage() || !setCurrentOperationMode() )
53 iHWKeyListener = new HWKeyListener();
54 handleKeyPresses( true );
57 DeviceManager::OperationMode DeviceManager::currentOperationMode()
62 QString DeviceManager::operationModeToString( OperationMode aMode )
69 return "Stand Alone-mode";
75 void DeviceManager::changeMode( bool aChange )
77 qDebug() << "void DeviceManager::changeMode()";
79 handleKeyPresses( true );
82 iModeToggler = new OperationModeToggler( iMode, iSettings, iAlarmSender, iConfigurator, iDataStorage );
83 connect( iModeToggler, SIGNAL( finished() ), this, SLOT( modeChanged() ) );
84 connect( iModeToggler, SIGNAL( error( DeviceManager::ErrorCode, const QString & ) ),
85 this, SLOT( errorSender( DeviceManager::ErrorCode, const QString & ) ) );
86 connect( iModeToggler, SIGNAL( changingMode( const QString & ) ), this, SIGNAL( changingMode( const QString & ) ) );
87 connect( iModeToggler, SIGNAL( toggleErrorSending( bool ) ), this, SLOT( toggleErrorSending( bool ) ) );
88 iModeToggler->start();
91 bool DeviceManager::setCurrentOperationMode()
93 qDebug() << "DeviceManager::setCurrentOperationMode()";
94 QStringList modeResult;
95 if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
97 errorSender( ModeNotFetched );
102 if ( !modeResult.empty() )
104 iMode = ( OperationMode )modeResult.at( 0 ).toInt();
105 if ( iMode == StandAloneModeInProgress )
107 if ( !finalizeStandAloneMode() )
110 iMode = StandAloneMode;
113 else //this must be the first time, so no mode info saved yet
114 iMode = StandAloneMode;
119 bool DeviceManager::finalizeStandAloneMode()
121 qDebug() << "DeviceManager::finalizeStandAloneMode()";
122 if ( !OperationModeToggler::storeOperationMode( StandAloneMode, iDataStorage ) || !iConfigurator->toggleInitScript( false ) ) {
123 errorSender( DeviceManager::ModeNotStored );
129 void DeviceManager::handleKeyPresses( bool aHandle )
131 qDebug() << "DeviceManager::handleKeyPresses( bool )";
133 disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
135 connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
138 void DeviceManager::HWKeyFullScreenPressed()
140 qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
142 // no more key presses before this one is handled
143 handleKeyPresses( false );
145 OperationMode nextMode;
149 nextMode = StandAloneMode;
152 nextMode = KioskMode;
155 nextMode = EmptyMode;
158 if ( nextMode != EmptyMode )
159 emit changeModeOrdered( nextMode );
161 handleKeyPresses( true );
164 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
166 qDebug() << "DeviceManager::errorSender( ErrorCode, QString & )";
167 qDebug() << "DeviceManager::errorSender: aErrorCode == " << aErrorCode << " " << aAddInfo;
168 if ( !iSendErrorMessages )
171 emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );
174 void DeviceManager::toggleErrorSending( bool aToggle )
176 qDebug() << "DeviceManager::toggleErrorSending( bool )";
177 iSendErrorMessages = aToggle;
180 void DeviceManager::modeChanged()
182 qDebug() << "DeviceManager::modeChanged()";
183 if( iModeToggler != 0 ) {
184 if ( iModeToggler->success() ) //mode changing went well
185 iConfigurator->restartDevice();
187 emit changeModeFailed();
192 //in case device restarting fails we just continue
193 handleKeyPresses( true );