bluetoothengine/btnotif/btnotifwrapper/src/btnotifwrapper.cpp
author hgs
Mon, 17 May 2010 11:06:23 +0300
changeset 31 a0ea99b6fa53
parent 29 48ae3789ce00
permissions -rw-r--r--
201019_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     1
/*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     2
* ============================================================================
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     3
*  Name        : btnotifwrapper.cpp
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     4
*  Part of     : bluetoothengine / btnotif
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     5
*  Description : Wrapper for Bluetooth Notifiers
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     6
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     7
*  Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies).
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     8
*  All rights reserved.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
     9
*  This component and the accompanying materials are made available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    10
*  under the terms of "Eclipse Public License v1.0"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    11
*  which accompanies this distribution, and is available
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    12
*  at the URL "http://www.eclipse.org/legal/epl-v10.html".
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    13
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    14
*  Initial Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    15
*  Nokia Corporation - initial contribution.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    16
*
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    17
*  Contributors:
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    18
*  Nokia Corporation
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    19
* ============================================================================
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    20
* Template version: 4.1
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    21
*/
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    22
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    23
#include "btnotifwrapper.h"
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    24
#include <btnotif.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    25
#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    26
#include <btextnotifierspartner.h>
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    27
#endif
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    28
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    29
/**  Identifier of the active object. */
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    30
const TInt KWrapperActive = 10;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    31
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    32
// ======== MEMBER FUNCTIONS ========
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    33
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    34
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    36
// ?description_if_needed
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    37
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    38
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    39
CBTNotifWrapper::CBTNotifWrapper( const TUid& aUid, const TUid& aChannel )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    40
:   MEikSrvNotifierBase2(),
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    41
    iUid( aUid ),
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    42
    iChannel( aChannel ),
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    43
    iResponsePtr( NULL, 0 )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    44
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    45
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    46
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    47
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    49
// ?description_if_needed
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    50
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    51
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    52
void CBTNotifWrapper::ConstructL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    53
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    54
    // lazy initialization: members are created and destroyed when needed.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    55
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    56
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    57
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    58
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    59
// NewLC
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    60
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    61
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    62
CBTNotifWrapper* CBTNotifWrapper::NewLC( const TUid& aUid, const TUid& aChannel )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    63
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    64
    CBTNotifWrapper* self = new( ELeave ) CBTNotifWrapper( aUid, aChannel );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    65
    CleanupStack::PushL( self );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    66
    self->ConstructL();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    67
    return self;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    68
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    69
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    70
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    71
// ?description_if_needed
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    72
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    73
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    74
CBTNotifWrapper::~CBTNotifWrapper()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    75
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    76
    Cancel();   // Cleans up buffers
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    77
    delete iActive;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    78
    iBTNotif.Close();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    79
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    80
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    82
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    83
// Frees all the resources i.e. destruct ourselves.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    84
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    85
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    86
void CBTNotifWrapper::Release()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    87
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    88
    delete this;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    89
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    90
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    91
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    92
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    93
// ?implementation_description
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    94
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    95
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    96
MEikSrvNotifierBase2::TNotifierInfo CBTNotifWrapper::RegisterL()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    97
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    98
    return Info();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
    99
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   100
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   101
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   102
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   103
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   104
// ?implementation_description
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   105
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   106
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   107
MEikSrvNotifierBase2::TNotifierInfo CBTNotifWrapper::Info() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   108
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   109
    MEikSrvNotifierBase2::TNotifierInfo info;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   110
    info.iUid = iUid;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   111
    info.iChannel = iChannel;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   112
    info.iPriority = MEikSrvNotifierBase2::ENotifierPriorityVHigh;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   113
    return info;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   114
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   115
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   116
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   117
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   118
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   119
// ?implementation_description
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   120
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   121
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   122
TPtrC8 CBTNotifWrapper::StartL(const TDesC8& aBuffer)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   123
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   124
    if( !IsSync() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   125
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   126
        // due to the charasteristics of Bluetooth and UI operations,
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   127
        // most of Bluetooth notifiers do not support synchronous version.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   128
        User::Leave( KErrNotSupported );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   129
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   130
    // Call notifier server and get response.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   131
    if( !iBTNotif.Handle() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   132
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   133
        User::LeaveIfError( iBTNotif.Connect() );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   134
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   135
    User::LeaveIfError( iBTNotif.StartNotifier( iUid, aBuffer ) );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   136
    iBTNotif.Close();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   137
    return KNullDesC8();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   138
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   139
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   140
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   141
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   142
// ?implementation_description
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   143
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   144
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   145
void CBTNotifWrapper::StartL(const TDesC8& aBuffer, TInt aReplySlot, 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   146
    const RMessagePtr2& aMessage)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   147
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   148
    if( !iMessage.IsNull() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   149
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   150
        aMessage.Complete( KErrAlreadyExists );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   151
        return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   152
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   153
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   154
    // Call notifier server and get response.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   155
    if( !iBTNotif.Handle() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   156
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   157
        User::LeaveIfError( iBTNotif.Connect() );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   158
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   159
    if( !iActive )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   160
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   161
        iActive = CBtSimpleActive::NewL( *this, KWrapperActive );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   162
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   163
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   164
    // We need to store the parameters locally, as aBuffer is destroyed after
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   165
    // returning from this call. We do it on the heap, so we do not permanently
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   166
    // consume memory for the buffer.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   167
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   168
    iParamsBuf.CreateL( aBuffer );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   169
    TInt len = aMessage.GetDesMaxLength( aReplySlot );
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   170
    
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   171
    iResponseBuf.CreateL( len );
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   172
    aMessage.ReadL( aReplySlot, iResponseBuf );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   173
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   174
    iBTNotif.StartNotifierAndGetResponse( iActive->RequestStatus(),
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   175
                iUid, iParamsBuf, iResponseBuf );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   176
    iActive->GoActive();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   177
    // record the request
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   178
    iReplySlot = aReplySlot;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   179
    iMessage = aMessage;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   180
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   181
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   182
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   183
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   184
// ?implementation_description
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   185
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   186
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   187
void CBTNotifWrapper::Cancel()
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   188
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   189
    // Call notifier server to cancel.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   190
    if( iActive  )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   191
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   192
        iActive->Cancel(); 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   193
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   194
    if( !iMessage.IsNull() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   195
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   196
        iMessage.Complete( KErrCancel );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   197
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   198
    iReplySlot = 0;
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   199
    iParamsBuf.Close();
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   200
    iResponseBuf.Close();
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   201
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   202
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   203
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   204
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   205
// Synchronous notifier update.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   206
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   207
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   208
TPtrC8 CBTNotifWrapper::UpdateL(const TDesC8& aBuffer)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   209
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   210
    // Call notifier server and get response.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   211
    TBuf8<256> response;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   212
    if( !iBTNotif.Handle() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   213
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   214
        User::LeaveIfError( iBTNotif.Connect() );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   215
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   216
    User::LeaveIfError( iBTNotif.UpdateNotifier( iUid, aBuffer, response ) );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   217
    return response;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   218
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   219
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   220
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   221
// From class MEikSrvNotifierBase2.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   222
// Asynchronous notifier update.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   223
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   224
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   225
void CBTNotifWrapper::UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   226
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   227
    (void) aReplySlot;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   228
    (void) aBuffer;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   229
    if( iMessage.IsNull() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   230
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   231
        // There is no outstanding request, can't relate this to anything.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   232
        aMessage.Complete( KErrNotFound );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   233
        return;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   234
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   235
    // Call notifier server and get response.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   236
    // Async updates are just for updating parameters, so they are still 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   237
    // done synchronously between here and btnotif, as they don't 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   238
    // require any user feedback or other response with
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   239
    // asynchronous/long cycles.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   240
    TPtrC8 response = UpdateL( aBuffer );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   241
    aMessage.WriteL( aReplySlot, response );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   242
    aMessage.Complete( KErrNone );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   243
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   244
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   245
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   246
// From class MBtSimpleActiveObserver.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   247
// Callback to notify that an outstanding request has completed.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   248
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   249
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   250
void CBTNotifWrapper::RequestCompletedL( CBtSimpleActive* aActive, TInt aStatus )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   251
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   252
    ASSERT( aActive->RequestId() == KWrapperActive );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   253
    (void) aActive;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   254
    if( !iMessage.IsNull() )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   255
        {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   256
        TInt err( aStatus );
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   257
        if( !err )
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   258
            {
31
a0ea99b6fa53 201019_1
hgs
parents: 29
diff changeset
   259
            err = iMessage.Write( iReplySlot, iResponseBuf );
29
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   260
            }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   261
        iMessage.Complete( err );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   262
        }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   263
    // Clean up after usage.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   264
    iBTNotif.Close();
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   265
    delete iActive;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   266
    iActive = NULL;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   267
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   268
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   269
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   270
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   271
// From class MBtSimpleActiveObserver.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   272
// Cancel and clean up all requests related to the active object.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   273
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   274
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   275
void CBTNotifWrapper::CancelRequest( TInt aRequestId )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   276
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   277
    ASSERT( aRequestId == KWrapperActive );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   278
    (void) aRequestId;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   279
    iBTNotif.CancelNotifier( iUid );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   280
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   281
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   282
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   283
// From class MBtSimpleActiveObserver.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   284
// 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   285
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   286
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   287
void CBTNotifWrapper::HandleError( CBtSimpleActive* aActive, 
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   288
        TInt aError )
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   289
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   290
    // RequestCompletedL() is not leavable.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   291
    (void) aActive;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   292
    (void) aError;
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   293
    }
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   294
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   295
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   296
// Check if this is a synchronous notifier or not.
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   297
// ---------------------------------------------------------------------------
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   298
//
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   299
TBool CBTNotifWrapper::IsSync() const
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   300
    {
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   301
    return ( iUid == KBTGenericInfoNotifierUid );
48ae3789ce00 201017_2
hgs
parents:
diff changeset
   302
    }