adaptationlayer/dataport/dataport_csy/src/dpcommpep.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
equal deleted inserted replaced
-1:000000000000 0:63b37f68c1ce
       
     1 /*
       
     2 * Copyright (c) 2007-2008 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 the License "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: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include "dpdef.h"          // dataport definitions
       
    22 #include "dpdataport.h"     // dataport main and c32 interface
       
    23 #include "dpcommpep.h"      // comm pep interface. interaction with mif
       
    24 #include "dpdataconfig.h"   // configuration store
       
    25 #include "dpflowctrl.h"     // flow control handling
       
    26 #include "dpbreak.h"        // break signal handling
       
    27 #include "dpstruct.h"       // structures for common pep type
       
    28 #include "dplog.h"          // dataport logging
       
    29 
       
    30 #include "pep_comm_types.h" // structures for isi-message interface
       
    31 #include "osttracedefinitions.h"
       
    32 #ifdef OST_TRACE_COMPILER_IN_USE
       
    33 #include "dpcommpeptraces.h"
       
    34 #endif
       
    35 
       
    36 // LOCAL FUNCTION PROTOTYPES
       
    37 // none
       
    38 
       
    39 // ==================== LOCAL FUNCTIONS ====================
       
    40 
       
    41 // ================= MEMBER FUNCTIONS =======================
       
    42 
       
    43 // ---------------------------------------------------------
       
    44 // CDpCommPep::CDpCommPep
       
    45 // C++ default constructor.
       
    46 // ---------------------------------------------------------
       
    47 CDpCommPep::CDpCommPep(
       
    48     CDpDataPort& aDataPort ) :
       
    49     iDataPort( aDataPort ),
       
    50     iDataConfig( iDataPort.DataConfig() ),
       
    51     iBreak( iDataPort.BreakHandler() ),
       
    52     iFlowCtrl( iDataPort.FlowCtrl() )
       
    53     {
       
    54     OstTrace0( TRACE_NORMAL, CDPCOMMPEP_CDPCOMMPEP, "CDpCommPep::CDpCommPep" );
       
    55     LOGM(" CDpCommPep::CDpCommPep");
       
    56     }
       
    57 
       
    58 // ---------------------------------------------------------
       
    59 // CDpCommPep::~CDpCommPep
       
    60 // Destructor
       
    61 // ---------------------------------------------------------
       
    62 CDpCommPep::~CDpCommPep()
       
    63     {
       
    64     OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_CDPCOMMPEP, "CDpCommPep::~CDpCommPep" );
       
    65     LOGM(" CDpCommPep::~CDpCommPep");
       
    66     }
       
    67 
       
    68 // ---------------------------------------------------------
       
    69 // CDpCommPep::HandlePepCtrlReq
       
    70 // This method handles PEP control requests, which are
       
    71 // received from DCS. This method forwars handling to
       
    72 // CDpDataConfig (data configuration).
       
    73 // ---------------------------------------------------------
       
    74 //
       
    75 TInt CDpCommPep::HandlePepCtrlReq(
       
    76     const TUint8 aCtrlId,
       
    77     TDesC8& aCtrlData )
       
    78     {
       
    79     OstTrace0( TRACE_NORMAL, CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep::HandlePepCtrlReq" );
       
    80     LOGM(" CDpCommPep::HandlePepCtrlReq");
       
    81 
       
    82     TInt ret( KErrNone );
       
    83 
       
    84     // Handle control data here
       
    85     switch ( aCtrlId )
       
    86         {
       
    87         case PEP_COMM_CTRL_ID_PARAM:
       
    88             {
       
    89             LOG(" PEP_COMM_CTRL_ID_PARAM - CommPep Ctrl REQ");
       
    90             OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_PARAM - CommPep Ctrl REQ" );
       
    91 
       
    92             // We skip baudrate,data,stop,parity configurations from CMT.
       
    93             // CMT even should't send them.
       
    94             break;
       
    95             }
       
    96         case PEP_COMM_CTRL_ID_FLOW_CTRL:
       
    97             {
       
    98             LOG(" PEP_COMM_CTRL_ID_FLOW_CTRL - CommPep Ctrl REQ" );
       
    99             OstTrace0( TRACE_NORMAL, DUP2_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_FLOW_CTRL - CommPep Ctrl REQ" );
       
   100 
       
   101             // Configuring DTE interface flow control format
       
   102             PEP_COMM_CTRL_ID_FLOW_CTRL_STR& pepParam =
       
   103                 *(PEP_COMM_CTRL_ID_FLOW_CTRL_STR*)aCtrlData.Ptr();
       
   104 
       
   105             // The most common error message here is KErrNotSupported. This
       
   106             // message is forwarded and handled where HandlePepCtrlReq was
       
   107             // called.
       
   108             ret = iDataConfig.SetFlowControlConfig(
       
   109                 pepParam.inwards, pepParam.outwards, pepParam.extract);
       
   110             break;
       
   111             }
       
   112         case PEP_COMM_CTRL_ID_BREAK:
       
   113             {
       
   114             PEP_COMM_CTRL_ID_BREAK_STR& pepParam =
       
   115                 *(PEP_COMM_CTRL_ID_BREAK_STR*)aCtrlData.Ptr();
       
   116 
       
   117             LOG1(" PEP_COMM_CTRL_ID_BREAK - CommPep Ctrl REQ, type: %d",
       
   118                 pepParam.type);
       
   119             OstTraceExt1( TRACE_NORMAL, DUP3_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_BREAK - CommPep Ctrl REQ, type: %hhu", pepParam.type );
       
   120 
       
   121             iDataConfig.SetDteTypeOfBreakSignal( pepParam.type );
       
   122             break;
       
   123             }
       
   124         case PEP_COMM_CTRL_ID_AUTOBAUD:
       
   125             {
       
   126             LOG(" PEP_COMM_CTRL_ID_AUTOBAUD -  CommPep Ctrl REQ");
       
   127             OstTrace0( TRACE_NORMAL, DUP4_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_AUTOBAUD -  CommPep Ctrl REQ" );
       
   128 
       
   129             PEP_COMM_CTRL_ID_AUTOBAUD_STR& pepParam =
       
   130                 *(PEP_COMM_CTRL_ID_AUTOBAUD_STR*)aCtrlData.Ptr();
       
   131 
       
   132             iDataConfig.SetDteParityBitWhen7Mode( pepParam.parity );
       
   133             iDataConfig.SetDteAutoBauding( pepParam.mode );
       
   134             break;
       
   135             }
       
   136         case PEP_COMM_CTRL_ID_ESCAPE:
       
   137             {
       
   138             LOG(" PEP_COMM_CTRL_ID_ESCAPE - CommPep Ctrl REQ");
       
   139             OstTrace0( TRACE_NORMAL, DUP5_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_ESCAPE - CommPep Ctrl REQ" );
       
   140 
       
   141             // Configuring DTE interface escape sequence
       
   142             PEP_COMM_CTRL_ID_ESCAPE_STR& pepParam =
       
   143                 *(PEP_COMM_CTRL_ID_ESCAPE_STR*)aCtrlData.Ptr();
       
   144 
       
   145             // Set escape sequence parameters in DataConfig-object
       
   146             iDataConfig.SetEscChar( pepParam.character );
       
   147             iDataConfig.SetEscTime( pepParam.time );
       
   148             break;
       
   149             }
       
   150         case PEP_COMM_CTRL_ID_SEND_PNP:
       
   151             {
       
   152             LOG(" PEP_COMM_CTRL_ID_SEND_PNP - CommPep Ctrl REQ");
       
   153             OstTrace0( TRACE_NORMAL, DUP6_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_SEND_PNP - CommPep Ctrl REQ" );
       
   154 
       
   155             // With this control data a PEP is requested to send the contents
       
   156             // of the Plug and Play table to the DTE.
       
   157             break;
       
   158             }
       
   159         case PEP_COMM_CTRL_ID_DTR_STATUS:
       
   160             {
       
   161             LOG(" PEP_COMM_CTRL_ID_DTR_STATUS - CommPep Ctrl REQ");
       
   162             OstTrace0( TRACE_NORMAL, DUP7_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_DTR_STATUS - CommPep Ctrl REQ" );
       
   163 
       
   164             // With this control data the state of DTR signal can be asked from
       
   165             // Media PEP. this request is not supported.
       
   166             break;
       
   167             }
       
   168         case PEP_COMM_CTRL_ID_ECHO:
       
   169             {
       
   170             LOG(" PEP_COMM_CTRL_ID_ECHO - CommPep Ctrl REQ" );
       
   171             OstTrace0( TRACE_NORMAL, DUP8_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_ECHO - CommPep Ctrl REQ" );
       
   172 
       
   173             // With this control data a PEP is requested to set echoing of
       
   174             // characters received from DTE on or off.
       
   175             PEP_COMM_CTRL_ID_ECHO_STR& pepParam =
       
   176                 *(PEP_COMM_CTRL_ID_ECHO_STR*)aCtrlData.Ptr();
       
   177             iDataConfig.SetEchoDte( pepParam.mode );
       
   178             break;
       
   179             }
       
   180         // Unknown control ID - return an error message.
       
   181         default:
       
   182             {
       
   183             LOG(" ERROR - Unknown CommPep Ctrl REQ" );
       
   184             OstTrace0( TRACE_NORMAL, DUP9_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: ERROR - Unknown CommPep Ctrl REQ" );
       
   185 
       
   186             ret = KErrGeneral;
       
   187             }
       
   188         }
       
   189 
       
   190     return ret;
       
   191     }
       
   192 
       
   193 // ---------------------------------------------------------
       
   194 // CDpCommPep::HandlePepStatusInd
       
   195 // This method handles COMM type PEP status indications,
       
   196 // which are received from DCS.
       
   197 // ---------------------------------------------------------
       
   198 //
       
   199 TInt CDpCommPep::HandlePepStatusInd(
       
   200     const TUint8 aIndId,
       
   201     TDesC8& aIndData )
       
   202     {
       
   203     OstTrace0( TRACE_NORMAL, CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep::HandlePepStatusInd" );
       
   204     LOGM(" CDpCommPep::HandlePepStatusInd");
       
   205 
       
   206     TInt ret( KErrNone );
       
   207 
       
   208     // Handle control data here.
       
   209     switch ( aIndId )
       
   210         {
       
   211         case PEP_COMM_IND_ID_PARAM:
       
   212             {
       
   213             LOG(" PEP_COMM_IND_ID_PARAM - CommPep status indication");
       
   214             OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_PARAM - CommPep status indication" );
       
   215 
       
   216             // DTE should not get these messages.
       
   217             break;
       
   218             }
       
   219         case PEP_COMM_IND_ID_FLOW_CTRL:
       
   220             {
       
   221             LOG(" PEP_COMM_IND_ID_FLOWCTRL - CommPep status indication");
       
   222             OstTrace0( TRACE_NORMAL, DUP2_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_FLOWCTRL - CommPep status indication" );
       
   223 
       
   224             // DTE should not get these messages.
       
   225             break;
       
   226             }
       
   227         case PEP_COMM_IND_ID_V24_CHANGE:
       
   228             {
       
   229             LOG(" PEP_COMM_IND_ID_V24_CHANGE - CommPep status indication");
       
   230             OstTrace0( TRACE_NORMAL, DUP3_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_V24_CHANGE - CommPep status indication" );
       
   231 
       
   232             // Signal state change
       
   233             ret = iDataConfig.MapSignalsCmt2Epoc( aIndData );
       
   234 
       
   235             // We must notify client when starting
       
   236             // i.e. DataPort is ready to receive data from DTE.
       
   237             iFlowCtrl.NotifyClientDatapotReadyforDteFlow();
       
   238             break;
       
   239             }
       
   240         case PEP_COMM_IND_ID_BREAK:
       
   241             {
       
   242             LOG(" PEP_COMM_IND_ID_BREAK - CommPep status indication" );
       
   243             OstTrace0( TRACE_NORMAL, DUP4_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_BREAK - CommPep status indication" );
       
   244 
       
   245             // Set BREAK towards DTE
       
   246             TBool notifyValue;
       
   247 
       
   248             // Find out should we notify client
       
   249             iBreak.GetBreakNotify( notifyValue );
       
   250 
       
   251             if ( notifyValue )
       
   252                 {
       
   253                 // Notify client, there is no way to tell signal length
       
   254                 // to client so dump pepParam.signalLength here.
       
   255                 LOG("  CDpCommPep::HandlePepStatusInd, Complete break notify");
       
   256                 OstTrace0( TRACE_NORMAL, DUP5_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: HandlePepStatusInd, Complete break notify" );
       
   257 
       
   258                 iBreak.CompleteBreakNotify();
       
   259                 }
       
   260             break;
       
   261             }
       
   262         default:
       
   263             {
       
   264             LOG1(" ERROR - Unknown CommPep status indication: %d", aIndId );
       
   265             OstTraceExt1( TRACE_NORMAL, DUP6_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: ERROR - Unknown CommPep status indication: %hhu", aIndId );
       
   266 
       
   267             ret = KErrGeneral;
       
   268             }
       
   269         }
       
   270 
       
   271     return ret;
       
   272     }
       
   273 
       
   274 
       
   275 // ================= OTHER EXPORTED FUNCTIONS ==============
       
   276 // none
       
   277 
       
   278 //  End of File