wlanutilities/wpswizard/src/wpswizard_p.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:18:40 +0300
branchRCL_3
changeset 24 63be7eb3fc78
permissions -rw-r--r--
Revision: 201029 Kit: 201035

/*
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the "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: 
 *   WPS Wizard: Private implementation.
 *
 */

// System includes
#include <HbTranslator>
#include <HbDocumentLoader>
#include <QGraphicsWidget>
#include <HbMainWindow>
#include <HbView>
#include <HbStackedWidget>
#include <HbLabel>
#include <HbAction>
#include <QApplication>
#include <cmmanagerdefines_shim.h>

// Trace includes
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "wpswizard_pTraces.h"
#endif

// User includes
#include "wlanwizardhelper.h"
// WPS Wizard 
#include "wpswizard.h"
#include "wpswizard_p.h"
// Wizard Pages
#include "wpswizardsteptwo.h"
#include "wpswizardstepthreebutton.h"
#include "wpswizardstepthreenumber.h"
#include "wpswizardstepfour.h"
#include "wpswizardstepfive.h"

//Forward Decalrations

// External function prototypes

// Local constants


/*!
 \class WpsWizardPrivate
 \brief This class providesthe private class implementation for WPS wizard 
 */

// ======== LOCAL FUNCTIONS ========

// ======== MEMBER FUNCTIONS ========

/*!
   Constructor for the private implementation of wps wizard
   
   @param [in] wizard WpsWizard* pointer to the framework object
   @param [in] wizardHelper WlanWizardHelper * pointer to the wizard helpper class 
   
   @return WpsWizardPrivate 
 */
WpsWizardPrivate::WpsWizardPrivate(WpsWizard* wizard,
    WlanWizardHelper *wizardHelper) :
    q_ptr(wizard), 
    mWizardHelper(wizardHelper),
    mTranslator(new HbTranslator("wpswizardplugin")), 
    mRandomNumber(0)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_WPSWIZARDPRIVATE_ENTRY, this);
    createPages();
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_WPSWIZARDPRIVATE_EXIT, this);
}

/*!
   Destructor
 */
WpsWizardPrivate::~WpsWizardPrivate()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_WPSWIZARDPRIVATE_DESTRUCTOR_ENTRY, this);
    // have to delete the memory that was allocated in this object
    mIapList.clear();
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_WPSWIZARDPRIVATE_DESTRUCTOR_EXIT, this);
}

/*!
   Provides the caller with the functionality to enable/disable the 'Next' button
   
   @param [in] enable bool to indicate whether to enable or disable the 'next button'
 */
void WpsWizardPrivate::enableNextButton(bool enable)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_ENABLENEXTBUTTON_ENTRY, this);
    mWizardHelper->enableNextButton(enable);
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_ENABLENEXTBUTTON_EXIT, this);
}

/*!
   Provides the functionality to automatically move to the next page.
 */
void WpsWizardPrivate::nextPage()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_NEXTPAGE_ENTRY, this);
    mWizardHelper->nextPage();
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_NEXTPAGE_EXIT, this);
}

/*!
   Provides access to the main window
   
   @return HbMainWindow* An instance of HbMainWindow.
 */
HbMainWindow* WpsWizardPrivate::mainWindow()
{
    return mWizardHelper->mainWindow();
}

/*!
   Provides the functionality to store the received settings
   
   @param [in] index int indicates the index in the array of received 
            settings to be stored
 */
void WpsWizardPrivate::storeSettings(int index)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_STORESETTINGS_ENTRY, this);
    
    if (mIapList.count() > index)
        {
        mWpsAttr = mIapList[index];
    
        // SSID
        QString ssid = QString::fromUtf8(reinterpret_cast<const char*> (mWpsAttr.iSsid.Ptr()),
                mWpsAttr.iSsid.Length());    
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfSsid, ssid);
        // WEP Key1
        QString str = QString::fromUtf8(reinterpret_cast<const char*>(mWpsAttr.iWepKey1.Ptr()),
                mWpsAttr.iWepKey1.Length());
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWep1, str);
        // WEP Key2
        str = QString::fromUtf8(reinterpret_cast<const char*> (mWpsAttr.iWepKey2.Ptr()),
                mWpsAttr.iWepKey2.Length());
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWep2, str);
        // WEP Key3
        str = QString::fromUtf8(reinterpret_cast<const char*> (mWpsAttr.iWepKey3.Ptr()),
                mWpsAttr.iWepKey3.Length());
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWep3, str);
        // WEP Key4
        str = QString::fromUtf8(reinterpret_cast<const char*> (mWpsAttr.iWepKey4.Ptr()),
                mWpsAttr.iWepKey4.Length());
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWep4, str);
        //Default WEP key in use
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWepDefault,
                convertDefaultWepKey(mWpsAttr.iWepDefaultKey));
        //Key WPA
        str = QString::fromUtf8(reinterpret_cast<const char*> (mWpsAttr.iWpaPreSharedKey.Ptr()),
                mWpsAttr.iWpaPreSharedKey.Length());
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfKeyWpa, str);
        // security mode
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfSecurityMode,
                convertSecurityModes(mWpsAttr.iSecurityMode));
        // Network Mode
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfNetworkMode,
                convertNetworkModes(mWpsAttr.iOperatingMode));
        
        mWizardHelper->setConfiguration(WlanWizardHelper::ConfUsePsk, true);
        }

    OstTraceFunctionExit1(WPSWIZARDPRIVATE_STORESETTINGS_EXIT, this);
}

/*!
   Provides the functionality to retrieve the ssid of the network to connect
   
   @return returns the SSID as a QString
 */
QString WpsWizardPrivate::getSsid()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_GETSSID_ENTRY, this);
    QString ssid;
    ssid = mWizardHelper->configuration(WlanWizardHelper::ConfSsid).toString();
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_GETSSID_EXIT, this);
    return ssid;
}

/*!
   Provides functionality for the caller to store the array of 
   recieved settings from AP
   
   @param [in] credentials QList<TWlanProtectedSetupCredentialAttribute>& 
        received settings from wps enabled AP
 */
void WpsWizardPrivate::storeSettingsArray(QList<
        TWlanProtectedSetupCredentialAttribute>& credentials)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_STORESETTINGSARRAY_ENTRY, this);
    mIapList = credentials;
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_STORESETTINGSARRAY_EXIT, this);
}

/*!
   Returns the array of settings received from the AP
   
   @return Array containing the settings
 */
QList<TWlanProtectedSetupCredentialAttribute> WpsWizardPrivate::getSettingsArray()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_GETSETTINGSARRAY_ENTRY, this);
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_GETSETTINGSARRAY_EXIT, this);
    return mIapList;
}

/*!
   Creates the required pages for WPS setup
 */
void WpsWizardPrivate::createPages()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_CREATEPAGES_ENTRY, this);
    
    mWizardHelper->addPage(WpsWizardPage::PageWpsWizardStep2,
            new WpsPageStepTwo(this));

    mWizardHelper->addPage(WpsWizardPage::PageWpsWizardStep3_Button,
            new WpsPageStepThreeButton(this));
    
    mWizardHelper->addPage(WpsWizardPage::PageWpsWizardStep3_Number,
            new WpsPageStepThreeNumber(this));
    
    mWizardHelper->addPage(WpsWizardPage::PageWpsWizardStep4,
            new WpsPageStepFour(this));
    
    mWizardHelper->addPage(WpsWizardPage::PageWpsWizardStep5,
            new WpsPageStepFive(this));
    
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_CREATEPAGES_EXIT, this);
}

/*!
   Converts enums between wlan security mode to cm manager enums.
   
   @param [in] securityMode Security operating mode from wlanmgmt api
   
   @return int converted CMManagerShim::WlanSecMode codes
 */
int WpsWizardPrivate::convertSecurityModes(TWlanIapSecurityMode securityMode)
{
    CMManagerShim::WlanSecMode cmManagerSecurityMode;
    switch(securityMode) {
    case EWlanIapSecurityModeWep:
        cmManagerSecurityMode = CMManagerShim::WlanSecModeWep;
        break;
        
    case EWlanIapSecurityModeWpa:
        cmManagerSecurityMode = CMManagerShim::WlanSecModeWpa;
        break;
        
    case EWlanIapSecurityModeWpa2Only:
        cmManagerSecurityMode = CMManagerShim::WlanSecModeWpa2;
        break;
        
    default:
        // invalid securityMode.
        // Not possible to get EWlanIapSecurityMode802d1x here. Since not 
        // supported with wps
        Q_ASSERT(EWlanIapSecurityModeAllowUnsecure == securityMode);
        cmManagerSecurityMode = CMManagerShim::WlanSecModeOpen;
        break;
    }
    
    return cmManagerSecurityMode;
}

/*!
   Converts enums between wlan wep key index to cm manager enums.
   
   @param [in] defaultWepKey Default wep key used in wlanmgmt api
   
   @return int converted CMManagerShim::WlanWepKeyIndex codes
 */
int WpsWizardPrivate::convertDefaultWepKey(TWlanDefaultWepKey defaultWepKey)
{
    int cmManagerWepKeyIndex;
    
    switch (defaultWepKey) {
    case EWlanDefaultWepKey2:
        cmManagerWepKeyIndex = CMManagerShim::WepKeyIndex2;
        break;
        
    case EWlanDefaultWepKey3:
        cmManagerWepKeyIndex = CMManagerShim::WepKeyIndex3;
        break;
        
    case EWlanDefaultWepKey4:
        cmManagerWepKeyIndex = CMManagerShim::WepKeyIndex4;
        break;
        
    case EWlanDefaultWepKey1:
    default:
        // It is possible that the value of defaultWepKey is not initialized
        // when security mode is Open. That's why we cannot assert here.
        cmManagerWepKeyIndex = CMManagerShim::WepKeyIndex1;
        break;
    }
    return cmManagerWepKeyIndex;
}

/*!
   Converts enums between wlan network mode to cm manager enums.
   
   @param [in] networkMode Networking operating mode from wlanmgmt api
   
   @return int converted CMManagerShim::WlanConnMode codes
 */
int WpsWizardPrivate::convertNetworkModes(TWlanOperatingMode networkMode)
{
    CMManagerShim::WlanConnMode wlanConnMode;
    switch (networkMode) {
    case EWlanOperatingModeAdhoc:
        wlanConnMode = CMManagerShim::Adhoc;
        break;
        
    default: 
        Q_ASSERT(EWlanOperatingModeInfrastructure == networkMode);
        wlanConnMode = CMManagerShim::Infra;
        break;
    }
    return wlanConnMode;
}

/*!
   Provides with the functionality to store the PIN generated
   
   @param [in] random The generated PIN code to be used in succesive steps
   
 */
void WpsWizardPrivate::setPin(int random)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_SETPIN_ENTRY, this);
    mRandomNumber = random;
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_SETPIN_EXIT, this);
}

/*!
   Returns the PIN code stored in one of the WPS Pages
   
   @return PIN code to be used in the WPS operation.
 */
int WpsWizardPrivate::getPin()
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_GETPIN_ENTRY, this); 
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_GETPIN_EXIT, this);
    return mRandomNumber;
}

/*!
   Returns page id when manual configuration is chosen
   
   @param [in] useWps is WPS used or not?
   
   @return new page id
 */
int WpsWizardPrivate::nextPageId(bool useWps)
{
    OstTraceFunctionEntry1(WPSWIZARDPRIVATE_NEXTPAGEID_ENTRY, this);
    OstTraceFunctionExit1(WPSWIZARDPRIVATE_NEXTPAGEID_EXIT, this);
    return mWizardHelper->nextPageId(useWps);
}

/*!
    Sets wlan configuration value for given configuration identifier.
    See ConfigurationId for further details about the data types in QVariant.
    
    @param [in] confId Configuration Identifier do to be set
    @param [in] value  Value for configuration.
  */
void WpsWizardPrivate::setConfiguration(
    WlanWizardHelper::ConfigurationId confId,
    const QVariant &value)
{
    mWizardHelper->setConfiguration(confId, value);
}