wlanutilities/wlanwizard/src/wlanwizardpagescanning.cpp
author hgs
Fri, 03 Sep 2010 09:37:37 +0300
changeset 60 822a45792fdd
parent 53 bdc64aa9b954
permissions -rw-r--r--
201035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
hgs
parents:
diff changeset
     1
/*
39
hgs
parents: 31
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 31
diff changeset
     3
* All rights reserved.
hgs
parents: 31
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents: 31
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents: 31
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents: 31
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 31
diff changeset
     8
*
hgs
parents: 31
diff changeset
     9
* Initial Contributors:
hgs
parents: 31
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents: 31
diff changeset
    11
*
hgs
parents: 31
diff changeset
    12
* Contributors:
hgs
parents: 31
diff changeset
    13
*
hgs
parents: 31
diff changeset
    14
* Description: 
hgs
parents: 31
diff changeset
    15
* WLAN Wizard Page: Scan processing.
hgs
parents: 31
diff changeset
    16
*/
31
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// System includes
60
hgs
parents: 53
diff changeset
    19
39
hgs
parents: 31
diff changeset
    20
#include <HbParameterLengthLimiter>
31
hgs
parents:
diff changeset
    21
#include <HbMainWindow>
hgs
parents:
diff changeset
    22
#include <HbDocumentLoader>
hgs
parents:
diff changeset
    23
#include <HbWidget>
hgs
parents:
diff changeset
    24
#include <HbLabel>
hgs
parents:
diff changeset
    25
#include <HbProgressBar>
60
hgs
parents: 53
diff changeset
    26
31
hgs
parents:
diff changeset
    27
#include <cmmanagerdefines_shim.h>
hgs
parents:
diff changeset
    28
#include <wlanqtutils.h>
hgs
parents:
diff changeset
    29
#include <wlanqtutilsap.h>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// User includes
60
hgs
parents: 53
diff changeset
    32
31
hgs
parents:
diff changeset
    33
#include "wlanwizard_p.h"
hgs
parents:
diff changeset
    34
#include "wlanwizardpagescanning.h"
60
hgs
parents: 53
diff changeset
    35
31
hgs
parents:
diff changeset
    36
#include "OstTraceDefinitions.h"
hgs
parents:
diff changeset
    37
#ifdef OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
    38
#include "wlanwizardpagescanningTraces.h"
hgs
parents:
diff changeset
    39
#endif
hgs
parents:
diff changeset
    40
39
hgs
parents: 31
diff changeset
    41
// Local constants
hgs
parents: 31
diff changeset
    42
31
hgs
parents:
diff changeset
    43
/*!
39
hgs
parents: 31
diff changeset
    44
 * Constructor method for the scanning view object.
hgs
parents: 31
diff changeset
    45
 * @param [in] parent pointer to parent object.
31
hgs
parents:
diff changeset
    46
 */
hgs
parents:
diff changeset
    47
WlanWizardPageScanning::WlanWizardPageScanning(WlanWizardPrivate* parent) :
hgs
parents:
diff changeset
    48
    WlanWizardPageInternal(parent),
hgs
parents:
diff changeset
    49
    mWidget(NULL),
hgs
parents:
diff changeset
    50
    mLabel(NULL),
hgs
parents:
diff changeset
    51
    mLoader(NULL),
hgs
parents:
diff changeset
    52
    mNextPageId(WlanWizardPage::PageNone),
39
hgs
parents: 31
diff changeset
    53
    mScanResultsAvailable(false),
hgs
parents: 31
diff changeset
    54
    mScanStatus(WlanQtUtils::ScanStatusOk)
31
hgs
parents:
diff changeset
    55
{
60
hgs
parents: 53
diff changeset
    56
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_ENTRY);
hgs
parents: 53
diff changeset
    57
    
31
hgs
parents:
diff changeset
    58
    WlanQtUtils* utils = mWizard->wlanQtUtils();
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    // Connect normal scan completion signal from wlanQtUtils to result
hgs
parents:
diff changeset
    61
    // handler. Connect here instead of initializePage, since this signal may
hgs
parents:
diff changeset
    62
    // need to be caught event if the window is not active.
39
hgs
parents: 31
diff changeset
    63
    bool ok = connect(
hgs
parents: 31
diff changeset
    64
        utils,
hgs
parents: 31
diff changeset
    65
        SIGNAL(wlanScanApReady(int)),
hgs
parents: 31
diff changeset
    66
        this,
hgs
parents: 31
diff changeset
    67
        SLOT(wlanScanResultPreCheck(int)));
60
hgs
parents: 53
diff changeset
    68
    Q_ASSERT(ok);
39
hgs
parents: 31
diff changeset
    69
    
60
hgs
parents: 53
diff changeset
    70
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_EXIT);
31
hgs
parents:
diff changeset
    71
}
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
/*!
hgs
parents:
diff changeset
    74
 * Destructor. Loader widget is deleted.
hgs
parents:
diff changeset
    75
 * All document widgets are deleted by wlanwizard_p destructor.
hgs
parents:
diff changeset
    76
 */
hgs
parents:
diff changeset
    77
WlanWizardPageScanning::~WlanWizardPageScanning()
hgs
parents:
diff changeset
    78
{
60
hgs
parents: 53
diff changeset
    79
    OstTraceFunctionEntry0(DUP1_WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_ENTRY);
hgs
parents: 53
diff changeset
    80
    
31
hgs
parents:
diff changeset
    81
    delete mLoader;
60
hgs
parents: 53
diff changeset
    82
    
hgs
parents: 53
diff changeset
    83
    OstTraceFunctionExit0(DUP1_WLANWIZARDPAGESCANNING_WLANWIZARDPAGESCANNING_EXIT);
31
hgs
parents:
diff changeset
    84
}
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
/*!
39
hgs
parents: 31
diff changeset
    87
 * Page initialization. If view is already loaded, does nothing. Inherited from
hgs
parents: 31
diff changeset
    88
 * WlanWizardPage.
hgs
parents: 31
diff changeset
    89
 * @return pointer to widget "occ_add_wlan_06".
31
hgs
parents:
diff changeset
    90
 */
hgs
parents:
diff changeset
    91
HbWidget* WlanWizardPageScanning::initializePage()
hgs
parents:
diff changeset
    92
{
60
hgs
parents: 53
diff changeset
    93
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_INITIALIZEPAGE_ENTRY);
hgs
parents: 53
diff changeset
    94
    
39
hgs
parents: 31
diff changeset
    95
    OstTrace0(
hgs
parents: 31
diff changeset
    96
        TRACE_NORMAL,
hgs
parents: 31
diff changeset
    97
        WLANWIZARDPAGESCANNING_INITIALIZEPAGE,
hgs
parents: 31
diff changeset
    98
        "WlanWizardPageScanning::initializePage");
31
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    // Next page id is reset with each initialization.    
hgs
parents:
diff changeset
   101
    mNextPageId = WlanWizardPage::PageNone;
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    if (mWidget == NULL) {
hgs
parents:
diff changeset
   104
        mLoader = new HbDocumentLoader(mWizard->mainWindow());
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
        bool ok;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
        mLoader->load(":/docml/occ_add_wlan_06.docml", &ok);
39
hgs
parents: 31
diff changeset
   109
        Q_ASSERT(ok);
31
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
        // Initialize orientation
39
hgs
parents: 31
diff changeset
   112
        loadDocmlSection(mWizard->mainWindow()->orientation());
31
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
        // Load widgets
hgs
parents:
diff changeset
   115
        mWidget = qobject_cast<HbWidget*> (mLoader->findWidget(
hgs
parents:
diff changeset
   116
            "occ_add_wlan_06"));
39
hgs
parents: 31
diff changeset
   117
        Q_ASSERT(mWidget != NULL);
31
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
        mLabel = qobject_cast<HbLabel*> (mLoader->findWidget("dialog"));
39
hgs
parents: 31
diff changeset
   120
        Q_ASSERT(mLabel != NULL);
31
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
        WlanQtUtils* utils = mWizard->wlanQtUtils();
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
        // Connect orientation signal from the main window to orientation
hgs
parents:
diff changeset
   125
        // loader.
39
hgs
parents: 31
diff changeset
   126
        ok = connect(
hgs
parents: 31
diff changeset
   127
            mWizard->mainWindow(),
hgs
parents: 31
diff changeset
   128
            SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents: 31
diff changeset
   129
            this,
hgs
parents: 31
diff changeset
   130
            SLOT(loadDocmlSection(Qt::Orientation)));
hgs
parents: 31
diff changeset
   131
        Q_ASSERT(ok);
31
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
        // Connect direct scan completion signal from wlanQtUtils to result
hgs
parents:
diff changeset
   134
        // handler.
39
hgs
parents: 31
diff changeset
   135
        ok = connect(
hgs
parents: 31
diff changeset
   136
            utils,
hgs
parents: 31
diff changeset
   137
            SIGNAL(wlanScanDirectReady(int)),
hgs
parents: 31
diff changeset
   138
            this,
hgs
parents: 31
diff changeset
   139
            SLOT(wlanScanDirectReady(int)));
31
hgs
parents:
diff changeset
   140
        Q_ASSERT(ok);
hgs
parents:
diff changeset
   141
    }
hgs
parents:
diff changeset
   142
39
hgs
parents: 31
diff changeset
   143
    mLabel->setPlainText(HbParameterLengthLimiter(
49
hgs
parents: 43
diff changeset
   144
        "txt_occ_dialog_searching").arg(mWizard->configuration(
39
hgs
parents: 31
diff changeset
   145
            WlanWizardPrivate::ConfSsid).toString()));
hgs
parents: 31
diff changeset
   146
60
hgs
parents: 53
diff changeset
   147
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_INITIALIZEPAGE_EXIT);
31
hgs
parents:
diff changeset
   148
    return mWidget;
hgs
parents:
diff changeset
   149
}
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
/*!
hgs
parents:
diff changeset
   152
 * Sends the user to the next page.
39
hgs
parents: 31
diff changeset
   153
 * @param [out] removeFromStack is always true: this page is removed from the 
hgs
parents: 31
diff changeset
   154
 * stacked widget after "Next" button is pressed.
hgs
parents: 31
diff changeset
   155
 * @return the id value of the next page.
31
hgs
parents:
diff changeset
   156
 */
hgs
parents:
diff changeset
   157
int WlanWizardPageScanning::nextId(bool &removeFromStack) const
hgs
parents:
diff changeset
   158
{
60
hgs
parents: 53
diff changeset
   159
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_NEXTID_ENTRY);
hgs
parents: 53
diff changeset
   160
    
31
hgs
parents:
diff changeset
   161
    removeFromStack = true;
hgs
parents:
diff changeset
   162
60
hgs
parents: 53
diff changeset
   163
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_NEXTID_EXIT);
31
hgs
parents:
diff changeset
   164
    return mNextPageId;
hgs
parents:
diff changeset
   165
}
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
/*!
39
hgs
parents: 31
diff changeset
   168
 * This function reimplements WlanWizardPage::previousTriggered. When going
hgs
parents: 31
diff changeset
   169
 * back from scanning view, the ongoing scan operation is also stopped. Since
hgs
parents: 31
diff changeset
   170
 * there is no need to react to following the acknowledgement signal from
hgs
parents: 31
diff changeset
   171
 * wlanQtUtils, the corresponding handler slots are disconnected before the
hgs
parents: 31
diff changeset
   172
 * opration and immediately connected again.
hgs
parents: 31
diff changeset
   173
 * @return one step backwards value.
hgs
parents: 31
diff changeset
   174
 */
hgs
parents: 31
diff changeset
   175
int WlanWizardPageScanning::previousTriggered()
hgs
parents: 31
diff changeset
   176
{
60
hgs
parents: 53
diff changeset
   177
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_PREVIOUSTRIGGERED_ENTRY);
39
hgs
parents: 31
diff changeset
   178
    
hgs
parents: 31
diff changeset
   179
    WlanQtUtils* utils = mWizard->wlanQtUtils();
hgs
parents: 31
diff changeset
   180
    
60
hgs
parents: 53
diff changeset
   181
    disconnect(
hgs
parents: 53
diff changeset
   182
        utils,
hgs
parents: 53
diff changeset
   183
        SIGNAL(wlanScanApReady(int)),
hgs
parents: 53
diff changeset
   184
        this,
hgs
parents: 53
diff changeset
   185
        SLOT(wlanScanResultPreCheck(int)));
hgs
parents: 53
diff changeset
   186
    
hgs
parents: 53
diff changeset
   187
    disconnect(
hgs
parents: 53
diff changeset
   188
        utils,
hgs
parents: 53
diff changeset
   189
        SIGNAL(wlanScanDirectReady(int)),
hgs
parents: 53
diff changeset
   190
        this,
hgs
parents: 53
diff changeset
   191
        SLOT(wlanScanDirectReady(int)));
hgs
parents: 53
diff changeset
   192
    
39
hgs
parents: 31
diff changeset
   193
    utils->stopWlanScan();
hgs
parents: 31
diff changeset
   194
hgs
parents: 31
diff changeset
   195
    bool ok = connect(
hgs
parents: 31
diff changeset
   196
        utils,
hgs
parents: 31
diff changeset
   197
        SIGNAL(wlanScanApReady(int)),
hgs
parents: 31
diff changeset
   198
        this,
hgs
parents: 31
diff changeset
   199
        SLOT(wlanScanResultPreCheck(int)));
hgs
parents: 31
diff changeset
   200
    Q_ASSERT(ok);
hgs
parents: 31
diff changeset
   201
    
hgs
parents: 31
diff changeset
   202
    ok = connect(
hgs
parents: 31
diff changeset
   203
        utils,
hgs
parents: 31
diff changeset
   204
        SIGNAL(wlanScanDirectReady(int)),
hgs
parents: 31
diff changeset
   205
        this,
hgs
parents: 31
diff changeset
   206
        SLOT(wlanScanDirectReady(int)));
hgs
parents: 31
diff changeset
   207
    Q_ASSERT(ok);
hgs
parents: 31
diff changeset
   208
    
60
hgs
parents: 53
diff changeset
   209
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_PREVIOUSTRIGGERED_EXIT);
39
hgs
parents: 31
diff changeset
   210
    return OneStepBackwards;
hgs
parents: 31
diff changeset
   211
    
hgs
parents: 31
diff changeset
   212
}
hgs
parents: 31
diff changeset
   213
hgs
parents: 31
diff changeset
   214
/*!
hgs
parents: 31
diff changeset
   215
 * This method is overrides the default implementation from WlanWizardPage.
hgs
parents: 31
diff changeset
   216
 * It indicates whether the Next-button should be enabled or not. It also resets
hgs
parents: 31
diff changeset
   217
 * the ConfProcessSettings-configuration to false - meaning that if no scan
hgs
parents: 31
diff changeset
   218
 * results are available, no iap is created.
hgs
parents: 31
diff changeset
   219
 * @return always false - the scanning proceeds to next window
hgs
parents: 31
diff changeset
   220
 * automatically or not at all.
31
hgs
parents:
diff changeset
   221
 */
hgs
parents:
diff changeset
   222
bool WlanWizardPageScanning::showPage()
hgs
parents:
diff changeset
   223
{
60
hgs
parents: 53
diff changeset
   224
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_SHOWPAGE_ENTRY);
hgs
parents: 53
diff changeset
   225
39
hgs
parents: 31
diff changeset
   226
    mWizard->setConfiguration(WlanWizardHelper::ConfProcessSettings, false);
60
hgs
parents: 53
diff changeset
   227
hgs
parents: 53
diff changeset
   228
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_SHOWPAGE_EXIT);
31
hgs
parents:
diff changeset
   229
    return false;
hgs
parents:
diff changeset
   230
}
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
/*!
39
hgs
parents: 31
diff changeset
   233
 * Reimplements the default function in WlanWizardPage. Indicates to the
hgs
parents: 31
diff changeset
   234
 * framework that startOperation() function must be executed.
hgs
parents: 31
diff changeset
   235
 * @return true
hgs
parents: 31
diff changeset
   236
 * @see WlanWizardPage
31
hgs
parents:
diff changeset
   237
 */
hgs
parents:
diff changeset
   238
bool WlanWizardPageScanning::requiresStartOperation()
hgs
parents:
diff changeset
   239
{
60
hgs
parents: 53
diff changeset
   240
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_REQUIRESSTARTOPERATION_ENTRY);
hgs
parents: 53
diff changeset
   241
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_REQUIRESSTARTOPERATION_EXIT);
31
hgs
parents:
diff changeset
   242
    return true;
hgs
parents:
diff changeset
   243
}
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
/*!
hgs
parents:
diff changeset
   246
 * Wlan scan is performed as a "post-initialization" which is executed in a
39
hgs
parents: 31
diff changeset
   247
 * separate scheduler loop. If scan results are available, starts reading them.
31
hgs
parents:
diff changeset
   248
 */
hgs
parents:
diff changeset
   249
void WlanWizardPageScanning::startOperation()
hgs
parents:
diff changeset
   250
{
60
hgs
parents: 53
diff changeset
   251
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_STARTOPERATION_ENTRY);
hgs
parents: 53
diff changeset
   252
    
hgs
parents: 53
diff changeset
   253
    OstTrace0(
hgs
parents: 53
diff changeset
   254
        TRACE_NORMAL,
hgs
parents: 53
diff changeset
   255
        WLANWIZARDPAGESCANNING_STARTOPERATION,
31
hgs
parents:
diff changeset
   256
        "WlanWizardPageScanning::startOperation - start AP scan if results"
60
hgs
parents: 53
diff changeset
   257
        " are available.");
31
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
    if (mScanResultsAvailable) {
hgs
parents:
diff changeset
   260
        mScanResultsAvailable = false;
hgs
parents:
diff changeset
   261
        wlanScanApReady();
hgs
parents:
diff changeset
   262
    }
60
hgs
parents: 53
diff changeset
   263
    
hgs
parents: 53
diff changeset
   264
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_STARTOPERATION_EXIT);
31
hgs
parents:
diff changeset
   265
}
hgs
parents:
diff changeset
   266
39
hgs
parents: 31
diff changeset
   267
/*!
hgs
parents: 31
diff changeset
   268
 * Loads the document orientation information from occ_add_wlan_06.docml
hgs
parents: 31
diff changeset
   269
 * This is called each time phone orientation changes.
hgs
parents: 31
diff changeset
   270
 * @param [in] orientation indicates whether the phone is in portrait or
hgs
parents: 31
diff changeset
   271
 * landscape mode.
hgs
parents: 31
diff changeset
   272
 */
hgs
parents: 31
diff changeset
   273
void WlanWizardPageScanning::loadDocmlSection(Qt::Orientation orientation)
hgs
parents: 31
diff changeset
   274
{
60
hgs
parents: 53
diff changeset
   275
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_LOADDOCMLSECTION_ENTRY);
hgs
parents: 53
diff changeset
   276
    
hgs
parents: 53
diff changeset
   277
    OstTrace1(
hgs
parents: 53
diff changeset
   278
        TRACE_NORMAL,
hgs
parents: 53
diff changeset
   279
        WLANWIZARDPAGESCANNING_LOADDOCML,
39
hgs
parents: 31
diff changeset
   280
        "WlanWizardPageScanning::loadDocml - orientation ;orientation=%x",
60
hgs
parents: 53
diff changeset
   281
        (TUint)orientation);
39
hgs
parents: 31
diff changeset
   282
hgs
parents: 31
diff changeset
   283
    WlanWizardPageInternal::loadDocmlSection(
hgs
parents: 31
diff changeset
   284
        mLoader,
hgs
parents: 31
diff changeset
   285
        orientation,
hgs
parents: 31
diff changeset
   286
        ":/docml/occ_add_wlan_06.docml", 
hgs
parents: 31
diff changeset
   287
        "portrait_section",
hgs
parents: 31
diff changeset
   288
        "landscape_section");
60
hgs
parents: 53
diff changeset
   289
    
hgs
parents: 53
diff changeset
   290
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_LOADDOCMLSECTION_EXIT);
39
hgs
parents: 31
diff changeset
   291
}
hgs
parents: 31
diff changeset
   292
hgs
parents: 31
diff changeset
   293
/*!
hgs
parents: 31
diff changeset
   294
 * Checks whether the view is active. If it is, execute wlanScanApReady. If
hgs
parents: 31
diff changeset
   295
 * not, set mScanResultsAvailable to true.
hgs
parents: 31
diff changeset
   296
 * @param [in] scanStatus indicates whether the scan was succesful, cancelled of
hgs
parents: 31
diff changeset
   297
 * failed. The argument is saved to a member variable.
hgs
parents: 31
diff changeset
   298
 */
hgs
parents: 31
diff changeset
   299
void WlanWizardPageScanning::wlanScanResultPreCheck(int scanStatus)
hgs
parents: 31
diff changeset
   300
{
60
hgs
parents: 53
diff changeset
   301
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK_ENTRY);
hgs
parents: 53
diff changeset
   302
    
39
hgs
parents: 31
diff changeset
   303
    mScanStatus = scanStatus;
hgs
parents: 31
diff changeset
   304
    
hgs
parents: 31
diff changeset
   305
    if (!mWidget) {
60
hgs
parents: 53
diff changeset
   306
        OstTrace1(
hgs
parents: 53
diff changeset
   307
            TRACE_BORDER,
hgs
parents: 53
diff changeset
   308
            WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
39
hgs
parents: 31
diff changeset
   309
            "WlanWizardPageScanning::wlanScanResultPreCheck no widget;this=%x",
60
hgs
parents: 53
diff changeset
   310
            this);
39
hgs
parents: 31
diff changeset
   311
hgs
parents: 31
diff changeset
   312
        mScanResultsAvailable = true;
hgs
parents: 31
diff changeset
   313
    } else {
hgs
parents: 31
diff changeset
   314
        if (mWizard->isCurrentPage(mWidget)) {
60
hgs
parents: 53
diff changeset
   315
            OstTrace0(
hgs
parents: 53
diff changeset
   316
                TRACE_BORDER,
39
hgs
parents: 31
diff changeset
   317
                DUP1_WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
hgs
parents: 31
diff changeset
   318
                "WlanWizardPageScanning::wlanScanResultPreCheck go to results");
hgs
parents: 31
diff changeset
   319
hgs
parents: 31
diff changeset
   320
            wlanScanApReady();
hgs
parents: 31
diff changeset
   321
        } else {
60
hgs
parents: 53
diff changeset
   322
            OstTrace0(
hgs
parents: 53
diff changeset
   323
                TRACE_BORDER,
39
hgs
parents: 31
diff changeset
   324
                DUP2_WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK,
hgs
parents: 31
diff changeset
   325
                "WlanWizardPageScanning::wlanScanResultPreCheck"
60
hgs
parents: 53
diff changeset
   326
                " not current widget");
39
hgs
parents: 31
diff changeset
   327
hgs
parents: 31
diff changeset
   328
            mScanResultsAvailable = true;
hgs
parents: 31
diff changeset
   329
        }
hgs
parents: 31
diff changeset
   330
    }
60
hgs
parents: 53
diff changeset
   331
    
hgs
parents: 53
diff changeset
   332
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_WLANSCANRESULTPRECHECK_EXIT);
39
hgs
parents: 31
diff changeset
   333
}
hgs
parents: 31
diff changeset
   334
hgs
parents: 31
diff changeset
   335
/*!
hgs
parents: 31
diff changeset
   336
 * Processes the direct scan results.
hgs
parents: 31
diff changeset
   337
 * @param [in] scanStatus indicates whether the scan was succesful, canceled or
hgs
parents: 31
diff changeset
   338
 * failed. In case the scan was not succesful, always proceed to manual wizard.
hgs
parents: 31
diff changeset
   339
 */
hgs
parents: 31
diff changeset
   340
void WlanWizardPageScanning::wlanScanDirectReady(int scanStatus)
hgs
parents: 31
diff changeset
   341
{
60
hgs
parents: 53
diff changeset
   342
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY_ENTRY);
hgs
parents: 53
diff changeset
   343
    
hgs
parents: 53
diff changeset
   344
    OstTrace0(
hgs
parents: 53
diff changeset
   345
        TRACE_NORMAL,
hgs
parents: 53
diff changeset
   346
        WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY,
hgs
parents: 53
diff changeset
   347
        "WlanWizardPageScanning::wlanScanDirectReady");
39
hgs
parents: 31
diff changeset
   348
hgs
parents: 31
diff changeset
   349
    WlanQtUtils* utils = mWizard->wlanQtUtils();
hgs
parents: 31
diff changeset
   350
hgs
parents: 31
diff changeset
   351
    Q_ASSERT(utils);
hgs
parents: 31
diff changeset
   352
hgs
parents: 31
diff changeset
   353
    QList<WlanScanResult> filteredResults;
hgs
parents: 31
diff changeset
   354
hgs
parents: 31
diff changeset
   355
    if (scanStatus == WlanQtUtils::ScanStatusOk) {
60
hgs
parents: 53
diff changeset
   356
        QList< QSharedPointer<WlanQtUtilsAp> > directScanResults;
39
hgs
parents: 31
diff changeset
   357
        // Read the directed scan results from Qt Utils
hgs
parents: 31
diff changeset
   358
        utils->availableWlanAps(directScanResults);
hgs
parents: 31
diff changeset
   359
hgs
parents: 31
diff changeset
   360
        // Identify open and hidden networks.
hgs
parents: 31
diff changeset
   361
        getFinalScanResults(directScanResults, mWlanApList, filteredResults);
hgs
parents: 31
diff changeset
   362
    }
hgs
parents: 31
diff changeset
   363
hgs
parents: 31
diff changeset
   364
    // Process the scan results. If scan status is not ok, feed an empty
hgs
parents: 31
diff changeset
   365
    // result table to the selection function.
hgs
parents: 31
diff changeset
   366
    selectNextPageActions(filteredResults);
60
hgs
parents: 53
diff changeset
   367
    
hgs
parents: 53
diff changeset
   368
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_WLANSCANDIRECTREADY_EXIT);
39
hgs
parents: 31
diff changeset
   369
}
hgs
parents: 31
diff changeset
   370
hgs
parents: 31
diff changeset
   371
/*!
hgs
parents: 31
diff changeset
   372
 * All wlan channels have been scanned for public networks. After processing the
hgs
parents: 31
diff changeset
   373
 * results a direct scan is initiated. This function also checks whether the
hgs
parents: 31
diff changeset
   374
 * scan was succesful, canceled or failed. In case the scan was not succesful,
hgs
parents: 31
diff changeset
   375
 * always proceed to manual wizard.
hgs
parents: 31
diff changeset
   376
 */
hgs
parents: 31
diff changeset
   377
void WlanWizardPageScanning::wlanScanApReady()
hgs
parents: 31
diff changeset
   378
{
60
hgs
parents: 53
diff changeset
   379
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_WLANSCANAPREADY_ENTRY);
hgs
parents: 53
diff changeset
   380
    
hgs
parents: 53
diff changeset
   381
    OstTrace0(
hgs
parents: 53
diff changeset
   382
        TRACE_NORMAL,
hgs
parents: 53
diff changeset
   383
        WLANWIZARDPAGESCANNING_WLANSCANAPREADY,
hgs
parents: 53
diff changeset
   384
        "WlanWizardPageScanning::wlanScanApReady");
39
hgs
parents: 31
diff changeset
   385
hgs
parents: 31
diff changeset
   386
    if (mScanStatus == WlanQtUtils::ScanStatusOk) {
hgs
parents: 31
diff changeset
   387
        WlanQtUtils* utils = mWizard->wlanQtUtils();
hgs
parents: 31
diff changeset
   388
        Q_ASSERT(utils);
hgs
parents: 31
diff changeset
   389
hgs
parents: 31
diff changeset
   390
        QList<QSharedPointer<WlanQtUtilsAp> > openScanResults;
hgs
parents: 31
diff changeset
   391
hgs
parents: 31
diff changeset
   392
        // Fetch the list of scan results.
hgs
parents: 31
diff changeset
   393
        utils->availableWlanAps(openScanResults);
hgs
parents: 31
diff changeset
   394
hgs
parents: 31
diff changeset
   395
        // The name of the network that we are looking for.
hgs
parents: 31
diff changeset
   396
        QString ssid =
hgs
parents: 31
diff changeset
   397
            mWizard->configuration(WlanWizardPrivate::ConfSsid).toString();
hgs
parents: 31
diff changeset
   398
hgs
parents: 31
diff changeset
   399
        // Store matching scan results.
hgs
parents: 31
diff changeset
   400
        getSsidMatchList(ssid, openScanResults);
hgs
parents: 31
diff changeset
   401
hgs
parents: 31
diff changeset
   402
        // Next directed scan.
hgs
parents: 31
diff changeset
   403
        utils->scanWlanDirect(ssid);
hgs
parents: 31
diff changeset
   404
    }
hgs
parents: 31
diff changeset
   405
    else {
hgs
parents: 31
diff changeset
   406
        mWizard->clearConfiguration(WlanWizardHelper::ConfAvailableNetworkOptions);
hgs
parents: 31
diff changeset
   407
        mNextPageId = WlanWizardPageInternal::PageNetworkMode;
hgs
parents: 31
diff changeset
   408
        mWizard->nextPage();
hgs
parents: 31
diff changeset
   409
    }
60
hgs
parents: 53
diff changeset
   410
    
hgs
parents: 53
diff changeset
   411
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_WLANSCANAPREADY_EXIT);
39
hgs
parents: 31
diff changeset
   412
}
hgs
parents: 31
diff changeset
   413
hgs
parents: 31
diff changeset
   414
/*!
hgs
parents: 31
diff changeset
   415
 * This function stores all the APs that match ssid parameter to mWlanApList
hgs
parents: 31
diff changeset
   416
 * member list.
hgs
parents: 31
diff changeset
   417
 * @param [in] ssid is the name of the network we are interested in.
hgs
parents: 31
diff changeset
   418
 * @param [in] matchList is the list of all APs that were revealed in the scan.
hgs
parents: 31
diff changeset
   419
 */
hgs
parents: 31
diff changeset
   420
void WlanWizardPageScanning::getSsidMatchList(
hgs
parents: 31
diff changeset
   421
    QString ssid,
hgs
parents: 31
diff changeset
   422
    const QList<QSharedPointer<WlanQtUtilsAp> > &matchList)
hgs
parents: 31
diff changeset
   423
{
60
hgs
parents: 53
diff changeset
   424
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_GETSSIDMATCHLIST_ENTRY);
hgs
parents: 53
diff changeset
   425
    
39
hgs
parents: 31
diff changeset
   426
    mWlanApList.clear();
hgs
parents: 31
diff changeset
   427
    QSharedPointer<WlanQtUtilsAp> item;
hgs
parents: 31
diff changeset
   428
hgs
parents: 31
diff changeset
   429
    for (int i = 0; i < matchList.size(); i++) {
hgs
parents: 31
diff changeset
   430
        item = matchList.at(i);
hgs
parents: 31
diff changeset
   431
        if (item->value(WlanQtUtilsAp::ConfIdSsid).toString() == ssid) {
hgs
parents: 31
diff changeset
   432
            mWlanApList.append(item);
hgs
parents: 31
diff changeset
   433
        }
hgs
parents: 31
diff changeset
   434
    }
60
hgs
parents: 53
diff changeset
   435
    
hgs
parents: 53
diff changeset
   436
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_GETSSIDMATCHLIST_EXIT);
39
hgs
parents: 31
diff changeset
   437
}
hgs
parents: 31
diff changeset
   438
hgs
parents: 31
diff changeset
   439
/*
hgs
parents: 31
diff changeset
   440
 * Find out which of the direct scan results are open networks by comparing
hgs
parents: 31
diff changeset
   441
 * result to open scan results. Return finalResults.
hgs
parents: 31
diff changeset
   442
 * @param [in] directScanResults are the results of a directed scan.
hgs
parents: 31
diff changeset
   443
 * @param [in] openScanResults are the results of a scan inquiring any APs.
hgs
parents: 31
diff changeset
   444
 * @param [out] finalResults is a list of APs with visibility flag included.
hgs
parents: 31
diff changeset
   445
 */
hgs
parents: 31
diff changeset
   446
void WlanWizardPageScanning::getFinalScanResults(
hgs
parents: 31
diff changeset
   447
    const QList<QSharedPointer<WlanQtUtilsAp> > &directScanResults,
hgs
parents: 31
diff changeset
   448
    const QList<QSharedPointer<WlanQtUtilsAp> > &openScanResults,
hgs
parents: 31
diff changeset
   449
    QList<WlanScanResult> &finalResults)
hgs
parents: 31
diff changeset
   450
{
60
hgs
parents: 53
diff changeset
   451
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_GETFINALSCANRESULTS_ENTRY);
hgs
parents: 53
diff changeset
   452
    
39
hgs
parents: 31
diff changeset
   453
    finalResults.clear();
hgs
parents: 31
diff changeset
   454
hgs
parents: 31
diff changeset
   455
    // The key assumption of this algorithm is that both direct and public scan
hgs
parents: 31
diff changeset
   456
    // reveal the same set of AP:s with the exception of hidden AP:s.
hgs
parents: 31
diff changeset
   457
    // In other words: Direct scan result set is the whole set with each AP 
hgs
parents: 31
diff changeset
   458
    // marked as hidden by default. If an AP has been revealed also by public
hgs
parents: 31
diff changeset
   459
    // scan, it is changed to visible.
hgs
parents: 31
diff changeset
   460
    for (int i = 0; i < directScanResults.size(); i++) {
hgs
parents: 31
diff changeset
   461
        WlanScanResult resultItem;
hgs
parents: 31
diff changeset
   462
hgs
parents: 31
diff changeset
   463
        resultItem.scanResult = directScanResults.at(i);
hgs
parents: 31
diff changeset
   464
        
hgs
parents: 31
diff changeset
   465
        // Initialize as hidden.
hgs
parents: 31
diff changeset
   466
        resultItem.networkHidden = true;
hgs
parents: 31
diff changeset
   467
         
hgs
parents: 31
diff changeset
   468
        for (int j = 0; j < openScanResults.size(); j++) {
hgs
parents: 31
diff changeset
   469
            if (WlanQtUtilsAp::compare(
hgs
parents: 31
diff changeset
   470
                openScanResults.at(j).data(), 
hgs
parents: 31
diff changeset
   471
                directScanResults.at(i).data()) == 0) {
hgs
parents: 31
diff changeset
   472
                // Mark open, if a public scan revealed the same AP
hgs
parents: 31
diff changeset
   473
                resultItem.networkHidden = false;
hgs
parents: 31
diff changeset
   474
            }
hgs
parents: 31
diff changeset
   475
        }
hgs
parents: 31
diff changeset
   476
hgs
parents: 31
diff changeset
   477
        finalResults.append(resultItem);
hgs
parents: 31
diff changeset
   478
    }
60
hgs
parents: 53
diff changeset
   479
    
hgs
parents: 53
diff changeset
   480
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_GETFINALSCANRESULTS_EXIT);
39
hgs
parents: 31
diff changeset
   481
}
hgs
parents: 31
diff changeset
   482
hgs
parents: 31
diff changeset
   483
/*!
hgs
parents: 31
diff changeset
   484
 * This function processes the scan results in case multiple results were
hgs
parents: 31
diff changeset
   485
 * acquired with matching SSIDs.
hgs
parents: 31
diff changeset
   486
 * @param [in] finalResults is the list of APs revealed by the last scans.
hgs
parents: 31
diff changeset
   487
 * @return the identifier of the next page.
hgs
parents: 31
diff changeset
   488
 */
hgs
parents: 31
diff changeset
   489
int WlanWizardPageScanning::processMultipleScanResults(
hgs
parents: 31
diff changeset
   490
    const QList<WlanScanResult> &finalResults)
hgs
parents: 31
diff changeset
   491
{
60
hgs
parents: 53
diff changeset
   492
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_PROCESSMULTIPLESCANRESULTS_ENTRY);
hgs
parents: 53
diff changeset
   493
    
39
hgs
parents: 31
diff changeset
   494
    WlanWizardScanList networkOptions;
hgs
parents: 31
diff changeset
   495
    int nextPage;
hgs
parents: 31
diff changeset
   496
hgs
parents: 31
diff changeset
   497
    // Build the list of results to be placed in the configuration.
hgs
parents: 31
diff changeset
   498
    networkOptions.build(finalResults);
hgs
parents: 31
diff changeset
   499
    
hgs
parents: 31
diff changeset
   500
    QVariant tmp;
hgs
parents: 31
diff changeset
   501
    tmp.setValue(networkOptions);
hgs
parents: 31
diff changeset
   502
hgs
parents: 31
diff changeset
   503
    mWizard->setConfiguration(
hgs
parents: 31
diff changeset
   504
        WlanWizardHelper::ConfAvailableNetworkOptions, tmp);
hgs
parents: 31
diff changeset
   505
43
hgs
parents: 39
diff changeset
   506
    if (networkOptions.wpsSelected()) {
hgs
parents: 39
diff changeset
   507
        // In case all available network mode options support wps, go directly
hgs
parents: 39
diff changeset
   508
        // to wps-wizard.
hgs
parents: 39
diff changeset
   509
        nextPage = WlanWizardPageInternal::PageWpsStart;
hgs
parents: 39
diff changeset
   510
    } else if (networkOptions.netModes() > SingleResult) {
hgs
parents: 39
diff changeset
   511
        // If there are more than one network mode choices, go to manual selection
hgs
parents: 39
diff changeset
   512
        // of network mode.
39
hgs
parents: 31
diff changeset
   513
        nextPage = WlanWizardPageInternal::PageNetworkMode;
hgs
parents: 31
diff changeset
   514
    } else {
hgs
parents: 31
diff changeset
   515
        // if only a single network mode option is available, the mode query
hgs
parents: 31
diff changeset
   516
        // may be skipped and the next page is set to security mode query.
hgs
parents: 31
diff changeset
   517
        WlanNetworkSetting setting = networkOptions.getNetModes().at(0);
hgs
parents: 31
diff changeset
   518
        mWizard->setConfiguration(WlanWizardHelper::ConfNetworkMode, setting.mode);
53
hgs
parents: 49
diff changeset
   519
        mWizard->setConfiguration(WlanWizardHelper::ConfWlanScanSSID, setting.hidden);
43
hgs
parents: 39
diff changeset
   520
        mWizard->setConfiguration(WlanWizardHelper::ConfWpsSupported, setting.wpsSupported);
39
hgs
parents: 31
diff changeset
   521
        nextPage = WlanWizardPageInternal::PageNetworkSecurity;
hgs
parents: 31
diff changeset
   522
    }
hgs
parents: 31
diff changeset
   523
    
60
hgs
parents: 53
diff changeset
   524
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_PROCESSMULTIPLESCANRESULTS_EXIT);
39
hgs
parents: 31
diff changeset
   525
    return nextPage;
hgs
parents: 31
diff changeset
   526
}
hgs
parents: 31
diff changeset
   527
hgs
parents: 31
diff changeset
   528
/*!
hgs
parents: 31
diff changeset
   529
 * This function decides what to do with the scan results.
hgs
parents: 31
diff changeset
   530
 * @param [in] finalResults is the list of APs revealed by the last scans.
hgs
parents: 31
diff changeset
   531
 */
hgs
parents: 31
diff changeset
   532
void WlanWizardPageScanning::selectNextPageActions(
hgs
parents: 31
diff changeset
   533
    const QList<WlanScanResult> &finalResults)
hgs
parents: 31
diff changeset
   534
{
60
hgs
parents: 53
diff changeset
   535
    OstTraceFunctionEntry0(WLANWIZARDPAGESCANNING_SELECTNEXTPAGEACTIONS_ENTRY);
hgs
parents: 53
diff changeset
   536
39
hgs
parents: 31
diff changeset
   537
    mWizard->clearConfiguration(WlanWizardHelper::ConfAvailableNetworkOptions);
60
hgs
parents: 53
diff changeset
   538
39
hgs
parents: 31
diff changeset
   539
    if (finalResults.isEmpty()) {
hgs
parents: 31
diff changeset
   540
        // In case of no results at all were found.
hgs
parents: 31
diff changeset
   541
        mNextPageId = WlanWizardPageInternal::PageNetworkMode;
hgs
parents: 31
diff changeset
   542
    } else if (finalResults.size() == SingleResult) {
hgs
parents: 31
diff changeset
   543
        // In case there is only a single result.
hgs
parents: 31
diff changeset
   544
        WlanScanResult item = finalResults.first();
hgs
parents: 31
diff changeset
   545
        mNextPageId = mWizard->getNextPageId(
60
hgs
parents: 53
diff changeset
   546
            item.scanResult->value(WlanQtUtilsAp::ConfIdName).toString(),
hgs
parents: 53
diff changeset
   547
            item.scanResult->value(WlanQtUtilsAp::ConfIdSsid).toByteArray(),
39
hgs
parents: 31
diff changeset
   548
            item.scanResult->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt(),
hgs
parents: 31
diff changeset
   549
            item.scanResult->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt(),
hgs
parents: 31
diff changeset
   550
            item.scanResult->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool(),
hgs
parents: 31
diff changeset
   551
            item.networkHidden,
hgs
parents: 31
diff changeset
   552
            item.scanResult->value(WlanQtUtilsAp::ConfIdWpsSupported).toBool());
hgs
parents: 31
diff changeset
   553
    } else {
hgs
parents: 31
diff changeset
   554
        // In case more than one result is available.
hgs
parents: 31
diff changeset
   555
        mWizard->setConfiguration(WlanWizardHelper::ConfProcessSettings, true);
hgs
parents: 31
diff changeset
   556
        mNextPageId = processMultipleScanResults(finalResults);
hgs
parents: 31
diff changeset
   557
    }
hgs
parents: 31
diff changeset
   558
hgs
parents: 31
diff changeset
   559
    mWizard->nextPage();
60
hgs
parents: 53
diff changeset
   560
hgs
parents: 53
diff changeset
   561
    OstTraceFunctionExit0(WLANWIZARDPAGESCANNING_SELECTNEXTPAGEACTIONS_EXIT);
39
hgs
parents: 31
diff changeset
   562
}