diff -r 753e33780645 -r 453d490c84a5 testconnuis/htiui/HtiAdmin/src/HtiAdminAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testconnuis/htiui/HtiAdmin/src/HtiAdminAppUi.cpp Fri Sep 17 08:58:49 2010 +0300 @@ -0,0 +1,1143 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: AppUi implementation, all functions here +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +#include +#include // for KHTICommInterfaceUid +#include +#include + +#include "HtiAdmin.pan" +#include "HtiAdminAppUi.h" +#include "HtiAdminAppView.h" +#include "HtiAdmin.hrh" + + +#ifdef __ENABLE_LOGGING__ + +#include + +_LIT(KLogFolder, "hti"); +_LIT(KLogFile, "htiadmin.txt"); +#define HTI_LOG_TEXT(a1) {_LIT(temp, a1); RFileLogger::Write(KLogFolder, KLogFile, EFileLoggingModeAppend, temp);} +#define HTI_LOG_FORMAT(a1,a2) {_LIT(temp, a1); RFileLogger::WriteFormat(KLogFolder, KLogFile, EFileLoggingModeAppend, temp, (a2));} +#define HTI_LOG_DES(a1) {RFileLogger::Write(KLogFolder, KLogFile, EFileLoggingModeAppend, (a1));} + +#else // __ENABLE_LOGGING__ + +#define HTI_LOG_TEXT(a1) +#define HTI_LOG_FORMAT(a1,a2) +#define HTI_LOG_DES(a1) + +#endif // __ENABLE_LOGGING__ + +// CONSTANTS +_LIT( KHtiWatchDogMatchPattern, "HtiWatchDog*" ); +_LIT( KHtiFrameworkExe, "HtiFramework.exe" ); +_LIT( KHtiMatchPattern, "HtiFramework*" ); +_LIT( KHtiFrameworkCaption, "HTI status: " ); +_LIT( KHtiAutoStartCaption, "AutoStart: " ); +_LIT( KHtiVersionCaption, "Version: " ); +_LIT( KHtiSelectedCommCaption, "Communication: " ); +_LIT( KHtiAdminStartParameter, "admin" ); +_LIT( KHtiAdminVersionFormat, "%u.%u.%u (%uwk%02u)" ); +_LIT( KHtiAdminAboutVersionFormat, "Version %u.%u.%u - " ); +const static TInt KTerminateReason = 1; + + +const TInt32 KHTIImplUidSerial = {0x10210CCA}; +const TInt32 KHTIImplUidBluetooth = {0x200212CC}; +const TInt32 KHTIImplUidIPComm = {0x200212CE}; + +// configuration file constants +_LIT( KCfgFilePath, "\\"); +_LIT( KHtiCfg, "hti.cfg" ); +_LIT( KHtiBtCommCfg, "HTIBtComm.cfg" ); +_LIT( KHtiSerialCommCfg , "HTISerialComm.cfg" ); +_LIT( KHtiIPCommCfg, "HTIIPComm.cfg" ); +// hti.cfg +_LIT8( KCommPlugin, "CommPlugin" ); +_LIT8( KPriority, "Priority" ); +_LIT8( KShowConsole, "ShowConsole" ); +_LIT8( KEnableHtiWatchDog, "EnableHtiWatchDog" ); +_LIT8( KEnableHtiAutoStart, "EnableHtiAutoStart" ); +_LIT8( KShowErrorDialogs, "ShowErrorDialogs" ); +// HtiBtComm.cfg +_LIT8( KBtDeviceAddress, "BtDeviceAddress" ); +_LIT8( KBtDeviceName, "BtDeviceName" ); +// HtiSerialComm.cfg +_LIT8( KCommPortNumber, "CommPort" ); +// HTIIPComm.cfg +_LIT8( KLocalPort, "LocalPort" ); +_LIT8( KRemoteHost, "RemoteHost" ); +_LIT8( KRemotePort, "RemotePort" ); +_LIT8( KIAPName, "IAPName" ); + + +// ConstructL is called by the application framework +void CHtiAdminAppUi::ConstructL() + { + BaseConstructL( EAknEnableSkin ); + iAppView = CHtiAdminAppView::NewL( ClientRect() ); + AddToStackL( iAppView ); + + iAppView->SetCaption( KHtiFrameworkCaption ); + iAppView->SetVersionCaption( KHtiVersionCaption ); + iAppView->SetAutoStartCaption( KHtiAutoStartCaption ); + iAppView->SetSelectedCommCaption( KHtiSelectedCommCaption ); + UpdateVersion(); + UpdateStatusL(); + StartTimer(); + iHtiCfg = CHtiCfg::NewL(); + UpdateAutoStartStatus(); // uses iHtiCfg + UpdateSelectedComm(); // uses iHtiCfg + } + +CHtiAdminAppUi::CHtiAdminAppUi() + { + iHtiCfg = NULL; + } + +CHtiAdminAppUi::~CHtiAdminAppUi() + { + KillTimer(); + if ( iAppView ) + { + RemoveFromStack( iAppView ); + delete iAppView; + iAppView = NULL; + } + + if ( iHtiCfg ) + delete iHtiCfg; + } + +void CHtiAdminAppUi::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane *aMenuPane) + { + HTI_LOG_FORMAT( "DynInitMenuPaneL 0x%x", aResourceId ); + + if ( aResourceId == R_HTIADMIN_MENU ) + { + RProcess prs; + if ( OpenHtiProcess( prs ) ) + { + if ( prs.ExitType() == EExitPending ) + { + aMenuPane->SetItemDimmed( EHtiAdminStart, ETrue ); + aMenuPane->SetItemDimmed( EHtiAdminSubOptions, ETrue ); + prs.Close(); + return; + } + } + aMenuPane->SetItemDimmed( EHtiAdminStop, ETrue ); + prs.Close(); + } + + else if ( aResourceId == R_HTIADMIN_SUBMENU_OPTIONS ) + { +#if !defined(__ENABLE_LOGGING__) + aMenuPane->SetItemDimmed( EHtiAdminSubLogs, ETrue ); +#endif + } + else if ( aResourceId == R_HTIADMIN_SUBMENU_PRIORITY ) + { + TInt priority = 3; // default value + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, priority = iHtiCfg->GetParameterIntL( KPriority ) ); + } + + switch ( priority ) + { + case 1: + aMenuPane->SetItemButtonState( EHtiAdminPriorityBackground, EEikMenuItemSymbolOn ); + break; + case 2: + aMenuPane->SetItemButtonState( EHtiAdminPriorityForeground, EEikMenuItemSymbolOn ); + break; + case 4: + aMenuPane->SetItemButtonState( EHtiAdminPriorityAbsoluteHigh, EEikMenuItemSymbolOn ); + break; + default: + aMenuPane->SetItemButtonState( EHtiAdminPriorityHigh, EEikMenuItemSymbolOn ); + break; + } + } + + else if ( aResourceId == R_HTIADMIN_SUBMENU_AUTOSTART ) + { +#ifdef __WINS__ + TInt value = 0; // default value for emulator +#else + TInt value = 1; // default value for hardware +#endif + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, value = iHtiCfg->GetParameterIntL( KEnableHtiAutoStart ) ); + } + + if ( value ) + aMenuPane->SetItemButtonState( EHtiAdminAutoStartEnable, EEikMenuItemSymbolOn ); + else + aMenuPane->SetItemButtonState( EHtiAdminAutoStartDisable, EEikMenuItemSymbolOn ); + } + + else if ( aResourceId == R_HTIADMIN_SUBMENU_WATCHDOG ) + { + TInt value = 0; // default value + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, value = iHtiCfg->GetParameterIntL( KEnableHtiWatchDog ) ); + } + + if ( value ) + aMenuPane->SetItemButtonState( EHtiAdminWatchDogEnable, EEikMenuItemSymbolOn ); + else + aMenuPane->SetItemButtonState( EHtiAdminWatchDogDisable, EEikMenuItemSymbolOn ); + } + + else if ( aResourceId == R_HTIADMIN_SUBMENU_CONSOLE ) + { + TInt value = 0; // default value + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, value = iHtiCfg->GetParameterIntL( KShowConsole ) ); + } + + if ( value ) + aMenuPane->SetItemButtonState( EHtiAdminConsoleEnable, EEikMenuItemSymbolOn ); + else + aMenuPane->SetItemButtonState( EHtiAdminConsoleDisable, EEikMenuItemSymbolOn ); + } + + else if ( aResourceId == R_HTIADMIN_SUBMENU_ERROR_DIALOGS ) + { + TInt value = 1; // default value + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, value = iHtiCfg->GetParameterIntL( KShowErrorDialogs ) ); + } + + if ( value ) + aMenuPane->SetItemButtonState( EHtiAdminErrorDialogsEnable, EEikMenuItemSymbolOn ); + else + aMenuPane->SetItemButtonState( EHtiAdminErrorDialogsDisable, EEikMenuItemSymbolOn ); + } + } + + +// Helper function to get data from a dialog +TInt ShowDialog(TInt aResourceId, const TDesC &aText, TDes8 &aValue) + { + TBuf data; + + CAknTextQueryDialog* dlg; + dlg = new (ELeave) CAknTextQueryDialog(data); + CleanupStack::PushL(dlg); + dlg->SetPromptL(aText); + dlg->SetMaxLength(KMaxParameterValueLength); + CleanupStack::Pop(); // dlg + + if ( dlg->ExecuteLD( aResourceId ) ) + { + aValue.Copy(data); + return KErrNone; + } + + return KErrCancel; + } + +void CHtiAdminAppUi::ShowBTListQueryL() + { + TInt selectedOption( KErrNotFound ); + + CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat(20); + CleanupStack::PushL(array); + + array->AppendL(_L("By BT address")); + array->AppendL(_L("By BT Name")); + array->AppendL(_L("Search when starting")); + + CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog( &selectedOption ); + dlg->PrepareLC(R_QUERY_DIALOG); + dlg->SetItemTextArray(array); + dlg->SetOwnershipType(ELbmDoesNotOwnItemArray); + dlg->RunLD(); + + CleanupStack::PopAndDestroy(array); + + if(selectedOption == 0) + { + HandleBtByAddress(); + } + else if(selectedOption == 1) + { + HandleBtByName(); + } + else if (selectedOption == 2) + { + HandleBtSearch(); + } + } + +void CHtiAdminAppUi::ShowIPListQueryL() + { + TInt selectedOption( KErrNotFound ); + + CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat(10); + CleanupStack::PushL(array); + + array->AppendL(_L("Listen")); + array->AppendL(_L("Connect")); + + CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog( &selectedOption ); + dlg->PrepareLC(R_QUERY_DIALOG); + dlg->SetItemTextArray(array); + dlg->SetOwnershipType(ELbmDoesNotOwnItemArray); + dlg->RunLD(); + + CleanupStack::PopAndDestroy(array); + + if(selectedOption == 0) + { + HandleIPListen(); + } + else if(selectedOption == 1) + { + HandleIPConnect(); + } + } + +void CleanupRArray( TAny* object ) + { + ( ( RImplInfoPtrArray* ) object )->ResetAndDestroy(); + } + +void CHtiAdminAppUi::ShowCommsListQueryL() + { + TInt selectedOption( KErrNotFound ); + + const TInt pluginNameArrayGranularity (15); + CDesCArrayFlat* pluginNameArray = new (ELeave) CDesCArrayFlat(pluginNameArrayGranularity); + CleanupStack::PushL(pluginNameArray); + + RImplInfoPtrArray implInfoArray; + CleanupStack::PushL( TCleanupItem( CleanupRArray, &implInfoArray ) ); + + REComSession::ListImplementationsL( KHTICommInterfaceUid, implInfoArray ); + + for ( TInt i = 0; i < implInfoArray.Count(); ++i ) + { + pluginNameArray->AppendL(implInfoArray[i]->DisplayName()); + } + + CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog( &selectedOption ); + + dlg->PrepareLC(R_QUERY_DIALOG); + dlg->SetHeaderTextL(_L("Select communication")); + dlg->SetItemTextArray(pluginNameArray); + dlg->SetOwnershipType(ELbmDoesNotOwnItemArray); + + if(dlg->RunLD()) + { + TInt32 uid = implInfoArray[selectedOption]->ImplementationUid().iUid; + switch(uid) + { + case KHTIImplUidSerial: + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8( "SERIAL" ) ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TBuf8 portNum; + if ( !ShowDialog( R_NUMERIC_QUERY, _L("Com port number:"), portNum ) ) + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiSerialCommCfg ) ); + iHtiCfg->SetParameterL( KCommPortNumber, portNum ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiSerialCommCfg ); + } + UpdateSelectedComm(); + } + break; + + case KHTIImplUidBluetooth: + { + ShowBTListQueryL(); + } + break; + + case KHTIImplUidIPComm: + { + ShowIPListQueryL(); + } + break; + default: + { + //Just save the conf info for other plugins + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, implInfoArray[selectedOption]->DataType() ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + UpdateSelectedComm(); + } + } + } + CleanupStack::PopAndDestroy(2, pluginNameArray); + } + +void CHtiAdminAppUi::HandleBtByAddress() + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8( "BTSERIAL" ) ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiBtCommCfg ) ); + iHtiCfg->RemoveParameterL( KBtDeviceName ); + iHtiCfg->RemoveParameterL( KBtDeviceAddress ); + + TBuf8 address; + if ( !ShowDialog( R_TEXT_QUERY, _L("BT address:"), address) ) + { + iHtiCfg->SetParameterL( KBtDeviceAddress, address); + } + + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiBtCommCfg); + UpdateSelectedComm(); + } + +void CHtiAdminAppUi::HandleBtByName() + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8( "BTSERIAL" ) ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiBtCommCfg ) ); + iHtiCfg->RemoveParameterL( KBtDeviceName ); + iHtiCfg->RemoveParameterL( KBtDeviceAddress ); + + TBuf8 name; + if ( !ShowDialog( R_TEXT_QUERY, _L( "BT name:" ), name ) ) + { + iHtiCfg->SetParameterL( KBtDeviceName, name ); + } + + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiBtCommCfg ); + UpdateSelectedComm(); + } + +void CHtiAdminAppUi::HandleBtSearch() + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8( "BTSERIAL" ) ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiBtCommCfg ) ); + iHtiCfg->RemoveParameterL( KBtDeviceName ); + iHtiCfg->RemoveParameterL( KBtDeviceAddress ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiBtCommCfg ); + UpdateSelectedComm(); + } + +void CHtiAdminAppUi::HandleIPListen() + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8("IPCOMM")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiIPCommCfg ) ); + iHtiCfg->RemoveParameterL( KRemotePort ); + iHtiCfg->RemoveParameterL( KRemoteHost ); + + TBuf8 localPort; + if ( !ShowDialog( R_TEXT_QUERY, _L( "Local port:" ), localPort ) ) + { + iHtiCfg->SetParameterL( KLocalPort, localPort ); + ShowCommsDBListQueryL(); + } + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiIPCommCfg ); + UpdateSelectedComm(); + } + +void CHtiAdminAppUi::HandleIPConnect() + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KCommPlugin, _L8( "IPCOMM" ) ); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiIPCommCfg ) ); + iHtiCfg->RemoveParameterL( KLocalPort ); + TBuf8 remoteHost; + TBuf8 remotePort; + if ( !ShowDialog( R_TEXT_QUERY, _L("Remote host:"), remoteHost ) ) + { + iHtiCfg->SetParameterL( KRemoteHost, remoteHost ); + if ( !ShowDialog( R_TEXT_QUERY, _L( "Remote port:" ), remotePort ) ) + { + iHtiCfg->SetParameterL( KRemotePort, remotePort ); + ShowCommsDBListQueryL(); + } + } + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiIPCommCfg ); + UpdateSelectedComm(); + } + + +// handle any menu commands +void CHtiAdminAppUi::HandleCommandL(TInt aCommand) + { + TFileName cfgFile; + + switch ( aCommand ) + { + case EEikCmdExit: + case EAknSoftkeyExit: + Exit(); + break; + + case EHtiAdminStart: + { + HTI_LOG_TEXT( "Start" ); + RProcess prs; + TInt err; + TBool isRunning = EFalse; + if ( OpenHtiProcess( prs ) ) + { + if ( prs.ExitType() == EExitPending ) + { + isRunning = ETrue; + _LIT(KText, "Already running"); + iAppView->SetStatus( KText ); + } + prs.Close(); + } + + if ( !isRunning ) + { + HTI_LOG_TEXT( "create process" ); + err = prs.Create( KHtiFrameworkExe, KHtiAdminStartParameter ); + if ( err == KErrNone ) + { + prs.Resume(); + prs.Close(); + UpdateStatusL(); + HTI_LOG_TEXT("create done"); + } + else + { + TBuf<64> msg; + msg.Format( _L("Error in starting: %d"), err ); + iAppView->SetStatus( msg ); + HTI_LOG_TEXT("create error"); + } + } + } + break; + + case EHtiAdminStop: + { + HTI_LOG_TEXT("Stop"); + + // kill the watchdog to prevent it from restarting HTI again + KillHtiWatchDogL(); + + RProcess prs; + if ( OpenHtiProcess( prs ) ) + { + if ( prs.ExitType() == EExitPending ) + { + HTI_LOG_TEXT("try to kill"); + prs.Kill( KTerminateReason ); + UpdateStatusL(); + } + else + { + _LIT(KText, "Already stopped"); + iAppView->SetStatus( KText ); + } + prs.Close(); + } + } + break; + + case EHtiAdminAbout: + { + HTI_LOG_TEXT("About"); + TDateSuffix suffix( KHtiVersionDay - 1 ); + TMonthName month( ( TMonth ) ( KHtiVersionMonth - 1 ) ); + TBuf<64> msgPart1; + msgPart1.Format( KHtiAdminAboutVersionFormat, + KHtiVersionMajor, KHtiVersionMinor, KHtiVersionBuild ); + msgPart1.AppendNum( KHtiVersionDay ); + msgPart1.Append( suffix ); + msgPart1.Append( ' ' ); + msgPart1.Append( month ); + msgPart1.Append( ' ' ); + msgPart1.AppendNum( KHtiVersionYear ); + msgPart1.Append( '.' ); + msgPart1.Append( ' ' ); + HBufC* msgPart2 = iEikonEnv->AllocReadResourceLC( R_HTIADMIN_ABOUT_TEXT ); + HBufC* fullMsg = HBufC::NewLC( msgPart1.Length() + msgPart2->Length() ); + fullMsg->Des().Append( msgPart1 ); + fullMsg->Des().Append( *msgPart2 ); + CAknMessageQueryDialog* dialog = new ( ELeave ) CAknMessageQueryDialog; + dialog->PrepareLC( R_HTIADMIN_ABOUT_DIALOG ); + dialog->SetMessageTextL( *fullMsg ); + dialog->RunLD(); + CleanupStack::PopAndDestroy( 2 ); // fullMsg, msgPart2 + } + break; + + case EHtiAdminSubOptions: + break; + + case EHtiAdminSubLogs: + break; + + case EHtiAdminCreateLogFolder: +#ifdef __ENABLE_LOGGING__ + { + TInt err = KErrNone; + RFs fs; + err = fs.Connect(); + if ( err == KErrNone ) + { + err = fs.MkDirAll(_L("c:\\logs\\hti\\")); + } + fs.Close(); + } +#endif + break; + + case EHtiAdminRemoveLogFolder: +#ifdef __ENABLE_LOGGING__ + { + TInt err = KErrNone; + RFs fs; + err = fs.Connect(); + if ( err == KErrNone ) + { + CFileMan *fileman = CFileMan::NewL( fs ); + fileman->RmDir( _L( "c:\\logs\\hti\\" ) ); + delete fileman; + } + fs.Close(); + } +#endif + break; + + case EHtiAdminClearLogs: +#ifdef __ENABLE_LOGGING__ + { + TInt err = KErrNone; + RFs fs; + err = fs.Connect(); + if ( err == KErrNone ) + { + CFileMan *fileman = CFileMan::NewL( fs ); + fileman->Delete( _L( "c:\\logs\\hti\\*" ) ); + fileman->Delete( _L( "c:\\HTI_*.log" ) ); + delete fileman; + } + fs.Close(); + } +#endif + break; + + case EHtiAdminSubComms: + { + ShowCommsListQueryL(); + } + break; + + case EHtiAdminSubPriority: + break; + + case EHtiAdminPriorityBackground: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KPriority, _L8("1")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminPriorityForeground: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KPriority, _L8("2")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminPriorityHigh: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KPriority, _L8("3")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminPriorityAbsoluteHigh: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KPriority, _L8("4")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminSubAutoStart: + break; + + case EHtiAdminAutoStartEnable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KEnableHtiAutoStart, _L8("1")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + UpdateAutoStartStatus(); + break; + + case EHtiAdminAutoStartDisable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KEnableHtiAutoStart, _L8("0")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + UpdateAutoStartStatus(); + break; + + case EHtiAdminSubWatchDog: + break; + + case EHtiAdminWatchDogEnable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KEnableHtiWatchDog, _L8("1")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminWatchDogDisable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KEnableHtiWatchDog, _L8("0")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminSubConsole: + break; + + case EHtiAdminConsoleEnable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KShowConsole, _L8("1")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminConsoleDisable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KShowConsole, _L8("0")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminErrorDialogsEnable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KShowErrorDialogs, _L8("1")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminErrorDialogsDisable: + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + iHtiCfg->SetParameterL( KShowErrorDialogs, _L8("0")); + iHtiCfg->SaveCfgL( KCfgFilePath, KHtiCfg ); + break; + + case EHtiAdminSubSetParam: + break; + + case EHtiAdminHtiCfg: + cfgFile = KHtiCfg; + + case EHtiAdminHtiBtCommCfg: + if ( !cfgFile.Length() ) + cfgFile = KHtiBtCommCfg; + + case EHtiAdminHtiIPCommCfg: + if ( !cfgFile.Length() ) + cfgFile = KHtiIPCommCfg; + + case EHtiAdminHtiSerialCommCfg: + { + if ( !cfgFile.Length() ) + cfgFile = KHtiSerialCommCfg; + + TBuf8 parameterName; + if ( !ShowDialog( R_TEXT_QUERY, _L("Parameter name:"), parameterName) ) + { + TBuf8 parameterValue; + if ( !ShowDialog( R_TEXT_QUERY, _L("Parameter value:"), parameterValue ) ) + { + TRAP_IGNORE( iHtiCfg->LoadCfgL( KCfgFilePath, cfgFile ) ); + iHtiCfg->SetParameterL( parameterName, parameterValue ); + iHtiCfg->SaveCfgL( KCfgFilePath, cfgFile); + } + } + } + break; + + default: + { + CAknErrorNote* dialog = new(ELeave)CAknErrorNote(ETrue); + dialog->ExecuteLD(_L("Unknown Command Recieved")); + } + break; + } + } + +void CHtiAdminAppUi::HandleForegroundEventL( TBool aForeground ) + { + CAknAppUi::HandleForegroundEventL( aForeground ); + + if ( aForeground ) + { + UpdateStatusL(); + UpdateAutoStartStatus(); + StartTimer(); + } + else + { + KillTimer(); + } + } + +TBool CHtiAdminAppUi::OpenHtiProcess( RProcess& aPrs ) + { + HTI_LOG_TEXT( "OpenHtiProcess" ); + + TFullName processName; + TInt err; + + TFindProcess finder( KHtiMatchPattern ); + err = finder.Next( processName ); + if ( err == KErrNone ) + { + HTI_LOG_TEXT( "try to open..." ); + err = aPrs.Open( finder ); + HTI_LOG_TEXT( "opened" ); + + if ( err == KErrNone ) + { + HTI_LOG_TEXT( "OpenHtiProcess OK" ); + return ETrue; + } + else + { + HTI_LOG_TEXT( "Failed to open process" ); + TBuf<64> msg; + msg.Format( _L( "Error: %d" ), err ); + iAppView->SetStatus( msg ); + } + } + else if ( err == KErrNotFound ) + { + HTI_LOG_TEXT( "Not found" ); + _LIT( KNotFound, "Stopped" ); + iAppView->SetStatus( KNotFound ); + } + else + { + TBuf<64> msg; + msg.Format( _L( "Error: %d" ), err ); + iAppView->SetStatus( msg ); + } + + HTI_LOG_TEXT( "OpenHtiProcess NOK" ); + + return EFalse; + } + + +void CHtiAdminAppUi::UpdateVersion() + { + HTI_LOG_TEXT( "UpdateVersion" ); + TBuf<128> tmp; + tmp.Format( KHtiAdminVersionFormat, KHtiVersionMajor, KHtiVersionMinor, + KHtiVersionBuild, KHtiVersionYear, KHtiVersionWeek ); + iAppView->SetVersion( tmp ); + } + + +void CHtiAdminAppUi::UpdateStatusL() + { + HTI_LOG_TEXT( "UpdateStatusL" ); + RProcess prs; + if ( OpenHtiProcess( prs ) ) + { + HTI_LOG_TEXT( "Update display" ); + TExitType exT = prs.ExitType(); + + switch ( exT ) + { + case EExitPending: + { + _LIT( KTxt, "Running" ); + iAppView->SetStatus( KTxt ); + } + break; + + case EExitKill: + case EExitTerminate: + { + _LIT( KTxt, "Stopped" ); + iAppView->SetStatus( KTxt ); + } + break; + + case EExitPanic: + { + _LIT( KTxt, "Panic" ); + iAppView->SetStatus( KTxt ); + } + break; + }; + prs.Close(); + } + } + +void CHtiAdminAppUi::UpdateAutoStartStatus() + { + HTI_LOG_TEXT( "UpdateAutoStartStatus" ); + TInt value = KErrNotFound; + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TRAP( err, value = iHtiCfg->GetParameterIntL(KEnableHtiAutoStart) ); + } + + if ( value == KErrNotFound ) + { + // Use default values if not found from config. +#ifdef __WINS__ + value = 0; +#else + value = 1; +#endif + } + + if ( value == 0 ) + { + _LIT( KTxt, "Disabled" ); + iAppView->SetAutoStartStatus( KTxt ); + } + else if ( value == 1 ) + { + _LIT( KTxt, "Enabled" ); + iAppView->SetAutoStartStatus( KTxt ); + } + else + { + _LIT( KTxt, "Unknown" ); + iAppView->SetAutoStartStatus( KTxt ); + } + } + +void CHtiAdminAppUi::UpdateSelectedComm() + { + HTI_LOG_TEXT( "UpdateSelectedComm" ); + TBuf<64> commPlugin; + TRAPD( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiCfg ) ); + if ( !err ) + { + TBuf8 commValue; + TRAP( err, commValue = iHtiCfg->GetParameterL( KCommPlugin ) ); + if ( err == KErrNone ) + { + commPlugin.Copy( commValue ); + } + } + // Use default if not found from config + if ( commPlugin.Length() == 0 ) + { + commPlugin.Copy(KCommDefaultImplementation ); + } + iAppView->SetSelectedComm( commPlugin ); + + if ( commPlugin.Compare( _L( "SERIAL" ) ) == 0 ) + { + TInt portNum = 0; + TRAP( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiSerialCommCfg ) ); + if ( err == KErrNone ) + { + TRAP( err, portNum = iHtiCfg->GetParameterIntL( KCommPortNumber ) ); + } + TBuf<16> portBuf; + portBuf.Copy( _L( "Port: " ) ); + portBuf.AppendNum( portNum ); + iAppView->SetCommDetails( portBuf ); + } + + else if ( commPlugin.Compare( _L( "BTSERIAL" ) ) == 0 ) + { + TBuf<64> hostBuf; + TRAP( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiBtCommCfg ) ); + if ( err == KErrNone ) + { + TBuf8 hostValue; + TRAP( err, hostValue = iHtiCfg->GetParameterL( KBtDeviceAddress ) ); + if ( err != KErrNone ) + { + TRAP( err, hostValue = iHtiCfg->GetParameterL( KBtDeviceName ) ); + } + if ( err == KErrNone ) + { + hostBuf.Copy( hostValue ); + } + } + if ( hostBuf.Length() > 0 ) + { + hostBuf.Insert( 0, _L( "Host: " ) ); + } + iAppView->SetCommDetails( hostBuf ); + } + + else if ( commPlugin.Compare( _L( "IPCOMM" ) ) == 0 ) + { + TBuf<128> hostBuf; + TRAP( err, iHtiCfg->LoadCfgL( KCfgFilePath, KHtiIPCommCfg ) ); + if ( err == KErrNone ) + { + TInt localPort = 0; + TRAP( err, localPort = iHtiCfg->GetParameterIntL( KLocalPort ) ); + if ( err == KErrNone && localPort > 0 ) + { + hostBuf.Copy( _L( "Listen: " ) ); + hostBuf.AppendNum( localPort ); + } + else + { + TBuf8 remoteHost; + TInt remotePort = 0; + TRAP( err, remoteHost = iHtiCfg->GetParameterL( KRemoteHost ) ); + if ( err == KErrNone ) + { + TRAP( err, remotePort = iHtiCfg->GetParameterIntL( + KRemotePort ) ); + } + if ( err == KErrNone ) + { + hostBuf.Copy( remoteHost ); + hostBuf.Insert( 0, _L("Connect: " ) ); + hostBuf.Append( ':' ); + hostBuf.AppendNum( remotePort ); + } + else + { + hostBuf.Copy( _L( "Invalid config!" ) ); + } + } + } + iAppView->SetCommDetails( hostBuf ); + } + + else + { + iAppView->SetCommDetails( KNullDesC ); + } + } + +void CHtiAdminAppUi::KillHtiWatchDogL() + { + TFullName processName; + TFindProcess finder( KHtiWatchDogMatchPattern ); + TInt err = finder.Next( processName ); + if ( err == KErrNone ) + { + HTI_LOG_TEXT( "HTI watchdog process found. Trying to open and kill it..." ); + RProcess prs; + User::LeaveIfError( prs.Open( finder ) ); + prs.Kill( KTerminateReason ); + prs.Close(); + HTI_LOG_TEXT( "HTI watchdog killed" ); + } + } + +void CHtiAdminAppUi::StartTimer() + { + // start timer to watch the status + if ( !iPeriodic ) + { + iPeriodic = CPeriodic::NewL( CActive::EPriorityIdle ); + iPeriodic->Start( 1 * 1000 * 1000, + 10 * 1000 * 1000, + TCallBack( TimerCallBackL, this ) ); + } + } + +void CHtiAdminAppUi::KillTimer() + { + if ( iPeriodic ) + { + iPeriodic->Cancel(); + delete iPeriodic; + iPeriodic = NULL; + } + } + +TInt CHtiAdminAppUi::TimerCallBackL( TAny* aPtr ) + { + ( (CHtiAdminAppUi*)aPtr )->UpdateStatusL(); + return ETrue; + } + +void CHtiAdminAppUi::ShowCommsDBListQueryL() + { + TInt selectedOption( KErrNotFound ); + TBuf name; + + CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat(16); + CleanupStack::PushL(array); + + // Get IAP names from the database + CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);; + CleanupStack::PushL(db); + db->ShowHiddenRecords(); + CCommsDbTableView* view = db->OpenTableLC(TPtrC(IAP)); + TInt res = view->GotoFirstRecord(); + + while(res == KErrNone) + { + view->ReadTextL(TPtrC(COMMDB_NAME), name); + array->InsertL(0, name); + res = view->GotoNextRecord(); + } + + CleanupStack::PopAndDestroy(view); //view + CleanupStack::PopAndDestroy(db); //db + + // Show IAP selection dialog + CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog(&selectedOption); + dlg->PrepareLC(R_SELECT_IAP_DIALOG); + dlg->SetItemTextArray(array); + dlg->SetOwnershipType(ELbmDoesNotOwnItemArray); + dlg->RunLD(); + + if(selectedOption != KErrNotFound) + { + // Write selected IAP name to config file + name = array->MdcaPoint(selectedOption); + TBuf8 iapName; + iapName.Copy(name); + iHtiCfg->SetParameterL(KIAPName, iapName); + } + CleanupStack::PopAndDestroy(array); + } +// End of file