remotecontrol/avrcp/avrcpipc/src/avrcpipc.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) 2008-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
// This file contains structures shared by the AVRCP API with the AVRCP bearer.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    15
// 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    16
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
 @file
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
 @internalTechnology
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
 @released
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
#include <e32std.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
#include <remcon/avrcpspec.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
#include "avrcpipc.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
EXPORT_C TMetadataTransferPDU RAvrcpIPC::GetPDUIdFromIPCOperationId(TInt aOperationId)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
	// We send the PDU id through IPC to the playerinformationapi, mediainformationapi
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
	// groupnavigationapi or batterystatusapi. However, PDU 0x31 (Register Notification
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
	// also requires sending an event id. We encode this as the top byte, and the PDU
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
	// id as the lower byte, so mask off the top-byte and return just the PDU id.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
	return static_cast<TMetadataTransferPDU>(aOperationId & 0x00FF);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
EXPORT_C TRegisterNotificationEvent RAvrcpIPC::GetEventIdFromIPCOperationId(TInt aOperationId)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
	// See the above comment in GetPDUIdFromIPCOperationId. This performs the opposite operation
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
	return static_cast<TRegisterNotificationEvent>((aOperationId & 0xFF00) >> 8);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
EXPORT_C TInt RAvrcpIPC::SetIPCOperationIdFromEventId(TRegisterNotificationEvent aEventId)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
	// See the comment in GetPDUIdFromIPCOperationId. This sets the PDU id
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
	// as the lower byte to RegisterNotification (0x31) and the eventId as
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
	// the top byte.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
	return (ERegisterNotification + (aEventId << 8));
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
// Big-endian methods; Symbian native methods are little-endian
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
// This means that we can directly send these packets into the
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
// wire in the bearer, since they're big-endian. We could have
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
// used the BigEndian class, but that requires a dependency on
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
// the esock.lib library, so do it ourselves.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
TUint8 RAvrcpIPC::Read8L()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
	return iReadStream.ReadUint8L();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
TUint16 RAvrcpIPC::Read16L()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
	TUint16 val = 0;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
	val  = (static_cast<TUint16>(iReadStream.ReadUint8L()) << 8);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
	val += iReadStream.ReadUint8L();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
	return val;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
TUint32 RAvrcpIPC::Read24L()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
	TUint32 val = 0;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
	val += (static_cast<TUint32>(iReadStream.ReadUint8L()) << 16);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
	val += (static_cast<TUint32>(iReadStream.ReadUint8L()) << 8);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
	val += iReadStream.ReadUint8L();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
	return val;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
TUint32 RAvrcpIPC::Read32L()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
	TUint32 val = 0;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
	val  = (static_cast<TUint32>(iReadStream.ReadUint8L()) << 24);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
	val += (static_cast<TUint32>(iReadStream.ReadUint8L()) << 16);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
	val += (static_cast<TUint32>(iReadStream.ReadUint8L()) << 8);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
	val += iReadStream.ReadUint8L();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
	return val;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
TUint64 RAvrcpIPC::Read64L()
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
	TUint64 val;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
	val  = (static_cast<TUint64>(iReadStream.ReadUint8L()) << 56);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 48);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 40);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 32);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 24);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 16);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
	val += (static_cast<TUint64>(iReadStream.ReadUint8L()) << 8);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	val += iReadStream.ReadUint8L();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
	return val;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
void RAvrcpIPC::Write8L(TUint8 aVal)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
	iStream.WriteUint8L(aVal);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
void RAvrcpIPC::Write16L(TUint16 aVal)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 8));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
	iStream.WriteUint8L(static_cast<TUint8>(aVal));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   114
20ac952a623c 201040_02
hgs
parents:
diff changeset
   115
void RAvrcpIPC::Write24L(TUint32 aVal)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   116
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   117
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 16));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   118
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 8));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   119
	iStream.WriteUint8L(static_cast<TUint8>(aVal));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   120
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   121
20ac952a623c 201040_02
hgs
parents:
diff changeset
   122
void RAvrcpIPC::Write32L(TUint32 aVal)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   123
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   124
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 24));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   125
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 16));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   126
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 8));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   127
	iStream.WriteUint8L(static_cast<TUint8>(aVal));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   128
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   129
20ac952a623c 201040_02
hgs
parents:
diff changeset
   130
void RAvrcpIPC::Write64L(TUint64 aVal)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   131
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   132
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 56));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   133
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 48));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   134
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 40));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   135
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 32));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   136
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 24));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   137
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 16));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   138
	iStream.WriteUint8L(static_cast<TUint8>(aVal >> 8));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   139
	iStream.WriteUint8L(static_cast<TUint8>(aVal));
20ac952a623c 201040_02
hgs
parents:
diff changeset
   140
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   141
void RAvrcpIPC::Close()
20ac952a623c 201040_02
hgs
parents:
diff changeset
   142
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   143
	iReadStream.Close();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   144
	iStream.Close();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   145
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   146
20ac952a623c 201040_02
hgs
parents:
diff changeset
   147
EXPORT_C void RAvrcpIPCError::ReadL(const TDesC8& aData)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   148
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   149
	iReadStream.Open(aData);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   150
	iError = Read32L();   // Read Big-Endian error code
20ac952a623c 201040_02
hgs
parents:
diff changeset
   151
	iReadStream.Close();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   152
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   153
20ac952a623c 201040_02
hgs
parents:
diff changeset
   154
EXPORT_C void RAvrcpIPCError::WriteL(TDes8& aOutData)
20ac952a623c 201040_02
hgs
parents:
diff changeset
   155
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
   156
	aOutData.Zero();      // Error code is always before any other data
20ac952a623c 201040_02
hgs
parents:
diff changeset
   157
	iStream.Open(aOutData);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   158
	Write32L(iError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   159
	iStream.CommitL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   160
	}
20ac952a623c 201040_02
hgs
parents:
diff changeset
   161