accessoryservices/accessoryremotecontrol/src/remconkeyeventconverter/RemConKeyEventContainer.cpp
changeset 0 4e1aa6a622a0
equal deleted inserted replaced
-1:000000000000 0:4e1aa6a622a0
       
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  A container/accessor class for all CRemConKeyEvent -instances.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include "RemConKeyEventContainer.h"
       
    22 #include "RemConDebug.h"
       
    23 #include <remconcoreapi.h>
       
    24 #include <RemConExtensionApi.h>
       
    25 
       
    26 // ============================ MEMBER FUNCTIONS ===============================
       
    27 
       
    28 // -----------------------------------------------------------------------------
       
    29 // CRemConKeyEventContainer::CRemConKeyEventContainer
       
    30 // C++ default constructor can NOT contain any code, that
       
    31 // might leave.
       
    32 // -----------------------------------------------------------------------------
       
    33 //
       
    34 CRemConKeyEventContainer::CRemConKeyEventContainer()
       
    35     {
       
    36     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEventContainer::CRemConKeyEventContainer()" );
       
    37     }
       
    38 
       
    39 // -----------------------------------------------------------------------------
       
    40 // CRemConKeyEventContainer::ConstructL
       
    41 // Symbian 2nd phase constructor can leave.
       
    42 // -----------------------------------------------------------------------------
       
    43 //
       
    44 void CRemConKeyEventContainer::ConstructL()
       
    45     {
       
    46     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEventContainer::ConstructL()" );
       
    47 
       
    48     TUid coreAPIUid;
       
    49     TUid pocAPIUid;
       
    50     TUid syncAPIUid;
       
    51     coreAPIUid.iUid = KRemConCoreApiUid;
       
    52     TUid extensionAPIUid;
       
    53     extensionAPIUid.iUid = KRemConExtCallHandlingApiUid;
       
    54     pocAPIUid.iUid = KRemConExtPocApiUid;
       
    55     syncAPIUid.iUid = KRemConExtSynchronizationApiUid;
       
    56     CRemConKeyEvent* event( NULL );
       
    57     TBuf8< KRemConExtParamMaxLength > parameter;
       
    58   	
       
    59   	//
       
    60     // Simple call handling key events:
       
    61     //
       
    62     
       
    63     // send/end key pressed shortly: answer call or end call
       
    64     TRemConKeyEventData k1 = { ERemConKeyCodeSendEnd, 
       
    65     						   ERemConKeyModifierNone, 
       
    66     						   ERemConKeyStateUp, 
       
    67     						   ERemConKeyEventShortPress };
       
    68     
       
    69     event = CRemConKeyEvent::NewL( k1, 
       
    70     							   extensionAPIUid, 
       
    71     							   ERemConExtAnswerEnd, 
       
    72     							   ERemConCoreApiButtonClick );
       
    73     							   
       
    74  	CleanupStack::PushL( event );   
       
    75     AddEventL(event);
       
    76     CleanupStack::Pop( event );
       
    77     	
       
    78     // send/end key pressed long time: reject ongoing call
       
    79     TRemConKeyEventData k2 = { ERemConKeyCodeSendEnd, 
       
    80     						   ERemConKeyModifierNone, 
       
    81     						   ERemConKeyStateUp, 
       
    82     						   ERemConKeyEventLongPress };
       
    83 
       
    84     event = CRemConKeyEvent::NewL( k2, 
       
    85     							   extensionAPIUid,
       
    86         						   ERemConExtEndCall, 
       
    87         						   ERemConCoreApiButtonRelease );
       
    88     CleanupStack::PushL( event );   
       
    89     AddEventL(event);
       
    90     CleanupStack::Pop( event );
       
    91         
       
    92     // send/end key has been down long time: voice call
       
    93     TRemConKeyEventData k3 = { ERemConKeyCodeSendEnd, 
       
    94     						   ERemConKeyModifierNone, 
       
    95     						   ERemConKeyStateDown, 
       
    96     						   ERemConKeyEventLongPress };
       
    97     // set parameter
       
    98     TBool param( ETrue );
       
    99     parameter.AppendNum( param );
       
   100  	
       
   101  	event = CRemConKeyEvent::NewL( k3, 
       
   102     							   extensionAPIUid, 
       
   103     							   ERemConExtVoiceDial, 
       
   104     							   parameter );
       
   105     							   
       
   106     CleanupStack::PushL( event );   
       
   107     AddEventL(event);
       
   108     CleanupStack::Pop( event );
       
   109     
       
   110     //
       
   111     // POC key events:
       
   112     //
       
   113         
       
   114     // POC key down
       
   115     TRemConKeyEventData k4 = { ERemConKeyCodePOC, 
       
   116                                ERemConKeyModifierNone, 
       
   117                                ERemConKeyStateDown, 
       
   118                                ERemConKeyEventRepeat };
       
   119                                
       
   120     event = CRemConKeyEvent::NewL( k4, 
       
   121     							   pocAPIUid, 
       
   122         						   ERemConExtAPOCButtonDown, 
       
   123         						   ERemConCoreApiButtonPress );
       
   124     CleanupStack::PushL( event );   
       
   125     AddEventL(event);
       
   126     CleanupStack::Pop( event );
       
   127     
       
   128     
       
   129     // POC key up (long)
       
   130     TRemConKeyEventData k5 = { ERemConKeyCodePOC, 
       
   131                                ERemConKeyModifierNone, 
       
   132                                ERemConKeyStateUp, 
       
   133                                ERemConKeyEventLongPress };
       
   134                                
       
   135     event = CRemConKeyEvent::NewL( k5, 
       
   136     							   pocAPIUid, 
       
   137         						   ERemConExtAPOCButtonUp, 
       
   138         						   ERemConCoreApiButtonRelease );
       
   139     CleanupStack::PushL( event );   
       
   140     AddEventL(event);
       
   141     CleanupStack::Pop( event );
       
   142     
       
   143     //
       
   144     // Volume control key events:
       
   145     //
       
   146     
       
   147     // Volume up: ERemConKeyCodeVolumeUp down; volume up/press
       
   148     TRemConKeyEventData k6 = { ERemConKeyCodeVolumeUp, 
       
   149                                  ERemConKeyModifierNone, 
       
   150                                  ERemConKeyStateDown, 
       
   151                                  ERemConKeyEventNone };
       
   152 
       
   153     event = CRemConKeyEvent::NewL( k6, 
       
   154     							   coreAPIUid, 
       
   155         						   ERemConCoreApiVolumeUp, 
       
   156         						   ERemConCoreApiButtonPress );
       
   157     CleanupStack::PushL( event );   
       
   158     AddEventL(event);
       
   159     CleanupStack::Pop( event );
       
   160     
       
   161     // Volume up: ERemConKeyCodeVolumeUp up&short press; volume up/release
       
   162     TRemConKeyEventData k7 = { ERemConKeyCodeVolumeUp, 
       
   163                                ERemConKeyModifierNone, 
       
   164                                ERemConKeyStateUp, 
       
   165                                ERemConKeyEventShortPress };
       
   166 
       
   167     event = CRemConKeyEvent::NewL( k7, 
       
   168     							   coreAPIUid, 
       
   169         						   ERemConCoreApiVolumeUp, 
       
   170         						   ERemConCoreApiButtonRelease );
       
   171     CleanupStack::PushL( event );   
       
   172     AddEventL(event);
       
   173     CleanupStack::Pop( event );
       
   174     
       
   175     // Volume up: ERemConKeyCodeVolumeUp up&long press; volume up/release
       
   176     TRemConKeyEventData k8 = { ERemConKeyCodeVolumeUp, 
       
   177                                ERemConKeyModifierNone, 
       
   178                                ERemConKeyStateUp, 
       
   179                                ERemConKeyEventLongPress };
       
   180 
       
   181     event = CRemConKeyEvent::NewL( k8, 
       
   182     							   coreAPIUid, 
       
   183         						   ERemConCoreApiVolumeUp, 
       
   184         						   ERemConCoreApiButtonRelease );
       
   185     CleanupStack::PushL( event );   
       
   186     AddEventL(event);
       
   187     CleanupStack::Pop( event );
       
   188         
       
   189     // Volume down: ERemConKeyCodeVolumeDown down; volume down/press
       
   190     TRemConKeyEventData k9 =  { ERemConKeyCodeVolumeDown, 
       
   191                                 ERemConKeyModifierNone, 
       
   192                                 ERemConKeyStateDown, 
       
   193                                 ERemConKeyEventNone };
       
   194                                 
       
   195     event = CRemConKeyEvent::NewL( k9, 
       
   196     							   coreAPIUid, 
       
   197         						   ERemConCoreApiVolumeDown, 
       
   198         						   ERemConCoreApiButtonPress );
       
   199     CleanupStack::PushL( event );   
       
   200     AddEventL(event);
       
   201     CleanupStack::Pop( event );
       
   202     
       
   203     // Volume down: ERemConKeyCodeVolumeDown down&short press; volume down
       
   204     TRemConKeyEventData k10 =  { ERemConKeyCodeVolumeDown, 
       
   205                                 ERemConKeyModifierNone, 
       
   206                                 ERemConKeyStateUp, 
       
   207                                 ERemConKeyEventShortPress };
       
   208                                 
       
   209     event = CRemConKeyEvent::NewL( k10, 
       
   210     							   coreAPIUid, 
       
   211         						   ERemConCoreApiVolumeDown, 
       
   212         						   ERemConCoreApiButtonRelease );
       
   213     CleanupStack::PushL( event );   
       
   214     AddEventL(event);
       
   215     CleanupStack::Pop( event );
       
   216     
       
   217     // Volume down: ERemConKeyCodeVolumeDown down&long press; volume down
       
   218     TRemConKeyEventData k11 = { ERemConKeyCodeVolumeDown, 
       
   219                                 ERemConKeyModifierNone, 
       
   220                                 ERemConKeyStateUp, 
       
   221                                 ERemConKeyEventLongPress };
       
   222                                 
       
   223     event = CRemConKeyEvent::NewL( k11, 
       
   224     							   coreAPIUid, 
       
   225         						   ERemConCoreApiVolumeDown, 
       
   226         						   ERemConCoreApiButtonRelease );
       
   227     CleanupStack::PushL( event );   
       
   228     AddEventL(event);
       
   229     CleanupStack::Pop( event );
       
   230         
       
   231     //
       
   232     // Media key events:
       
   233     //
       
   234 	    
       
   235     // Play or Pause has been pressed in accessory: 
       
   236     // ERemConCoreApiPausePlayFunction is delivered to S60 application. 
       
   237     // It's S60 application's responsibility to interpret whether play 
       
   238     // or pause was pressed.
       
   239     TRemConKeyEventData k12 = { ERemConKeyCodePlayPause, 
       
   240                                 ERemConKeyModifierNone, 
       
   241                                 ERemConKeyStateUp, 
       
   242                                 ERemConKeyEventShortPress };
       
   243                                 
       
   244     event = CRemConKeyEvent::NewL( k12, 
       
   245     							   coreAPIUid, 
       
   246         						   ERemConCoreApiPausePlayFunction, 
       
   247         						   ERemConCoreApiButtonClick );
       
   248     CleanupStack::PushL( event );   
       
   249     AddEventL(event);
       
   250     CleanupStack::Pop( event );
       
   251     
       
   252        // Stop: ERemConKeyCodeStop down; stop.
       
   253     TRemConKeyEventData k13 = { ERemConKeyCodeStop, 
       
   254                                 ERemConKeyModifierNone, 
       
   255                                 ERemConKeyStateUp, 
       
   256                                 ERemConKeyEventShortPress };
       
   257                                 
       
   258     event = CRemConKeyEvent::NewL( k13, 
       
   259     							   coreAPIUid, 
       
   260         						   ERemConCoreApiStop, 
       
   261         						   ERemConCoreApiButtonClick );
       
   262     CleanupStack::PushL( event );   
       
   263     AddEventL(event);
       
   264     CleanupStack::Pop( event );
       
   265     
       
   266        // Fast forward 1: ERemConCoreApiFastForward down&repeating; fast 
       
   267        // forward.
       
   268     TRemConKeyEventData k14 = { ERemConKeyCodeForward, 
       
   269                                 ERemConKeyModifierNone, 
       
   270                                 ERemConKeyStateDown, 
       
   271                                 ERemConKeyEventRepeat };
       
   272                                 
       
   273     event = CRemConKeyEvent::NewL( k14, 
       
   274     							   coreAPIUid, 
       
   275         						   ERemConCoreApiFastForward, 
       
   276         						   ERemConCoreApiButtonPress );
       
   277     CleanupStack::PushL( event );   
       
   278     AddEventL(event);
       
   279     CleanupStack::Pop( event );
       
   280     
       
   281        // Fast forward 2: ERemConCoreApiFastForward up; fast forward.
       
   282     TRemConKeyEventData k15 = { ERemConKeyCodeForward, 
       
   283                                 ERemConKeyModifierNone, 
       
   284                                 ERemConKeyStateUp, 
       
   285                                 ERemConKeyEventLongPress };
       
   286                                 
       
   287     event = CRemConKeyEvent::NewL( k15, 
       
   288     							   coreAPIUid, 
       
   289         						   ERemConCoreApiFastForward, 
       
   290         						   ERemConCoreApiButtonRelease );
       
   291     CleanupStack::PushL( event );   
       
   292     AddEventL(event);
       
   293     CleanupStack::Pop( event );
       
   294     
       
   295        // Rewind 1: ERemConKeyCodeRewind down&repeating; rewind.
       
   296     TRemConKeyEventData k16 = { ERemConKeyCodeBack, 
       
   297                                 ERemConKeyModifierNone, 
       
   298                                 ERemConKeyStateDown, 
       
   299                                 ERemConKeyEventRepeat };
       
   300                                 
       
   301     event = CRemConKeyEvent::NewL( k16, 
       
   302     							   coreAPIUid, 
       
   303         						   ERemConCoreApiRewind, 
       
   304         						   ERemConCoreApiButtonPress );
       
   305     CleanupStack::PushL( event );   
       
   306     AddEventL(event);
       
   307     CleanupStack::Pop( event );
       
   308     
       
   309     // Rewind 2: ERemConKeyCodeRewind up; rewind.
       
   310     TRemConKeyEventData k17 = { ERemConKeyCodeBack, 
       
   311                                 ERemConKeyModifierNone, 
       
   312                                 ERemConKeyStateUp, 
       
   313                                 ERemConKeyEventLongPress };
       
   314                                 
       
   315     event = CRemConKeyEvent::NewL( k17, 
       
   316     							   coreAPIUid, 
       
   317         						   ERemConCoreApiRewind, 
       
   318         						   ERemConCoreApiButtonRelease );
       
   319     CleanupStack::PushL( event );   
       
   320     AddEventL(event);
       
   321     CleanupStack::Pop( event );
       
   322     
       
   323     // Next track: ERemConCoreApiFastForward up & short press; next track.
       
   324     TRemConKeyEventData k18 = { ERemConKeyCodeForward, 
       
   325                                 ERemConKeyModifierNone, 
       
   326                                 ERemConKeyStateUp, 
       
   327                                 ERemConKeyEventShortPress };
       
   328                                 
       
   329     event = CRemConKeyEvent::NewL( k18, 
       
   330     							   coreAPIUid, 
       
   331         						   ERemConCoreApiForward, 
       
   332         						   ERemConCoreApiButtonClick );
       
   333     CleanupStack::PushL( event );   
       
   334     AddEventL(event);
       
   335     CleanupStack::Pop( event );
       
   336     
       
   337     // Previous track: ERemConKeyCodeRewind up & short press; previous 
       
   338     // track.
       
   339     TRemConKeyEventData k19 = { ERemConKeyCodeBack, 
       
   340                                 ERemConKeyModifierNone, 
       
   341                                 ERemConKeyStateUp, 
       
   342                                 ERemConKeyEventShortPress };
       
   343                                 
       
   344     event = CRemConKeyEvent::NewL( k19, 
       
   345     							   coreAPIUid, 
       
   346         						   ERemConCoreApiBackward, 
       
   347         						   ERemConCoreApiButtonClick );
       
   348     CleanupStack::PushL( event );   
       
   349     AddEventL(event);
       
   350     CleanupStack::Pop( event );
       
   351     
       
   352     //
       
   353     // Radio key events:
       
   354     //
       
   355 
       
   356     // RemConKeyEventConverter does not support specific Radio event op IDs, 
       
   357     // the media op IDs are used instead.
       
   358     // It is up to the application to interpret the media operation IDs to
       
   359     // next channel, previous track etc.
       
   360     
       
   361     //
       
   362     // Sync key events:
       
   363     //
       
   364     
       
   365        // Sync: ERemConKeyCodeSync down.
       
   366     TRemConKeyEventData k20 = { ERemConKeyCodeSync, 
       
   367                                 ERemConKeyModifierNone, 
       
   368                                 ERemConKeyStateDown, 
       
   369                                 ERemConKeyEventShortPress };
       
   370                                 
       
   371     event = CRemConKeyEvent::NewL( k20, 
       
   372     							   syncAPIUid, 
       
   373         						   ERemConExtSynchronization, 
       
   374         						   ERemConCoreApiButtonClick );
       
   375     CleanupStack::PushL( event );   
       
   376     AddEventL(event);
       
   377     CleanupStack::Pop( event );
       
   378     
       
   379     //
       
   380     // Mute key event:
       
   381     //
       
   382     
       
   383        // Mute: ERemConKeyCodeMute up.
       
   384     TRemConKeyEventData k21 = { ERemConKeyCodeMute, 
       
   385                                 ERemConKeyModifierNone, 
       
   386                                 ERemConKeyStateUp, 
       
   387                                 ERemConKeyEventShortPress };
       
   388                                 
       
   389     event = CRemConKeyEvent::NewL( k21, 
       
   390     							   coreAPIUid, 
       
   391         						   ERemConCoreApiMute, 
       
   392         						   ERemConCoreApiButtonClick );
       
   393     CleanupStack::PushL( event );   
       
   394     AddEventL(event);
       
   395     CleanupStack::Pop( event );
       
   396 
       
   397     // Redial
       
   398     TRemConKeyEventData k22 = { ERemConKeyCodeRedial, 
       
   399     						   ERemConKeyModifierNone, 
       
   400     						   ERemConKeyStateUp, 
       
   401     						   ERemConKeyEventShortPress };
       
   402     
       
   403     event = CRemConKeyEvent::NewL( k22, 
       
   404     							   extensionAPIUid, 
       
   405     							   ERemConExtLastNumberRedial, 
       
   406     							   ERemConCoreApiButtonClick );
       
   407     							   
       
   408  	CleanupStack::PushL( event );   
       
   409     AddEventL(event);
       
   410     CleanupStack::Pop( event );
       
   411     
       
   412     /*
       
   413     // Send key
       
   414     TRemConKeyEventData k23 = { ERemConKeyCodeSend, 
       
   415     						   ERemConKeyModifierNone, 
       
   416     						   ERemConKeyStateUp, 
       
   417     						   ERemConKeyEventShortPress };
       
   418     
       
   419     event = CRemConKeyEvent::NewL( k23, 
       
   420     							   extensionAPIUid, 
       
   421     							   ERemConExtAnswerCall, 
       
   422     							   ERemConCoreApiButtonClick );
       
   423     							   
       
   424  	CleanupStack::PushL( event );   
       
   425     AddEventL(event);
       
   426     CleanupStack::Pop( event );    
       
   427 
       
   428     // End key
       
   429     TRemConKeyEventData k24 = { ERemConKeyCodeEnd, 
       
   430     						   ERemConKeyModifierNone, 
       
   431     						   ERemConKeyStateUp, 
       
   432     						   ERemConKeyEventShortPress };
       
   433     
       
   434     event = CRemConKeyEvent::NewL( k24, 
       
   435     							   extensionAPIUid, 
       
   436     							   ERemConExtEndCall, 
       
   437     							   ERemConCoreApiButtonClick );
       
   438     							   
       
   439  	CleanupStack::PushL( event );   
       
   440     AddEventL(event);
       
   441     CleanupStack::Pop( event );    
       
   442     */
       
   443     }
       
   444 
       
   445 // -----------------------------------------------------------------------------
       
   446 // CRemConKeyEventContainer::NewL
       
   447 // Two-phased constructor.
       
   448 // -----------------------------------------------------------------------------
       
   449 //
       
   450 CRemConKeyEventContainer* CRemConKeyEventContainer::NewL()
       
   451     {
       
   452     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEventContainer::NewL()" );
       
   453 	
       
   454     CRemConKeyEventContainer* self = new( ELeave ) CRemConKeyEventContainer;
       
   455     
       
   456     CleanupStack::PushL( self );
       
   457     self->ConstructL();
       
   458     CleanupStack::Pop( self );
       
   459 
       
   460     return self;
       
   461     }
       
   462    
       
   463 // Destructor
       
   464 CRemConKeyEventContainer::~CRemConKeyEventContainer()
       
   465     {
       
   466     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEventContainer::~CRemConKeyEventContainer()" );
       
   467     iKeyEventArray.ResetAndDestroy();
       
   468     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEventContainer::~CRemConKeyEventContainer() return void" );
       
   469     }
       
   470 
       
   471 // -----------------------------------------------------------------------------
       
   472 // CRemConKeyEventContainer::AddEventL
       
   473 // Add a key event instance to container.
       
   474 // (other items were commented in a header).
       
   475 // -----------------------------------------------------------------------------
       
   476 //
       
   477 void CRemConKeyEventContainer::AddEventL( 
       
   478     const CRemConKeyEvent* aKeyEvent )
       
   479     {
       
   480     COM_TRACE_1( "[AccFW:RemConConverter] CRemConKeyEvent::AddEventL( %d )", aKeyEvent );
       
   481 
       
   482     iKeyEventArray.AppendL( aKeyEvent );
       
   483     }
       
   484 
       
   485 // -----------------------------------------------------------------------------
       
   486 // CRemConKeyEventContainer::GetEvents
       
   487 // Return key event instances.
       
   488 // (other items were commented in a header).
       
   489 // -----------------------------------------------------------------------------
       
   490 //
       
   491 const RPointerArray<CRemConKeyEvent>& CRemConKeyEventContainer::GetEvents() const
       
   492     {
       
   493     COM_TRACE_( "[AccFW:RemConConverter] CRemConKeyEvent::GetEvents()" );
       
   494     return iKeyEventArray;
       
   495     }
       
   496 
       
   497 //  End of File