usbengines/usbwatcher/src/tusbindicatorhandler.cpp
author hgs
Fri, 23 Apr 2010 23:17:21 +0300
changeset 43 4712310216c0
permissions -rw-r--r--
201003
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  This implements TUsbIndicatorHandler class.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#include <e32std.h>
hgs
parents:
diff changeset
    20
#include <AknNotifySignature.h> // SAknNotifierPackage
hgs
parents:
diff changeset
    21
#include <avkon.hrh> //EAknIndicatorUSBConnection
hgs
parents:
diff changeset
    22
#include "tusbindicatorhandler.h"
hgs
parents:
diff changeset
    23
#include "debug.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    26
// C++ Constructor 
hgs
parents:
diff changeset
    27
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    28
//
hgs
parents:
diff changeset
    29
TUsbIndicatorHandler::TUsbIndicatorHandler() 
hgs
parents:
diff changeset
    30
    : iDevStateB4Suspend( EUsbDeviceStateUndefined )
hgs
parents:
diff changeset
    31
    , iUsbIndicator(EFalse)
hgs
parents:
diff changeset
    32
    {
hgs
parents:
diff changeset
    33
    }
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
// Change USB Indicator 
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
//
hgs
parents:
diff changeset
    39
void TUsbIndicatorHandler::HandleDeviceStateChange( TUsbDeviceState aStateOld, 
hgs
parents:
diff changeset
    40
            TUsbDeviceState aStateNew )
hgs
parents:
diff changeset
    41
    {
hgs
parents:
diff changeset
    42
    LOG_FUNC
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
    LOG2( "USB device state changed: %d ==> %d", aStateOld, aStateNew );
hgs
parents:
diff changeset
    45
    
hgs
parents:
diff changeset
    46
    if ( EUsbDeviceStateConfigured == aStateNew ) // Entering configed state 
hgs
parents:
diff changeset
    47
        {
hgs
parents:
diff changeset
    48
        // filter out case of configed -> suspended -> configed
hgs
parents:
diff changeset
    49
        if ( ( EUsbDeviceStateSuspended != aStateOld ) || 
hgs
parents:
diff changeset
    50
             ( EUsbDeviceStateConfigured != iDevStateB4Suspend) )
hgs
parents:
diff changeset
    51
            {
hgs
parents:
diff changeset
    52
            ShowUsbIndicator( ETrue );
hgs
parents:
diff changeset
    53
            }
hgs
parents:
diff changeset
    54
        }
hgs
parents:
diff changeset
    55
    else if ( EUsbDeviceStateSuspended == aStateNew )
hgs
parents:
diff changeset
    56
    // If current state is suspend, we do not change the indicator, but save
hgs
parents:
diff changeset
    57
    // the previous state
hgs
parents:
diff changeset
    58
        {
hgs
parents:
diff changeset
    59
        iDevStateB4Suspend = aStateOld;
hgs
parents:
diff changeset
    60
        }
hgs
parents:
diff changeset
    61
    else // New device state is not configured, nor suspended
hgs
parents:
diff changeset
    62
        {
hgs
parents:
diff changeset
    63
        // Hide USB indicator if previous state is either configured, or
hgs
parents:
diff changeset
    64
        // suspended AND state before is not configured
hgs
parents:
diff changeset
    65
        if( ( EUsbDeviceStateConfigured == aStateOld ) ||
hgs
parents:
diff changeset
    66
            ( ( EUsbDeviceStateSuspended == aStateOld ) &&
hgs
parents:
diff changeset
    67
              ( EUsbDeviceStateConfigured == iDevStateB4Suspend ) ) ) 
hgs
parents:
diff changeset
    68
            {
hgs
parents:
diff changeset
    69
            ShowUsbIndicator( EFalse );
hgs
parents:
diff changeset
    70
            }
hgs
parents:
diff changeset
    71
        } 
hgs
parents:
diff changeset
    72
    }
hgs
parents:
diff changeset
    73
    
hgs
parents:
diff changeset
    74
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    75
// Show USB Indicator
hgs
parents:
diff changeset
    76
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
//
hgs
parents:
diff changeset
    78
void TUsbIndicatorHandler::ShowUsbIndicator( TInt aUsbIndicatorState )
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
    LOG_FUNC
hgs
parents:
diff changeset
    81
    
hgs
parents:
diff changeset
    82
    iUsbIndicator = aUsbIndicatorState;
hgs
parents:
diff changeset
    83
    LOG1( "USB indicator state %d", aUsbIndicatorState );
hgs
parents:
diff changeset
    84
    RNotifier notifier;
hgs
parents:
diff changeset
    85
    TInt err = notifier.Connect();
hgs
parents:
diff changeset
    86
    if ( KErrNone == err )
hgs
parents:
diff changeset
    87
        {
hgs
parents:
diff changeset
    88
        TPckgBuf< SAknNotifierPackage<SAknSmallIndicatorParams> > pckg;
hgs
parents:
diff changeset
    89
        pckg().iParamData.iSmallIndicatorUid =
hgs
parents:
diff changeset
    90
            TUid::Uid( EAknIndicatorUSBConnection );
hgs
parents:
diff changeset
    91
        pckg().iParamData.iValue = aUsbIndicatorState ? 
hgs
parents:
diff changeset
    92
            EAknIndicatorStateOn : EAknIndicatorStateOff ;
hgs
parents:
diff changeset
    93
        notifier.StartNotifier( KAknSmallIndicatorUid, pckg );
hgs
parents:
diff changeset
    94
        notifier.Close();
hgs
parents:
diff changeset
    95
        }
hgs
parents:
diff changeset
    96
    else
hgs
parents:
diff changeset
    97
        {
hgs
parents:
diff changeset
    98
        LOG1( "RNotifier::Connect error: %d", err );
hgs
parents:
diff changeset
    99
        }
hgs
parents:
diff changeset
   100
    }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// End of file