adaptationlayer/devicemodecontroller/dmc_ext/src/dmc_mce_isi.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/devicemodecontroller/dmc_ext/src/dmc_mce_isi.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,380 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+* 
+* Description: 
+*     Implementation of DMC MCE ISI utility functions.
+*
+*/
+
+
+// INCLUDE FILES 
+#include <pn_const.h>               // PN constants
+#include <phonetisi.h>              // ISI_HEADER_***
+
+#ifdef USE_MTC_SERVER
+#include <mtcisi.h>                 // MTC related definitions. for testing only
+#else // USE_MTC_SERVER
+#include <mceisi.h>                 // MCE ISI stuff
+#endif // USE_MTC_SERVER
+
+#include <isikernel.h>              // TIsiKernelSend
+#include "dmc_extension.h"          // DMC extions pointer
+#include "dmc_mce_isi.h"
+#include "dmc_trace.h"
+
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "dmc_mce_isiTraces.h"
+#endif
+
+// EXTERNAL DATA STRUCTURES 
+// EXTERNAL FUNCTION PROTOTYPES 
+// FORWARD DECLARATIONS
+
+// CONSTANTS
+#define MAX_ISI_MSG_SIZE   32
+
+/**
+* Move a pointer over the phonet-header(8 bytes)
+* This is used because a received ISI-message contains
+* a phonet header, 8 bytes, which we are not interested
+* in. 
+*/
+#define ISI_MSG(a) (ISI_HEADER_SIZE + a)
+
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES  
+DDmcExtension* MceIsi::iDmcExtPtr(NULL);
+
+// LOCAL FUNCTION PROTOTYPES  
+
+// ==================== LOCAL FUNCTIONS ====================
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+// ================= MEMBER FUNCTIONS =======================
+void MceIsi::Init(DDmcExtension* const aDmcExtPtr)
+    {
+    OstTrace1(TRACE_ENTRY_EXIT, DMC_MCE_INIT_ENTRY,
+              "DMC:MCE_ISIMSG: Init() # IN - aDmcExtPtr: 0x%x:", aDmcExtPtr);
+    DMC_TRACE((("DMC:MCE_ISIMSG: Init() # IN - aDmcExtPtr: 0x%x"), aDmcExtPtr));
+
+    iDmcExtPtr = aDmcExtPtr;
+
+    DMC_TRACE_ASSERT_RESET(aDmcExtPtr, "DMC:MCE_ISIMSG: NULL pointer",
+                           KErrNoMemory);
+
+#ifdef USE_MTC_SERVER
+    // List of MCE indications to be subcribed
+    TUint8 dmcIndArray[] = {PN_MTC, MTC_STATE_INFO_IND};
+
+#else // USE_MTC_SERVER
+    TUint8 dmcIndArray[] = {PN_MODEM_MCE, MCE_MODEM_STATE_IND};
+
+#endif // USE_MTC_SERVER
+
+    TPtr8  ptr(dmcIndArray, sizeof(dmcIndArray), sizeof(dmcIndArray));
+
+    TInt err = iDmcExtPtr->SubscribeIndications(ptr);
+    DMC_TRACE_ASSERT_RESET(err == KErrNone , "Subscirbe ISI events failed", err);
+
+#ifdef _DEBUG
+    DMC_TRACE(("DMC:EH_APE_CEN: Init() - Subscribe MCE Indications"));
+
+    for (TUint32 i = 0; i < (sizeof(dmcIndArray) / 2); i++)
+        {
+        DMC_TRACE((("DMC:EH_APE_CEN: Init() - Resource   ID: 0x%x"), dmcIndArray[i]));
+        DMC_TRACE((("DMC:EH_APE_CEN: Init() - Indication ID: 0x%x"), dmcIndArray[i + 1]));
+        }
+#endif // _DEBUG
+
+    OstTrace1(TRACE_ENTRY_EXIT, DMC_MCE_INIT_RETURN,
+              "DMC:MCE_ISIMSG: Init() # OUT - iDmcExtPtr: 0x%x:", iDmcExtPtr);
+    DMC_TRACE((("DMC:MCE_ISIMSG: Init() # OUT - iDmcExtPtr: 0x%x"), iDmcExtPtr));
+    }
+
+
+// -----------------------------------------------------------------------------
+// MceIsi::MceModemStatQueryReq
+// This function sends a state query req to Modem MCE-server.
+// -----------------------------------------------------------------------------
+//
+void MceIsi::MceModemStateQueryReq()
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_MODEM_STATE_QUERY_REQ_ENTRY,
+              "DMC:MCE_ISIMSG: MceModemStateQueryReq() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateQueryReq() # IN"));
+
+#ifdef USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,   PN_MTC);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,      1);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,    MTC_STATE_QUERY_REQ);
+    sendMsg.Set8bit(ISI_MSG(MTC_STATE_QUERY_REQ_OFFSET_FILLERBYTE1), 0);
+    sendMsg.Set8bit(ISI_MSG(MTC_STATE_QUERY_REQ_OFFSET_FILLERBYTE2), 0);
+
+#else // USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,                 PN_MODEM_MCE);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,                    1);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,                  MCE_MODEM_STATE_QUERY_REQ);
+    sendMsg.Set8bit(ISI_MSG(MCE_MODEM_STATE_QUERY_REQ_OFFSET_FILLERBYTE1), 0);
+    sendMsg.Set8bit(ISI_MSG(MCE_MODEM_STATE_QUERY_REQ_OFFSET_FILLERBYTE2), 0);
+
+#endif // USE_MTC_SERVER
+
+     // Send message to receiver
+    TInt err = iDmcExtPtr->Send(sendMsg.Complete());
+
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateQueryReq() - err: %d"), err));
+    
+    DMC_TRACE_ASSERT_RESET(err == KErrNone, "Send failed", err);
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_MODEM_STATE_QUERY_REQ_RETURN,
+              "DMC:MCE_ISIMSG: MceModemStatQueryReq() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateQueryReq() # OUT"));
+    }
+
+
+//-----------------------------------------------------------
+//  MceIsi::MceModemStateQueryResp
+//-----------------------------------------------------------
+TInt MceIsi::MceModemStateQueryResp(const TUint8* const aMsgPtr, TUint8& aModemCurrentState)
+    {
+    OstTrace1(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_STATE_QUERY_RESP_ENTRY,
+              "DMC:MCE_ISIMSG: MceModemStateQueryResp() # IN - aMsgPtr: 0x%x",
+              (TUint)aMsgPtr);
+    DMC_TRACE((("DMC:EH_APE_CEN: MceModemStateQueryResp() # IN - aMsgPtr: 0x%x"), aMsgPtr));
+    
+    TInt retVal(KErrNone);
+
+#ifdef USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MTC_STATE_QUERY_RESP_OFFSET_TRANSID)]);
+    TUint8 modemCurrentState(aMsgPtr[ISI_MSG(MTC_STATE_QUERY_RESP_OFFSET_CURRENT)]);
+    TUint8 modemTargetState(aMsgPtr[ISI_MSG(MTC_STATE_QUERY_RESP_OFFSET_TARGET)]);
+
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateQueryResp() - trId: %d, modemCurrentState: 0x%x, modemTargetState: 0x%x:"),
+                 trId, modemCurrentState, modemTargetState));
+
+#else // USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MCE_MODEM_STATE_QUERY_RESP_OFFSET_TRANSID)]);
+    TUint8 modemCurrentState(aMsgPtr[ISI_MSG(MCE_MODEM_STATE_QUERY_RESP_OFFSET_CURRENT)]);
+    TUint8 modemTargetState(aMsgPtr[ISI_MSG(MCE_MODEM_STATE_QUERY_RESP_OFFSET_TARGET)]);
+
+    OstTraceExt3(TRACE_FLOW, DMC_MCE_ISI_MCE_STATE_QUERY_RESP_1,
+                 "DMC:MCE_ISIMSG: MceModemStateQueryResp() - trId: %d, modemCurrentState: 0x%x, modemTargetState: 0x%x:",
+                 trId, modemCurrentState, modemTargetState);
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateQueryResp() - trId: %d, modemCurrentState: 0x%x, modemTargetState: 0x%x:"),
+                 trId, modemCurrentState, modemTargetState));
+#endif // USE_MTC_SERVER
+
+    // Check if Modem has already powered up. 
+    if (modemCurrentState == modemTargetState)
+        {
+        // Modem ready
+        aModemCurrentState = modemTargetState;
+
+        DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateQueryResp() - modem ready"));
+        }
+    else
+        {
+        /* Modem is not ready because current and target states
+           are not the same. */
+        retVal = KErrNotReady;
+
+        DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateQueryResp() - modem not ready"));
+        }
+
+    OstTrace1(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_STATE_QUERY_RESP_RETURN,
+              "DMC:MCE_ISIMSG: MceModemStateQueryResp() # OUT - retVal: %d", retVal);
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateQueryResp() # OUT - retVal: %d"), retVal));
+
+    return retVal;
+    }
+
+
+//-----------------------------------------------------------
+//  MceIsi::McePowerOffReq
+//-----------------------------------------------------------
+void MceIsi::McePowerOffReq()
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_POWER_OFF_REQ_ENTRY,
+              "DMC:MCE_ISIMSG: McePowerOffReq() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: McePowerOffReq() # IN"));
+
+#ifdef USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,   PN_MTC);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,      3);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,    MTC_POWER_OFF_REQ);
+    sendMsg.Set8bit(ISI_MSG(MTC_POWER_OFF_REQ_OFFSET_FILL1), MTC_NORMAL_POWER_OFF);
+    sendMsg.Set8bit(ISI_MSG(MTC_POWER_OFF_REQ_OFFSET_FILLERBYTE1), 0); // filler
+
+#else // USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,         PN_MODEM_MCE);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,            3);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,          MCE_POWER_OFF_REQ);
+    sendMsg.Set8bit(ISI_MSG(MCE_POWER_OFF_REQ_OFFSET_FILLERBYTE1), 0);
+
+#endif // USE_MTC_SERVER
+
+     // Send message to receiver
+    TInt err = iDmcExtPtr->Send(sendMsg.Complete());
+
+    DMC_TRACE((("DMC:MCE_ISIMSG: McePowerOffReq() - err: %d"), err));
+
+    DMC_TRACE_ASSERT_RESET(err == KErrNone, "Send failed", err);
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_POWER_OFF_REQ_RETURN,
+              "DMC:MCE_ISIMSG: McePowerOffReq() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: McePowerOffReq() # OUT"));
+    }
+
+
+//-----------------------------------------------------------
+//  MceIsi::McePowerOffResp
+//-----------------------------------------------------------
+void MceIsi::McePowerOffResp(const TUint8* const aMsgPtr)
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_POWER_OFF_RESP_ENTRY,
+              "DMC:MCE_ISIMSG: MceResetResp() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetResp() # IN"));
+
+#if USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MTC_POWER_OFF_RESP_OFFSET_TRANSID)]);
+    TUint8 status(aMsgPtr[ISI_MSG(MTC_POWER_OFF_RESP_OFFSET_STATUS)]);
+#else // USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MCE_RESET_RESP_OFFSET_TRANSID)]);
+    TUint8 status(aMsgPtr[ISI_MSG(MCE_RESET_RESP_OFFSET_STATUS)]);
+#endif // USE_MTC_SERVER
+    /* Modem reset cannot fail, thus just print out 
+       received information. */
+    OstTraceExt2(TRACE_FLOW, DMC_MCE_ISI_MCE_POWER_OFF_RESP_1,
+                 "DMC:MCE_ISIMSG: McePowerOff() - trId: %d, status: 0x%x",
+                 trId, status);
+    DMC_TRACE((("DMC:MCE_ISIMSG: McePowerOff() - trId: %d, status: 0x%x"),
+                 trId, status));
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_POWER_OFF_RETURN,
+              "DMC:MCE_ISIMSG: McePowerOff() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetResp() # OUT"));
+    }
+
+
+//-----------------------------------------------------------
+//  MceIsi::MceResetReq
+//-----------------------------------------------------------
+void MceIsi::MceResetReq()
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_RESET_REQ_ENTRY,
+              "DMC:MCE_ISIMSG: MceResetReq() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetReq() # IN"));
+
+#if USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,   PN_MTC);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,      2);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,    MTC_RESET_GENERATE_REQ);
+    sendMsg.Set8bit(ISI_MSG(MTC_RESET_GENERATE_REQ_OFFSET_TYPE), MTC_STATE_VIA_RESET); // type
+    sendMsg.Set8bit(ISI_MSG(MTC_RESET_GENERATE_REQ_OFFSET_STATE), MTC_LOCAL);           // state
+
+#else // USE_MTC_SERVER
+    TIsiKernelSend sendMsg(iDmcExtPtr->AllocateMsgBlock(MAX_ISI_MSG_SIZE));
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_RESOURCEID,     PN_MODEM_MCE);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_TRANSID,        2);
+    sendMsg.Set8bit(ISI_HEADER_OFFSET_MESSAGEID,      MCE_RESET_REQ_OFFSET_MESSAGEID);
+    sendMsg.Set8bit(ISI_MSG(MCE_RESET_REQ_OFFSET_FILLERBYTE1), 0);
+
+#endif // USE_MTC_SERVER
+
+     // Send message to receiver
+    TInt err = iDmcExtPtr->Send(sendMsg.Complete());
+
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateQueryReq() - err: %d"), err));
+
+    DMC_TRACE_ASSERT_RESET(err == KErrNone, "Send failed", err);
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_RESET_REQ_RETURN,
+              "DMC:MCE_ISIMSG: MceResetReq() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetReq() # OUT"));
+    }
+
+
+//-----------------------------------------------------------
+//  MceIsi::MceResetResp
+//-----------------------------------------------------------
+void MceIsi::MceResetResp(const TUint8* const aMsgPtr)
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_RESET_RESP_ENTRY,
+              "DMC:MCE_ISIMSG: MceResetResp() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetResp() # IN"));
+
+#if USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MTC_RESET_GENERATE_RESP_OFFSET_TRANSID)]);
+    TUint8 status(aMsgPtr[ISI_MSG(MTC_RESET_GENERATE_RESP_OFFSET_STATUS)]);
+
+#else // USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MCE_RESET_RESP_OFFSET_TRANSID)]);
+    TUint8 status(aMsgPtr[ISI_MSG(MCE_RESET_RESP_OFFSET_STATUS)]);
+
+
+#endif // USE_MTC_SERVER
+
+    /* Modem reset cannot fail, thus just print out 
+       received information. */
+    OstTraceExt2(TRACE_FLOW, DMC_MCE_ISI_MCE_RESET_RESP_1,
+                 "DMC:MCE_ISIMSG: MceResetResp() - trId: %d, status: 0x%x",
+                 trId, status);
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceResetResp() - trId: %d, status: 0x%x"),
+                 trId, status));
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_RESET_RESP_RETURN,
+              "DMC:MCE_ISIMSG: MceResetResp() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceResetResp() # OUT"));
+    }
+    
+
+//-----------------------------------------------------------
+//  MceIsi::MceModemStateInd
+//-----------------------------------------------------------
+void MceIsi::MceModemStateInd(const TUint8* const aMsgPtr, TUint8& aModemState, TUint8& aModemAction)
+    {
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_STATE_IND_ENTRY,
+              "DMC:MCE_ISIMSG: MceModemStateInd() # IN");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateInd() # IN"));
+
+#if USE_MTC_SERVER
+    TUint8 trId(aMsgPtr[ISI_MSG(MTC_STATE_INFO_IND_OFFSET_TRANSID)]);
+    aModemState  = aMsgPtr[ISI_MSG(MTC_STATE_INFO_IND_OFFSET_STATE)];
+    aModemAction = aMsgPtr[ISI_MSG(MTC_STATE_INFO_IND_OFFSET_ACTION)];
+
+#else // USE_MTC_SERVER
+        TUint8 trId(aMsgPtr[ISI_MSG(MCE_MODEM_STATE_IND_OFFSET_TRANSID)]);
+    aModemState  = aMsgPtr[ISI_MSG(MCE_MODEM_STATE_IND_OFFSET_STATE)];
+    aModemAction = aMsgPtr[ISI_MSG(MCE_MODEM_STATE_IND_OFFSET_ACTION)];
+
+#endif // USE_MTC_SERVER
+
+    OstTraceExt3(TRACE_FLOW, DMC_MCE_ISI_MCE_STATE_IND_1,
+                 "DMC:MCE_ISIMSG: MceModemStateInd() - trId: %d, aModemState: 0x%x, aModemAction: 0x%x",
+                 trId, aModemState, aModemAction);
+    DMC_TRACE((("DMC:MCE_ISIMSG: MceModemStateInd() - trId: %d, aModemState: 0x%x, aModemAction: 0x%x"),
+                 trId, aModemState, aModemAction));
+
+    OstTrace0(TRACE_ENTRY_EXIT, DMC_MCE_ISI_MCE_STATE_IND_RETURN,
+              "DMC:MCE_ISIMSG: MceModemStateInd() # OUT");
+    DMC_TRACE(("DMC:MCE_ISIMSG: MceModemStateInd() # OUT"));
+    }
+
+// End of File