remotecontrol/avrcp/avc/avcframe.cpp
author jontanne
Thu, 14 Oct 2010 11:16:56 +0100
changeset 52 321a10f609ef
parent 51 20ac952a623c
permissions -rw-r--r--
Add USB HCTL to bt package
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
20ac952a623c 201040_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
20ac952a623c 201040_02
hgs
parents:
diff changeset
     2
// All rights reserved.
20ac952a623c 201040_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
20ac952a623c 201040_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
20ac952a623c 201040_02
hgs
parents:
diff changeset
     7
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    10
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    11
// Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    12
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    13
// Description:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    14
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    15
20ac952a623c 201040_02
hgs
parents:
diff changeset
    16
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
 @file
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
 @publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
 @released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
#include <bluetooth/logger.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
#include <avcframe.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
#ifdef __FLOG_ACTIVE
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
_LIT8(KLogComponent, LOG_COMPONENT_AVRCP_FRAME);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
#endif
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
#ifdef _DEBUG
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
PANICCATEGORY("avctpframe");
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
#endif
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
/** Constructor.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
@param aFrameType ECommand if this is a command, EResponse
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
				  if it's a response.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
@internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
@released	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
CAVCFrame::CAVCFrame(AVC::TFrameType aFrameType)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
	: iFrameType(aFrameType)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
/** Destructor.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
EXPORT_C CAVCFrame::~CAVCFrame()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
	LOG_FUNC
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
	iBuffer.Close();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
/** Factory function.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
This overload should be called when an AV/C frame is
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
to be constructed, that is it is probably an outgoing frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
@param aFrameType ECommand if this is a command, EResponse
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
				  if it's a response.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
@param aType The AV/C CType for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
@param aSubunitType The AV/C subunit type for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
@param aSubunitId The AV/C subunit id for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
@return A fully constructed CAVCFrame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
@leave System wide error code.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
EXPORT_C CAVCFrame* CAVCFrame::NewL(AVC::TFrameType aFrameType, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
	AVC::TCType aType, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
	AVC::TSubunitType aSubunitType, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
	AVC::TSubunitID aSubunitID)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
	CAVCFrame* frame = new(ELeave)CAVCFrame(aFrameType);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
	CleanupStack::PushL(frame);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
	frame->ConstructL(aType, aSubunitType, aSubunitID);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
	CleanupStack::Pop(frame);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	return frame;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
/** Factory function.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
This overload should be used when a data buffer should
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
be parsed as an AV/C frame, that is it is probably an 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
incoming frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
@param aBuffer A buffer to be parsed as an AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
@param aFrameType ECommand if this is a command, EResponse
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
				  if it's a response.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
@return A fully constructed CAVCFrame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
@leave System wide error code.				  
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
EXPORT_C CAVCFrame* CAVCFrame::NewL(const TDesC8& aBuffer, AVC::TFrameType aFrameType)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	CAVCFrame* frame = new(ELeave)CAVCFrame(aFrameType);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
	CleanupStack::PushL(frame);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
	frame->ConstructL(aBuffer);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
	CleanupStack::Pop(frame);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
	return frame;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
/** Second phase construction.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
This overload is used when an AV/C frame is
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
to be constructed, that is it is probably an outgoing frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
@param aType The AV/C CType for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
@param aSubunitType The AV/C subunit type for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   114
@param aSubunitId The AV/C subunit id for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   115
@return A fully constructed CAVCFrame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   116
@leave System wide error code.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   117
@internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
   118
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   119
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   120
void CAVCFrame::ConstructL(AVC::TCType aType, AVC::TSubunitType aSubunitType, AVC::TSubunitID aSubunitID)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   121
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   122
	iBuffer.CreateL(KAVCFrameMaxLength);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   123
	iBuffer.Zero();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   124
	iBuffer.Append(TChar(aType));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   125
20ac952a623c 201040_02
hgs
parents:
diff changeset
   126
	TInt subType	= aSubunitType;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   127
	TInt subID		= aSubunitID;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   128
20ac952a623c 201040_02
hgs
parents:
diff changeset
   129
	if (subType > AVC::ETypeExtended2)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   130
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   131
		iSubunitTypeExtensionBytes = 1;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   132
		iBuffer.Append(TChar(AVC::ETypeExtended1 << 3));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   133
		subType -= 0x100;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   134
20ac952a623c 201040_02
hgs
parents:
diff changeset
   135
		while (subType > 0x100)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   136
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   137
			iBuffer.Append(TChar(AVC::ETypeExtended2));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   138
			subType -= 0x100;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   139
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   140
20ac952a623c 201040_02
hgs
parents:
diff changeset
   141
		iBuffer.Append(TChar(subType));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   142
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   143
	else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   144
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   145
		iBuffer.Append(TChar(subType << 3));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   146
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   147
20ac952a623c 201040_02
hgs
parents:
diff changeset
   148
	if (subID > AVC::EIDExtended2)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   149
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   150
		iSubunitIDExtensionBytes = 1;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   151
		iBuffer[1] |= AVC::EIDExtended1;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   152
		subID -= 0x100;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   153
20ac952a623c 201040_02
hgs
parents:
diff changeset
   154
		while (subID > 0x100)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   155
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   156
			iBuffer.Append(TChar(AVC::EIDExtended2));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   157
			subID -= 0x100;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   158
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   159
20ac952a623c 201040_02
hgs
parents:
diff changeset
   160
		iBuffer.Append(TChar(subID));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   161
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   162
	else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   163
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   164
		iBuffer[1] |= subID;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   165
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   166
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   167
20ac952a623c 201040_02
hgs
parents:
diff changeset
   168
/** Second phase construction.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   169
20ac952a623c 201040_02
hgs
parents:
diff changeset
   170
This overload is used when a data buffer should
20ac952a623c 201040_02
hgs
parents:
diff changeset
   171
be parsed as an AV/C frame, that is it is probably an 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   172
incoming frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   173
20ac952a623c 201040_02
hgs
parents:
diff changeset
   174
For details of parsing refer to the AV/C digital
20ac952a623c 201040_02
hgs
parents:
diff changeset
   175
interface command set specification.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   176
20ac952a623c 201040_02
hgs
parents:
diff changeset
   177
@param aBuffer A buffer to be parsed as an AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   178
@return A fully constructed CAVCFrame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   179
@leave System wide error code.	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   180
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   181
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   182
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   183
void CAVCFrame::ConstructL(const TDesC8& aBuffer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   184
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   185
	iBuffer.CreateL(aBuffer);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   186
	FindExtensionL(iBuffer, iSubunitTypeExtensionBytes, iSubunitIDExtensionBytes);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   187
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   188
20ac952a623c 201040_02
hgs
parents:
diff changeset
   189
/** Gets the AV/C frame type.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   190
20ac952a623c 201040_02
hgs
parents:
diff changeset
   191
@return ECommand if this is a command, EResponse if this
20ac952a623c 201040_02
hgs
parents:
diff changeset
   192
		is a response.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   193
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   194
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   195
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   196
EXPORT_C AVC::TFrameType CAVCFrame::FrameType() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   197
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   198
	return iFrameType;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   199
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   200
20ac952a623c 201040_02
hgs
parents:
diff changeset
   201
/** Gets the AV/C frame type.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   202
20ac952a623c 201040_02
hgs
parents:
diff changeset
   203
@param aFrame The frame to get the frame type for.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   204
@return ECommand if this is a command, EResponse if this
20ac952a623c 201040_02
hgs
parents:
diff changeset
   205
		is a response.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   206
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   207
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   208
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   209
EXPORT_C AVC::TFrameType CAVCFrame::FrameType(const TDesC8& aFrame)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   210
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   211
	AVC::TFrameType frameType = AVC::ECommand;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   212
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   213
	if( aFrame[0] > KAVCCommandMaxRangeLength )  
20ac952a623c 201040_02
hgs
parents:
diff changeset
   214
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   215
			frameType = AVC::EResponse;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   216
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   217
	return frameType;	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   218
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   219
20ac952a623c 201040_02
hgs
parents:
diff changeset
   220
/** Set the AV/C frame type for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   221
20ac952a623c 201040_02
hgs
parents:
diff changeset
   222
@param The frame type to set.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   223
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   224
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   225
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   226
EXPORT_C void CAVCFrame::SetFrameType(AVC::TFrameType aFrameType)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   227
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   228
	iFrameType = aFrameType;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   229
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   230
20ac952a623c 201040_02
hgs
parents:
diff changeset
   231
/** Get the AV/C CType for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   232
20ac952a623c 201040_02
hgs
parents:
diff changeset
   233
@return The AV/C CType for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   234
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   235
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   236
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   237
EXPORT_C AVC::TCType CAVCFrame::Type() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   238
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   239
	return static_cast<AVC::TCType>(iBuffer[0]);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   240
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   241
20ac952a623c 201040_02
hgs
parents:
diff changeset
   242
/** Set the AV/C CType for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   243
20ac952a623c 201040_02
hgs
parents:
diff changeset
   244
@param aType The AV/C CType to set.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   245
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   246
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   247
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   248
EXPORT_C void CAVCFrame::SetType(AVC::TCType aType)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   249
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   250
	iBuffer[0] = aType;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   251
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   252
20ac952a623c 201040_02
hgs
parents:
diff changeset
   253
/** Get the AV/C subunit type for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   254
20ac952a623c 201040_02
hgs
parents:
diff changeset
   255
@return The AV/C subunit type for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   256
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   257
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   258
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   259
EXPORT_C AVC::TSubunitType CAVCFrame::SubunitType() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   260
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   261
	if (iSubunitTypeExtensionBytes == 0)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   262
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   263
		return static_cast<AVC::TSubunitType>((iBuffer[1] & KAVCSubunitTypeMask) >> 3);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   264
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   265
20ac952a623c 201040_02
hgs
parents:
diff changeset
   266
	return static_cast<AVC::TSubunitType>(iBuffer[1 + iSubunitTypeExtensionBytes] + (iSubunitTypeExtensionBytes * 0x100));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   267
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   268
20ac952a623c 201040_02
hgs
parents:
diff changeset
   269
/** Get the AV/C subunit id for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   270
20ac952a623c 201040_02
hgs
parents:
diff changeset
   271
@return The AV/C subunit id for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   272
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   273
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   274
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   275
EXPORT_C AVC::TSubunitID CAVCFrame::SubunitID() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   276
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   277
	if (iSubunitIDExtensionBytes == 0)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   278
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   279
		return static_cast<AVC::TSubunitID>(iBuffer[1] & KAVCSubunitIDMask);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   280
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   281
20ac952a623c 201040_02
hgs
parents:
diff changeset
   282
	return static_cast<AVC::TSubunitID>(iBuffer[1 + iSubunitTypeExtensionBytes + iSubunitIDExtensionBytes] + (iSubunitIDExtensionBytes * 0x100));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   283
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   284
20ac952a623c 201040_02
hgs
parents:
diff changeset
   285
/** Find extension bytes for the frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   286
20ac952a623c 201040_02
hgs
parents:
diff changeset
   287
@param aBuffer buffer to be used.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   288
@return True if its a valid frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   289
@leave System wide error code.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   290
@internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
   291
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   292
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   293
/* static */ void CAVCFrame::FindExtensionL(const TDesC8& aBuffer, TInt& aSubunitTypeExtensionBytes, TInt& aSubunitIDExtensionBytes)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   294
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   295
	TInt minLength = KAVCFrameHeaderLength;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   296
	if(aBuffer.Length() < minLength)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   297
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   298
		User::Leave(KErrCorrupt);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   299
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   300
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   301
	if (static_cast<AVC::TSubunitType>((aBuffer[1] & KAVCSubunitTypeMask) >> 3) == AVC::ETypeExtended1)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   302
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   303
		aSubunitTypeExtensionBytes++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   304
		minLength++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   305
20ac952a623c 201040_02
hgs
parents:
diff changeset
   306
		while (aBuffer[1 + aSubunitTypeExtensionBytes] == AVC::ETypeExtended2)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   307
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   308
			if(aBuffer.Length() < minLength)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   309
				{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   310
				User::Leave(KErrCorrupt);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   311
				}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   312
			
20ac952a623c 201040_02
hgs
parents:
diff changeset
   313
			aSubunitTypeExtensionBytes++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   314
			minLength++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   315
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   316
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   317
20ac952a623c 201040_02
hgs
parents:
diff changeset
   318
	if (static_cast<AVC::TSubunitID>(aBuffer[1] & KAVCSubunitIDMask) == AVC::EIDExtended1)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   319
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   320
		aSubunitIDExtensionBytes++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   321
		minLength++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   322
20ac952a623c 201040_02
hgs
parents:
diff changeset
   323
		while (aBuffer[1 + aSubunitIDExtensionBytes] == AVC::EIDExtended1)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   324
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   325
			if(aBuffer.Length() < minLength)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   326
				{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   327
				User::Leave(KErrCorrupt);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   328
				}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   329
			
20ac952a623c 201040_02
hgs
parents:
diff changeset
   330
			aSubunitIDExtensionBytes++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   331
			minLength++;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   332
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   333
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   334
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   335
	//Ensure frame is a valid length i.e. the Opcode() method can be safely called.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   336
	if(aBuffer.Length() < minLength)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   337
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   338
		User::Leave(KErrCorrupt);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   339
		}	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   340
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   341
20ac952a623c 201040_02
hgs
parents:
diff changeset
   342
/** Get the AV/C opcode for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   343
20ac952a623c 201040_02
hgs
parents:
diff changeset
   344
@param aBuffer buffer to search.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   345
@return The AV/C opcode for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   346
@leave System wide error code.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   347
@internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
   348
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   349
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   350
/* static */ EXPORT_C AVC::TOpcode CAVCFrame::OpcodeL(const TDesC8& aBuffer)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   351
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   352
	TInt subunitTypeExtensionBytes=0;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   353
	TInt subunitIDExtensionBytes=0;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   354
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   355
	FindExtensionL(aBuffer, subunitTypeExtensionBytes, subunitIDExtensionBytes);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   356
	return static_cast<AVC::TOpcode> (aBuffer[KAVCFrameHeaderLength + subunitTypeExtensionBytes + subunitIDExtensionBytes - 1]);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   357
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   358
20ac952a623c 201040_02
hgs
parents:
diff changeset
   359
/** Get the AV/C opcode for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   360
20ac952a623c 201040_02
hgs
parents:
diff changeset
   361
@return The AV/C opcode for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   362
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   363
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   364
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   365
EXPORT_C TUint8 CAVCFrame::Opcode() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   366
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   367
	return iBuffer[KAVCFrameHeaderLength + iSubunitTypeExtensionBytes + iSubunitIDExtensionBytes - 1];
20ac952a623c 201040_02
hgs
parents:
diff changeset
   368
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   369
20ac952a623c 201040_02
hgs
parents:
diff changeset
   370
/** Get the AV/C OperationId for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   371
20ac952a623c 201040_02
hgs
parents:
diff changeset
   372
This is only valid for passthrough commands.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   373
20ac952a623c 201040_02
hgs
parents:
diff changeset
   374
@param aOpId On return, the AV/C opcode for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   375
@return KErrNotSupported if this is not a passthrough command,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   376
		KErrCorrupt if this passthrough command does not contain a OpId,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   377
		KErrNone otherwise.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   378
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   379
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   380
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   381
EXPORT_C TInt CAVCFrame::OperationId(TUint8& aOpId) const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   382
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   383
	TInt err = KErrNotSupported;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   384
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   385
	if(Opcode() == AVC::EPassThrough)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   386
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   387
		if(DataLength())
20ac952a623c 201040_02
hgs
parents:
diff changeset
   388
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   389
			aOpId = (iBuffer[iSubunitTypeExtensionBytes + iSubunitIDExtensionBytes + KAVCFrameHeaderLength]) & 0x7f;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   390
			err = KErrNone;			
20ac952a623c 201040_02
hgs
parents:
diff changeset
   391
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   392
		else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   393
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   394
			err = KErrCorrupt;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   395
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   396
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   397
		
20ac952a623c 201040_02
hgs
parents:
diff changeset
   398
	return err;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   399
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   400
20ac952a623c 201040_02
hgs
parents:
diff changeset
   401
/** Get the AV/C button action for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   402
20ac952a623c 201040_02
hgs
parents:
diff changeset
   403
This is only valid for passthrough commands.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   404
20ac952a623c 201040_02
hgs
parents:
diff changeset
   405
@param aOpId On return, the AV/C button action for this frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   406
@return KErrNotSupported if this is not a passthrough command,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   407
		KErrCorrupt if this passthrough command does not contain a button action,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   408
		KErrNone otherwise.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   409
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   410
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   411
*/	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   412
EXPORT_C TInt CAVCFrame::ButtonAct(AVCPanel::TButtonAction& aButtonAction) const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   413
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   414
	TInt err = KErrNotSupported;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   415
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   416
	if(Opcode() == AVC::EPassThrough)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   417
		{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   418
		if(DataLength())
20ac952a623c 201040_02
hgs
parents:
diff changeset
   419
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   420
			aButtonAction = (((iBuffer[iSubunitTypeExtensionBytes + iSubunitIDExtensionBytes + KAVCFrameHeaderLength]) & 0x80) == AVCPanel::EButtonRelease) ? AVCPanel::EButtonRelease : AVCPanel::EButtonPress;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   421
			err = KErrNone;	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   422
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   423
		else
20ac952a623c 201040_02
hgs
parents:
diff changeset
   424
			{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   425
			err = KErrCorrupt;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   426
			}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   427
		}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   428
	return err;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   429
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   430
20ac952a623c 201040_02
hgs
parents:
diff changeset
   431
/** Retrieve data from the AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   432
20ac952a623c 201040_02
hgs
parents:
diff changeset
   433
@param aIndex The offset of the data element within the data segment of the frame
20ac952a623c 201040_02
hgs
parents:
diff changeset
   434
@return The data element at aIndex.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   435
@panic If aIndex is outside the frame. DataLength() should be used to check the length of the data segment before using the [] operator.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   436
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   437
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   438
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   439
EXPORT_C const TUint8& CAVCFrame::operator[](TInt aIndex) const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   440
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   441
	return iBuffer[aIndex + iSubunitTypeExtensionBytes + iSubunitIDExtensionBytes + KAVCFrameHeaderLength];
20ac952a623c 201040_02
hgs
parents:
diff changeset
   442
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   443
20ac952a623c 201040_02
hgs
parents:
diff changeset
   444
/** Retrieve the entire AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   445
20ac952a623c 201040_02
hgs
parents:
diff changeset
   446
@return The AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   447
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   448
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   449
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   450
EXPORT_C const TDesC8& CAVCFrame::Data() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   451
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   452
	return iBuffer;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   453
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   454
20ac952a623c 201040_02
hgs
parents:
diff changeset
   455
/** Append data to the AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   456
20ac952a623c 201040_02
hgs
parents:
diff changeset
   457
@param aDes The data to be appended.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   458
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   459
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   460
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   461
EXPORT_C void CAVCFrame::Append(const TDesC8& aDes)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   462
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   463
	iBuffer.Append(aDes);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   464
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   465
20ac952a623c 201040_02
hgs
parents:
diff changeset
   466
/** Append data to the AV/C frame.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   467
20ac952a623c 201040_02
hgs
parents:
diff changeset
   468
@param aChar The data to be appended.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   469
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   470
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   471
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   472
EXPORT_C void CAVCFrame::Append(TChar aChar)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   473
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   474
	iBuffer.Append(aChar);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   475
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   476
20ac952a623c 201040_02
hgs
parents:
diff changeset
   477
/** Return the length of the data in the AV/C frame
20ac952a623c 201040_02
hgs
parents:
diff changeset
   478
20ac952a623c 201040_02
hgs
parents:
diff changeset
   479
@return The length of the data in the AV/C frame
20ac952a623c 201040_02
hgs
parents:
diff changeset
   480
@publishedPartner
20ac952a623c 201040_02
hgs
parents:
diff changeset
   481
@released
20ac952a623c 201040_02
hgs
parents:
diff changeset
   482
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
   483
EXPORT_C TInt CAVCFrame::DataLength() const
20ac952a623c 201040_02
hgs
parents:
diff changeset
   484
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   485
	return (iBuffer.Length() - iSubunitTypeExtensionBytes - iSubunitIDExtensionBytes - KAVCFrameHeaderLength);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   486
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   487
20ac952a623c 201040_02
hgs
parents:
diff changeset
   488
EXPORT_C CAVCFrame* CAVCVendorDependentResponse::NewL(TUint aVendorID)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   489
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   490
	using namespace AVC;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   491
	CAVCFrame* frame = CAVCFrame::NewL(EResponse,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   492
										ENotImplemented, //client can override
20ac952a623c 201040_02
hgs
parents:
diff changeset
   493
										EPanel,
20ac952a623c 201040_02
hgs
parents:
diff changeset
   494
										EID0);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   495
	// stupid frames don't know about themselves so we construct in derived classes
20ac952a623c 201040_02
hgs
parents:
diff changeset
   496
	// first opcode  - base class REALLY ought to have opcode setter
20ac952a623c 201040_02
hgs
parents:
diff changeset
   497
	frame->Append(0); //opcode for VD frame
20ac952a623c 201040_02
hgs
parents:
diff changeset
   498
	// second vendor
20ac952a623c 201040_02
hgs
parents:
diff changeset
   499
	frame->Append(aVendorID>>16);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   500
	frame->Append(aVendorID>>8);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   501
	frame->Append(aVendorID);	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   502
	return frame;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   503
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   504
20ac952a623c 201040_02
hgs
parents:
diff changeset
   505
EXPORT_C TPtrC8 CAVCVendorDependentCommand::GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   506
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   507
	ASSERT_DEBUG(aFrame.Opcode()==AVC::EVendorDependent); //opcode
20ac952a623c 201040_02
hgs
parents:
diff changeset
   508
	aVID = (aFrame.operator[](0)<<16) | 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   509
			(aFrame.operator[](1)<<8) |
20ac952a623c 201040_02
hgs
parents:
diff changeset
   510
			(aFrame.operator[](2));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   511
20ac952a623c 201040_02
hgs
parents:
diff changeset
   512
	return (aFrame.Data().Right(aFrame.DataLength()-KAVCVendorIdLength));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   513
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   514
20ac952a623c 201040_02
hgs
parents:
diff changeset
   515
EXPORT_C TPtrC8 CAVCVendorUniquePassthroughCommand::GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   516
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   517
	ASSERT_DEBUG(aFrame.Opcode()==AVC::EPassThrough); //opcode
20ac952a623c 201040_02
hgs
parents:
diff changeset
   518
	aVID = (aFrame.operator[](2)<<16) | 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   519
			(aFrame.operator[](3)<<8) |
20ac952a623c 201040_02
hgs
parents:
diff changeset
   520
			(aFrame.operator[](4));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   521
20ac952a623c 201040_02
hgs
parents:
diff changeset
   522
	return (aFrame.Data().Right(aFrame.DataLength()-KAVCVendorIdLength-2));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   523
	}