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 ) ), this, SLOT( errorSender( DeviceManager::ErrorCode ) ) );
85 connect( iModeToggler, SIGNAL( changingMode( const QString & ) ), this, SIGNAL( changingMode( const QString & ) ) );
86 connect( iModeToggler, SIGNAL( toggleErrorSending( bool ) ), this, SLOT( toggleErrorSending( bool ) ) );
87 iModeToggler->start();
90 bool DeviceManager::setCurrentOperationMode()
92 qDebug() << "DeviceManager::currentOperationMode()";
93 QStringList modeResult;
94 if ( !iDataStorage->readData( iDataStorage->dataSectionToString( DeviceDataStorage::DeviceMode ), modeResult ) )
96 errorSender( ModeNotFetched );
101 if ( !modeResult.empty() )
103 iMode = ( OperationMode )modeResult.at( 0 ).toInt();
104 if ( iMode == StandAloneModeInProgress )
106 if ( !finalizeStandAloneMode() )
109 iMode = StandAloneMode;
112 else //this must be the first time, so no mode info saved yet
113 iMode = StandAloneMode;
118 bool DeviceManager::finalizeStandAloneMode()
120 qDebug() << "DeviceManager::finalizeStandAloneMode()";
121 if ( !OperationModeToggler::storeOperationMode( StandAloneMode, iDataStorage ) || !iConfigurator->toggleInitScript( false ) ) {
122 errorSender( DeviceManager::ModeNotStored );
128 void DeviceManager::handleKeyPresses( bool aHandle )
130 qDebug() << "DeviceManager::handleKeyPresses( bool )";
132 disconnect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
134 connect( iHWKeyListener, SIGNAL( HWKeyFullScreenPressed() ), this, SLOT( HWKeyFullScreenPressed() ) );
137 void DeviceManager::HWKeyFullScreenPressed()
139 qDebug() << "DeviceManager::HWKeyFullScreenPressed()";
141 // no more key presses before this one is handled
142 handleKeyPresses( false );
144 OperationMode nextMode;
148 nextMode = StandAloneMode;
151 nextMode = KioskMode;
154 nextMode = EmptyMode;
157 if ( nextMode != EmptyMode )
158 emit changeModeOrdered( nextMode );
160 handleKeyPresses( true );
163 void DeviceManager::errorSender( DeviceManager::ErrorCode aErrorCode, const QString &aAddInfo )
165 qDebug() << "DeviceManager::errorSender( ErrorCode, QString & )";
166 qDebug() << "DeviceManager::errorSender: aErrorCode == " << aErrorCode << " " << aAddInfo;
167 if ( !iSendErrorMessages )
170 emit error( ERROR_BASE + ( int )aErrorCode, aAddInfo );
173 void DeviceManager::toggleErrorSending( bool aToggle )
175 iSendErrorMessages = aToggle;
178 void DeviceManager::modeChanged()
180 if( iModeToggler != 0 ) {
181 if ( iModeToggler->success() ) //mode changing went well
182 iConfigurator->restartDevice();
184 emit changingModeFailed();
189 //in case device restarting fails we just continue
190 handleKeyPresses( true );