First public contribution.
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // Signal data structure that supports marshalling
20 #ifndef TSIGNALMESSAGE_H
21 #define TSIGNALMESSAGE_H
23 const TInt KSigMsgLength = 32;
24 const TUint8 KSigMsgVersion = 1;
60 virtual ~TSignalMessage() {}
62 static TBool SignalMatchBySigNum(const TSignalMessage& aMsg1, const TSignalMessage& aMsg2)
64 if(aMsg1.mType != ESignal || aMsg2.mType != ESignal)
67 if (aMsg1.mSignal == aMsg2.mSignal)
74 static TBool SigValMatchBySigNum(const TSignalMessage& aMsg1, const TSignalMessage& aMsg2)
76 if(aMsg1.mType != ESignalValuePair || aMsg2.mType != ESignalValuePair)
79 if (aMsg1.mSigVal.mSignal == aMsg2.mSigVal.mSignal)
86 inline TInt Marshall(TDes8& aBuffer)
88 TUint8 lBufPtr[KSigMsgLength] = {0};
90 if(aBuffer.MaxSize() != KSigMsgLength)
93 lBufPtr[0] = KSigMsgVersion;
101 case ESignalValuePair:
102 lBufPtr[2] = mSigVal.mSignal;
104 lBufPtr[3] = (TUint8)(mSigVal.mValue & 0x000000FF);
105 lBufPtr[4] = (TUint8)((mSigVal.mValue & 0x0000FF00) >> 8);
106 lBufPtr[5] = (TUint8)((mSigVal.mValue & 0x00FF0000) >> 16);
107 lBufPtr[6] = (TUint8)((mSigVal.mValue & 0xFF000000) >> 24);
109 case EAlarmRegistration:
110 lBufPtr[2] = (TUint8)(mTimeOut & 0x000000FF);
111 lBufPtr[3] = (TUint8)((mTimeOut & 0x0000FF00) >> 8);
112 lBufPtr[4] = (TUint8)((mTimeOut & 0x00FF0000) >> 16);
113 lBufPtr[5] = (TUint8)((mTimeOut & 0xFF000000) >> 24);
116 lBufPtr[2] = mSignal;
119 memcpy(&lBufPtr[2],&mPid,sizeof(mPid));
122 Mem::Copy(&lBufPtr[2], &mRtSignal.mSignal, sizeof(mRtSignal.mSignal));
123 Mem::Copy(&lBufPtr[2+sizeof(mRtSignal.mSignal)], &mRtSignal.mTimerId, sizeof(mRtSignal.mTimerId));
131 aBuffer.Append(lBufPtr,KSigMsgLength);
135 inline TInt Unmarshall(TDes8& aBuffer)
137 const TUint8* lBufPtr = aBuffer.Ptr();
139 if(aBuffer.MaxSize() != KSigMsgLength)
142 if(lBufPtr[0] != KSigMsgVersion)
150 mSignal = lBufPtr[2];
152 case ESignalValuePair:
153 mSigVal.mSignal = lBufPtr[2];
155 mSigVal.mValue |= (TUint32)lBufPtr[3];
156 mSigVal.mValue |= (((TUint32)lBufPtr[4]) << 8);
157 mSigVal.mValue |= (((TUint32)lBufPtr[5]) << 16);
158 mSigVal.mValue |= (((TUint32)lBufPtr[6]) << 24);
160 case EAlarmRegistration:
162 mTimeOut |= (TUint32)lBufPtr[2];
163 mTimeOut |= (((TUint32)lBufPtr[3]) << 8);
164 mTimeOut |= (((TUint32)lBufPtr[4]) << 16);
165 mTimeOut |= (((TUint32)lBufPtr[5]) << 24);
168 mSignal = lBufPtr[2];
172 memcpy(&mPid,&lBufPtr[2],sizeof(mPid));
175 Mem::Copy(&mRtSignal.mSignal, &lBufPtr[2], sizeof(mRtSignal.mSignal));
176 Mem::Copy(&mRtSignal.mTimerId,&lBufPtr[2+sizeof(mRtSignal.mSignal)], sizeof(mRtSignal.mTimerId));
188 #endif // TSIGNALMESSAGE_H