bluetoothappprofiles/avrcp/avc/avcframe.h
changeset 0 f63038272f30
child 19 43824b19ee35
equal deleted inserted replaced
-1:000000000000 0:f63038272f30
       
     1 // Copyright (c) 2004-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".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef AVCFRAME_H
       
    17 #define AVCFRAME_H
       
    18 
       
    19 /**
       
    20 @file
       
    21 @released
       
    22 @publishedPartner
       
    23 */
       
    24 
       
    25 #include <avcpanel.h>
       
    26 #include <e32base.h>
       
    27 
       
    28 static const TInt	KAVCFrameMaxLength			= 0x200;
       
    29 static const TInt	KAVCFrameHeaderLength		= 0x3;
       
    30 static const TInt	KAVCPassthroughFrameLength	= 0x5;
       
    31 static const TUint8	KAVCCommandTypeMask			= 0x0f;
       
    32 static const TUint8	KAVCResponseTypeMask		= 0x0f;
       
    33 static const TUint8	KAVCSubunitTypeMask			= 0xf8;
       
    34 static const TUint8	KAVCSubunitIDMask			= 0x07;
       
    35 static const TUint8	KAVCCommandMaxRangeLength	= 0x7;  
       
    36 
       
    37 static const TUint KAVCVendorUniquePassthroughHeader = 7;
       
    38 static const TUint KAVCVendorIdBaseOffset = 5;
       
    39 static const TUint KAVCVendorIdLength = 3;
       
    40 
       
    41 static const TInt KAVCMaxVendorDependentPayload = KAVCFrameMaxLength-KAVCFrameHeaderLength-KAVCVendorIdLength;
       
    42 
       
    43 namespace AVC
       
    44 	{
       
    45 	enum TFrameType
       
    46 		{
       
    47 		ECommand,
       
    48 		EResponse
       
    49 		};
       
    50 	/**
       
    51 	As per section 7.3.1, AV/C Digital Interface Command Set General Specification v4.0
       
    52 	As per section 7.3.2, AV/C Digital Interface Command Set General Specification v4.0
       
    53 	*/
       
    54 	enum TCType
       
    55 		{
       
    56 		EControl			= 0x0,
       
    57 		EStatus				= 0x1,
       
    58 		ESpecificEnquiry	= 0x2,
       
    59 		ENotify				= 0x3,
       
    60 		EGeneralEnquiry		= 0x4,
       
    61 		EReserved1			= 0x5,
       
    62 		EReserved2			= 0x6,
       
    63 		EReserved3			= 0x7,
       
    64 		ENotImplemented		= 0x8,
       
    65 		EAccepted			= 0x9,
       
    66 		ERejected			= 0xa,
       
    67 		EInTransition		= 0xb,
       
    68 		EImplemented		= 0xc,
       
    69 		EStable				= 0xc,	// NB: EImplemented and EStable are the same!
       
    70 		EChanged			= 0xd,
       
    71 		EReserved4			= 0xe,
       
    72 		EInterim			= 0xf
       
    73 		};
       
    74 	/**
       
    75 	As per sections 7.3.4.1 and 7.3.4.3, AV/C Digital Interface Command Set General Specification v4.0
       
    76 
       
    77 	Extended subunit types should be coded as 0xXYY in this enumeration where
       
    78 	X is the nth extension and YY is the type number.  e.g. 0x101 would correspond
       
    79 	to example 3 in table 7.9 and 0x201 would correspond to example 4.
       
    80 	*/		
       
    81 	enum TSubunitType
       
    82 		{
       
    83 		EMonitor			= 0x00,
       
    84 		EAudio				= 0x01,
       
    85 		EPrinter			= 0x02,
       
    86 		EDisc				= 0x03,
       
    87 		ETape				= 0x04,
       
    88 		ETuner				= 0x05,
       
    89 		ECA					= 0x06,
       
    90 		ECamera				= 0x07,
       
    91 		EPanel				= 0x09,
       
    92 		EBulletinBoard		= 0x0a,
       
    93 		ECameraStorage		= 0x0b,
       
    94 		EVendorUnique		= 0x1c,
       
    95 		ETypeExtended1		= 0x1e,
       
    96 		EUnit				= 0x1f,
       
    97 		ETypeExtended2		= 0xff
       
    98 		};
       
    99 	/**
       
   100 	As per sections 7.3.4.1 and 7.3.4.3, AV/C Digital Interface Command Set General Specification v4.0
       
   101 
       
   102 	Extended subunit IDs should be coded as 0xXYY in this enumeration where
       
   103 	X is the nth extension and YY is the ID number.  e.g. 0x102 would correspond
       
   104 	to example 2 in table 7.10 and 0x201 would correspond to example 3.
       
   105 	*/	
       
   106 	enum TSubunitID
       
   107 		{
       
   108 		EID0				= 0x00,
       
   109 		EID1				= 0x01,
       
   110 		EID2				= 0x02,
       
   111 		EID3				= 0x04,
       
   112 		EIDExtended1		= 0x05,
       
   113 		EIgnore				= 0x07,
       
   114 		EIDExtended2		= 0xff
       
   115 		};
       
   116 	/**
       
   117 	As per section 10.1.2, AV/C Digital Interface Command Set General Specification v4.0
       
   118 
       
   119 	AV/C unit source plug addresses
       
   120 	*/	
       
   121 	enum TUnitInputPlug
       
   122 		{
       
   123 		ESerialIsochronousInput0	= 0x00,
       
   124 		ESerialIsochronousInput1	= 0x01,
       
   125 		ESerialIsochronousInput2	= 0x02,
       
   126 		ESerialIsochronousInput3	= 0x03,
       
   127 		ESerialIsochronousInput4	= 0x04,
       
   128 		ESerialIsochronousInput5	= 0x05,
       
   129 		ESerialIsochronousInput6	= 0x06,
       
   130 		ESerialIsochronousInput7	= 0x07,
       
   131 		ESerialIsochronousInput8	= 0x08,
       
   132 		ESerialIsochronousInput9	= 0x09,
       
   133 		ESerialIsochronousInput10	= 0x0a,
       
   134 		ESerialIsochronousInput11	= 0x0b,
       
   135 		ESerialIsochronousInput12	= 0x0c,
       
   136 		ESerialIsochronousInput13	= 0x0d,
       
   137 		ESerialIsochronousInput14	= 0x0e,
       
   138 		ESerialIsochronousInput15	= 0x0f,
       
   139 		ESerialIsochronousInput16	= 0x10,
       
   140 		ESerialIsochronousInput17	= 0x11,
       
   141 		ESerialIsochronousInput18	= 0x12,
       
   142 		ESerialIsochronousInput19	= 0x13,
       
   143 		ESerialIsochronousInput20	= 0x14,
       
   144 		ESerialIsochronousInput21	= 0x15,
       
   145 		ESerialIsochronousInput22	= 0x16,
       
   146 		ESerialIsochronousInput23	= 0x17,
       
   147 		ESerialIsochronousInput24	= 0x18,
       
   148 		ESerialIsochronousInput25	= 0x19,
       
   149 		ESerialIsochronousInput26	= 0x1a,
       
   150 		ESerialIsochronousInput27	= 0x1b,
       
   151 		ESerialIsochronousInput28	= 0x1c,
       
   152 		ESerialIsochronousInput29	= 0x1d,
       
   153 		ESerialIsochronousInput30	= 0x1e,
       
   154 		EAnySerialIsochronousInput	= 0x7f,
       
   155 		EExternalInput0				= 0x80,
       
   156 		EExternalInput1				= 0x81,
       
   157 		EExternalInput2				= 0x82,
       
   158 		EExternalInput3				= 0x83,
       
   159 		EExternalInput4				= 0x84,
       
   160 		EExternalInput5				= 0x85,
       
   161 		EExternalInput6				= 0x86,
       
   162 		EExternalInput7				= 0x87,
       
   163 		EExternalInput8				= 0x88,
       
   164 		EExternalInput9				= 0x89,
       
   165 		EExternalInput10			= 0x8a,
       
   166 		EExternalInput11			= 0x8b,
       
   167 		EExternalInput12			= 0x8c,
       
   168 		EExternalInput13			= 0x8d,
       
   169 		EExternalInput14			= 0x8e,
       
   170 		EExternalInput15			= 0x8f,
       
   171 		EExternalInput16			= 0x90,
       
   172 		EExternalInput17			= 0x91,
       
   173 		EExternalInput18			= 0x92,
       
   174 		EExternalInput19			= 0x93,
       
   175 		EExternalInput20			= 0x94,
       
   176 		EExternalInput21			= 0x95,
       
   177 		EExternalInput22			= 0x96,
       
   178 		EExternalInput23			= 0x97,
       
   179 		EExternalInput24			= 0x98,
       
   180 		EExternalInput25			= 0x99,
       
   181 		EExternalInput26			= 0x9a,
       
   182 		EExternalInput27			= 0x9b,
       
   183 		EExternalInput28			= 0x9c,
       
   184 		EExternalInput29			= 0x9d,
       
   185 		EExternalInput30			= 0x9e,
       
   186 		ESerialAsynchronousInput0	= 0xa0,
       
   187 		ESerialAsynchronousInput1	= 0xa1,
       
   188 		ESerialAsynchronousInput2	= 0xa2,
       
   189 		ESerialAsynchronousInput3	= 0xa3,
       
   190 		ESerialAsynchronousInput4	= 0xa4,
       
   191 		ESerialAsynchronousInput5	= 0xa5,
       
   192 		ESerialAsynchronousInput6	= 0xa6,
       
   193 		ESerialAsynchronousInput7	= 0xa7,
       
   194 		ESerialAsynchronousInput8	= 0xa8,
       
   195 		ESerialAsynchronousInput9	= 0xa9,
       
   196 		ESerialAsynchronousInput10	= 0xaa,
       
   197 		ESerialAsynchronousInput11	= 0xab,
       
   198 		ESerialAsynchronousInput12	= 0xac,
       
   199 		ESerialAsynchronousInput13	= 0xad,
       
   200 		ESerialAsynchronousInput14	= 0xae,
       
   201 		ESerialAsynchronousInput15	= 0xaf,
       
   202 		ESerialAsynchronousInput16	= 0xb0,
       
   203 		ESerialAsynchronousInput17	= 0xb1,
       
   204 		ESerialAsynchronousInput18	= 0xb2,
       
   205 		ESerialAsynchronousInput19	= 0xb3,
       
   206 		ESerialAsynchronousInput20	= 0xb4,
       
   207 		ESerialAsynchronousInput21	= 0xb5,
       
   208 		ESerialAsynchronousInput22	= 0xb6,
       
   209 		ESerialAsynchronousInput23	= 0xb7,
       
   210 		ESerialAsynchronousInput24	= 0xb8,
       
   211 		ESerialAsynchronousInput25	= 0xb9,
       
   212 		ESerialAsynchronousInput26	= 0xba,
       
   213 		ESerialAsynchronousInput27	= 0xbb,
       
   214 		ESerialAsynchronousInput28	= 0xbc,
       
   215 		ESerialAsynchronousInput29	= 0xbd,
       
   216 		ESerialAsynchronousInput30	= 0xbe,
       
   217 		EAnySerialAsynchronousInput	= 0xbf,
       
   218 		EInvalidInput				= 0xfe,
       
   219 		EAnyExternalInput			= 0xff
       
   220 		};
       
   221 	/**
       
   222 	As per section 10.1.2, AV/C Digital Interface Command Set General Specification v4.0
       
   223 
       
   224 	AV/C unit destination plug addresses	
       
   225 	*/	
       
   226 	enum TUnitOutputPlug
       
   227 		{
       
   228 		ESerialIsochronousOutput0	= 0x00,
       
   229 		ESerialIsochronousOutput1	= 0x01,
       
   230 		ESerialIsochronousOutput2	= 0x02,
       
   231 		ESerialIsochronousOutput3	= 0x03,
       
   232 		ESerialIsochronousOutput4	= 0x04,
       
   233 		ESerialIsochronousOutput5	= 0x05,
       
   234 		ESerialIsochronousOutput6	= 0x06,
       
   235 		ESerialIsochronousOutput7	= 0x07,
       
   236 		ESerialIsochronousOutput8	= 0x08,
       
   237 		ESerialIsochronousOutput9	= 0x09,
       
   238 		ESerialIsochronousOutput10	= 0x0a,
       
   239 		ESerialIsochronousOutput11	= 0x0b,
       
   240 		ESerialIsochronousOutput12	= 0x0c,
       
   241 		ESerialIsochronousOutput13	= 0x0d,
       
   242 		ESerialIsochronousOutput14	= 0x0e,
       
   243 		ESerialIsochronousOutput15	= 0x0f,
       
   244 		ESerialIsochronousOutput16	= 0x10,
       
   245 		ESerialIsochronousOutput17	= 0x11,
       
   246 		ESerialIsochronousOutput18	= 0x12,
       
   247 		ESerialIsochronousOutput19	= 0x13,
       
   248 		ESerialIsochronousOutput20	= 0x14,
       
   249 		ESerialIsochronousOutput21	= 0x15,
       
   250 		ESerialIsochronousOutput22	= 0x16,
       
   251 		ESerialIsochronousOutput23	= 0x17,
       
   252 		ESerialIsochronousOutput24	= 0x18,
       
   253 		ESerialIsochronousOutput25	= 0x19,
       
   254 		ESerialIsochronousOutput26	= 0x1a,
       
   255 		ESerialIsochronousOutput27	= 0x1b,
       
   256 		ESerialIsochronousOutput28	= 0x1c,
       
   257 		ESerialIsochronousOutput29	= 0x1d,
       
   258 		ESerialIsochronousOutput30	= 0x1e,
       
   259 		EAnySerialIsochronousOutput	= 0x7f,
       
   260 		EExternalOutput0			= 0x80,
       
   261 		EExternalOutput1			= 0x81,
       
   262 		EExternalOutput2			= 0x82,
       
   263 		EExternalOutput3			= 0x83,
       
   264 		EExternalOutput4			= 0x84,
       
   265 		EExternalOutput5			= 0x85,
       
   266 		EExternalOutput6			= 0x86,
       
   267 		EExternalOutput7			= 0x87,
       
   268 		EExternalOutput8			= 0x88,
       
   269 		EExternalOutput9			= 0x89,
       
   270 		EExternalOutput10			= 0x8a,
       
   271 		EExternalOutput11			= 0x8b,
       
   272 		EExternalOutput12			= 0x8c,
       
   273 		EExternalOutput13			= 0x8d,
       
   274 		EExternalOutput14			= 0x8e,
       
   275 		EExternalOutput15			= 0x8f,
       
   276 		EExternalOutput16			= 0x90,
       
   277 		EExternalOutput17			= 0x91,
       
   278 		EExternalOutput18			= 0x92,
       
   279 		EExternalOutput19			= 0x93,
       
   280 		EExternalOutput20			= 0x94,
       
   281 		EExternalOutput21			= 0x95,
       
   282 		EExternalOutput22			= 0x96,
       
   283 		EExternalOutput23			= 0x97,
       
   284 		EExternalOutput24			= 0x98,
       
   285 		EExternalOutput25			= 0x99,
       
   286 		EExternalOutput26			= 0x9a,
       
   287 		EExternalOutput27			= 0x9b,
       
   288 		EExternalOutput28			= 0x9c,
       
   289 		EExternalOutput29			= 0x9d,
       
   290 		EExternalOutput30			= 0x9e,
       
   291 		ESerialAsynchronousOutput0	= 0xa0,
       
   292 		ESerialAsynchronousOutput1	= 0xa1,
       
   293 		ESerialAsynchronousOutput2	= 0xa2,
       
   294 		ESerialAsynchronousOutput3	= 0xa3,
       
   295 		ESerialAsynchronousOutput4	= 0xa4,
       
   296 		ESerialAsynchronousOutput5	= 0xa5,
       
   297 		ESerialAsynchronousOutput6	= 0xa6,
       
   298 		ESerialAsynchronousOutput7	= 0xa7,
       
   299 		ESerialAsynchronousOutput8	= 0xa8,
       
   300 		ESerialAsynchronousOutput9	= 0xa9,
       
   301 		ESerialAsynchronousOutput10	= 0xaa,
       
   302 		ESerialAsynchronousOutput11	= 0xab,
       
   303 		ESerialAsynchronousOutput12	= 0xac,
       
   304 		ESerialAsynchronousOutput13	= 0xad,
       
   305 		ESerialAsynchronousOutput14	= 0xae,
       
   306 		ESerialAsynchronousOutput15	= 0xaf,
       
   307 		ESerialAsynchronousOutput16	= 0xb0,
       
   308 		ESerialAsynchronousOutput17	= 0xb1,
       
   309 		ESerialAsynchronousOutput18	= 0xb2,
       
   310 		ESerialAsynchronousOutput19	= 0xb3,
       
   311 		ESerialAsynchronousOutput20	= 0xb4,
       
   312 		ESerialAsynchronousOutput21	= 0xb5,
       
   313 		ESerialAsynchronousOutput22	= 0xb6,
       
   314 		ESerialAsynchronousOutput23	= 0xb7,
       
   315 		ESerialAsynchronousOutput24	= 0xb8,
       
   316 		ESerialAsynchronousOutput25	= 0xb9,
       
   317 		ESerialAsynchronousOutput26	= 0xba,
       
   318 		ESerialAsynchronousOutput27	= 0xbb,
       
   319 		ESerialAsynchronousOutput28	= 0xbc,
       
   320 		ESerialAsynchronousOutput29	= 0xbd,
       
   321 		ESerialAsynchronousOutput30	= 0xbe,
       
   322 		EAnySerialAsynchronousOutput= 0xbf,
       
   323 		EMultipleOutputs			= 0xfd,
       
   324 		EInvalidOutput				= 0xfe,
       
   325 		EAnyExternalOutput			= 0xff
       
   326 		};
       
   327 	/**
       
   328 	As per section 10.2.3, AV/C Digital Interface Command Set General Specification v4.0
       
   329 
       
   330 	AV/C subunit source plug addresses 
       
   331 	subunit does not have to implement any subunit plug if it does not send or receive any signals		
       
   332 	*/
       
   333 	enum TSubunitSourcePlug
       
   334 		{
       
   335 		ESource0			= 0x00,
       
   336 		ESource1			= 0x01,
       
   337 		ESource2			= 0x02,
       
   338 		ESource3			= 0x03,
       
   339 		ESource4			= 0x04,
       
   340 		ESource5			= 0x05,
       
   341 		ESource6			= 0x06,
       
   342 		ESource7			= 0x07,
       
   343 		ESource8			= 0x08,
       
   344 		ESource9			= 0x09,
       
   345 		ESource10			= 0x0a,
       
   346 		ESource11			= 0x0b,
       
   347 		ESource12			= 0x0c,
       
   348 		ESource13			= 0x0d,
       
   349 		ESource14			= 0x0e,
       
   350 		ESource15			= 0x0f,
       
   351 		ESource16			= 0x10,
       
   352 		ESource17			= 0x11,
       
   353 		ESource18			= 0x12,
       
   354 		ESource19			= 0x13,
       
   355 		ESource20			= 0x14,
       
   356 		ESource21			= 0x15,
       
   357 		ESource22			= 0x16,
       
   358 		ESource23			= 0x17,
       
   359 		ESource24			= 0x18,
       
   360 		ESource25			= 0x19,
       
   361 		ESource26			= 0x1a,
       
   362 		ESource27			= 0x1b,
       
   363 		ESource28			= 0x1c,
       
   364 		ESource29			= 0x1d,
       
   365 		ESource30			= 0x1e,
       
   366 		EInvalidSource		= 0xfe,
       
   367 		EAnySource			= 0xff
       
   368 		};
       
   369 	/**
       
   370 	As per section 10.2.3, AV/C Digital Interface Command Set General Specification v4.0
       
   371 
       
   372 	AV/C subunit destination plug		
       
   373 	subunit does not have to implement any subunit plug if it does not send or receive any signals	
       
   374 	*/
       
   375 	enum TSubunitDestinationPlug
       
   376 		{
       
   377 		EDestination0			= 0x00,
       
   378 		EDestination1			= 0x01,
       
   379 		EDestination2			= 0x02,
       
   380 		EDestination3			= 0x03,
       
   381 		EDestination4			= 0x04,
       
   382 		EDestination5			= 0x05,
       
   383 		EDestination6			= 0x06,
       
   384 		EDestination7			= 0x07,
       
   385 		EDestination8			= 0x08,
       
   386 		EDestination9			= 0x09,
       
   387 		EDestination10			= 0x0a,
       
   388 		EDestination11			= 0x0b,
       
   389 		EDestination12			= 0x0c,
       
   390 		EDestination13			= 0x0d,
       
   391 		EDestination14			= 0x0e,
       
   392 		EDestination15			= 0x0f,
       
   393 		EDestination16			= 0x10,
       
   394 		EDestination17			= 0x11,
       
   395 		EDestination18			= 0x12,
       
   396 		EDestination19			= 0x13,
       
   397 		EDestination20			= 0x14,
       
   398 		EDestination21			= 0x15,
       
   399 		EDestination22			= 0x16,
       
   400 		EDestination23			= 0x17,
       
   401 		EDestination24			= 0x18,
       
   402 		EDestination25			= 0x19,
       
   403 		EDestination26			= 0x1a,
       
   404 		EDestination27			= 0x1b,
       
   405 		EDestination28			= 0x1c,
       
   406 		EDestination29			= 0x1d,
       
   407 		EDestination30			= 0x1e,
       
   408 		EMultipleDestinations	= 0xfe,
       
   409 		EInvalidDestination		= 0xfe,
       
   410 		EAnyDestination			= 0xff
       
   411 		};
       
   412 	/**
       
   413 	As per sections 11 and 12, AV/C Digital Interface Command Set General Specification v4.0
       
   414 	Other commands are defined by the various subunit specifications		
       
   415 	*/
       
   416 	enum TOpcode
       
   417 		{
       
   418 		EPower						= 0xb2,
       
   419 		EUnitInfo					= 0x30,
       
   420 		ESubunitInfo				= 0x31,
       
   421 		EReserve					= 0x01,
       
   422 		EVersion					= 0xb0,
       
   423 		EVendorDependent			= 0x00,
       
   424 		EPlugInfo					= 0x02,
       
   425 		EChannelUsage				= 0x12, 
       
   426 		EConnect					= 0x24,
       
   427 		EConnectAV					= 0x20,
       
   428 		EConnections				= 0x22,
       
   429 		EDigitalInput				= 0x11,
       
   430 		EDigitalOutput				= 0x10,
       
   431 		EDisconnect					= 0x25,
       
   432 		EDisconnectAV				= 0x21,
       
   433 		EInputPlugSignalFormat		= 0x19,
       
   434 		EOutputPlugSignalFormat		= 0x18,
       
   435 		EPassThrough				= 0x7c
       
   436 		};
       
   437 	
       
   438 	enum TPacketType
       
   439 		{
       
   440 		EASingle      = 0x00,
       
   441 		EStart        = 0x01,
       
   442 		EContinue     = 0x10,
       
   443 		EEnd          = 0x11,
       
   444 		};
       
   445 	
       
   446 		typedef TUint TAVCVendorId;
       
   447 	}
       
   448 
       
   449 /**
       
   450 AVC frame creation and utilities.
       
   451 @released
       
   452 @publishedPartner
       
   453 */
       
   454 NONSHARABLE_CLASS(CAVCFrame) : public CBase
       
   455 	{
       
   456 public:
       
   457 	
       
   458 	// Construction / destruction
       
   459 	// TBH this acts as a factory now and could (eventually!) return a derived class
       
   460 	// the caller could check by calling Opcode
       
   461 	// at the moment we are going to use the derived classes just for outbound responses
       
   462 	IMPORT_C static CAVCFrame* NewL(AVC::TFrameType aFrameType, 
       
   463 		AVC::TCType aType, 
       
   464 		AVC::TSubunitType aSubunitType, 
       
   465 		AVC::TSubunitID aSubunitID);
       
   466 		
       
   467 	IMPORT_C static CAVCFrame* NewL(const TDesC8& aBuffer, AVC::TFrameType aType);
       
   468 	
       
   469 	IMPORT_C virtual ~CAVCFrame();
       
   470 
       
   471 	// Utility
       
   472 	IMPORT_C AVC::TFrameType FrameType() const;
       
   473 	IMPORT_C static AVC::TFrameType FrameType(const TDesC8& aFrame);
       
   474 	IMPORT_C void SetFrameType(AVC::TFrameType aFrameType);
       
   475 	
       
   476 	IMPORT_C AVC::TCType Type() const;
       
   477 	IMPORT_C void SetType(AVC::TCType aType);
       
   478 	
       
   479 	IMPORT_C AVC::TSubunitType SubunitType() const;
       
   480 	IMPORT_C AVC::TSubunitID SubunitID() const;
       
   481 	IMPORT_C TUint8 Opcode() const;
       
   482 	IMPORT_C TInt OperationId(TUint8& aOpId) const;
       
   483 	IMPORT_C TInt ButtonAct(AVCPanel::TButtonAction& aButtonAction) const;
       
   484 	
       
   485 	IMPORT_C const TUint8& operator[](TInt aIndex) const;
       
   486 	IMPORT_C const TDesC8& Data() const;
       
   487 	
       
   488 	IMPORT_C void Append(const TDesC8& aDes);
       
   489 	IMPORT_C void Append(TChar aChar);
       
   490 	IMPORT_C TInt DataLength() const;
       
   491 	
       
   492 	IMPORT_C static AVC::TOpcode OpcodeL(const TDesC8& aBuffer);
       
   493 
       
   494 private:
       
   495 	CAVCFrame(AVC::TFrameType aFrameType);
       
   496 	
       
   497 	void ConstructL(AVC::TCType aType, 
       
   498 		AVC::TSubunitType aSubunitType, 
       
   499 		AVC::TSubunitID aSubunitID);
       
   500 	void ConstructL(const TDesC8& aBuffer);
       
   501 	static void FindExtensionL(const TDesC8& aBuffer, TInt& aSubunitTypeExtensionBytes, TInt& aSubunitIDExtensionBytes);
       
   502 
       
   503 private:
       
   504 	RBuf8			iBuffer;
       
   505 
       
   506 	AVC::TFrameType	iFrameType;
       
   507 	TInt			iSubunitTypeExtensionBytes;
       
   508 	TInt			iSubunitIDExtensionBytes;
       
   509 	};
       
   510 
       
   511 
       
   512 // Factory pattern stuff - these are useful to do donkey work,
       
   513 // but have existing clients treat them as the base class
       
   514 
       
   515 class CAVCVendorDependentResponse
       
   516 	{
       
   517 public:
       
   518 	IMPORT_C static CAVCFrame* NewL(TUint aVendorId);
       
   519 	};
       
   520 
       
   521 class CAVCPassthroughCommand
       
   522 	{
       
   523 public:
       
   524 	};
       
   525 
       
   526 // likely not have newl because dont allocate on parse pattern
       
   527 class CAVCVendorDependentCommand
       
   528 	{
       
   529 public:
       
   530 	IMPORT_C static TPtrC8 GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID);
       
   531 	};
       
   532 	
       
   533 // likely not have newl because dont allocate on parse pattern
       
   534 class CAVCVendorUniquePassthroughCommand
       
   535 	{
       
   536 public:
       
   537 	IMPORT_C static TPtrC8 GetPayloadAndVID(const CAVCFrame& aFrame, TUint& aVID);
       
   538 	};
       
   539 
       
   540 #endif // AVCFRAME_H