0
|
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 the License "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 |
// omap3530/omap3530_drivers/i2c/omap3530_i2c.h
|
|
15 |
// I2C driver interface.
|
|
16 |
// This file is part of the Beagle Base port
|
|
17 |
//
|
|
18 |
|
|
19 |
#ifndef OMAP3530_I2C_H_
|
|
20 |
#define OMAP3530_I2C_H_
|
|
21 |
|
|
22 |
#include <e32def.h>
|
|
23 |
|
|
24 |
#define I2C_VERSION 0 // update if TConfigPb or TTransferPb change
|
|
25 |
|
|
26 |
class TDfc;
|
|
27 |
class TDfcQue;
|
|
28 |
|
|
29 |
namespace I2c
|
|
30 |
{
|
|
31 |
class TDeviceControl;
|
|
32 |
|
|
33 |
enum TUnit
|
|
34 |
{
|
|
35 |
E1, // EMaster, ESlave
|
|
36 |
E2, // EMaster, ESlave, ESccb
|
|
37 |
E3 // EMaster, ESlave, ESccb
|
|
38 |
};
|
|
39 |
enum TRole
|
|
40 |
{
|
|
41 |
EMaster
|
|
42 |
// ESlave - TBI
|
|
43 |
};
|
|
44 |
enum TMode
|
|
45 |
{
|
|
46 |
E7Bit
|
|
47 |
// E10Bit - TBI
|
|
48 |
// EHs - TBI
|
|
49 |
// ESccb - TBI
|
|
50 |
};
|
|
51 |
enum TRate
|
|
52 |
{
|
|
53 |
E100K,
|
|
54 |
E400K
|
|
55 |
// E3M31 - TBI
|
|
56 |
};
|
|
57 |
typedef TInt TDeviceAddress; // range 0..1023 or 0..128
|
|
58 |
struct TVersion
|
|
59 |
{
|
|
60 |
inline TVersion() : iVersion(I2C_VERSION){}
|
|
61 |
TInt iVersion;
|
|
62 |
};
|
|
63 |
struct TConfigPb : TVersion // the parameter block used by Open()
|
|
64 |
{
|
|
65 |
IMPORT_C TConfigPb();
|
|
66 |
|
|
67 |
TUnit iUnit;
|
|
68 |
TRole iRole;
|
|
69 |
TMode iMode;
|
|
70 |
void* iExclusiveClient; // Clients magic number - zero if the client doesn't require exclusive access otherwise use an owned object, code, stack or data address.
|
|
71 |
TRate iRate;
|
|
72 |
TDeviceAddress iOwnAddress;
|
|
73 |
TDeviceAddress iDeviceAddress; // if role is master
|
|
74 |
TDfcQue* iDfcQueue; // clients thread
|
|
75 |
};
|
|
76 |
typedef TInt THandle; // returned from Open()
|
|
77 |
struct TTransferPb // the parameter block used by Transfer*()
|
|
78 |
{
|
|
79 |
IMPORT_C TTransferPb();
|
|
80 |
|
|
81 |
enum
|
|
82 |
{
|
|
83 |
ERead,
|
|
84 |
EWrite
|
|
85 |
} iType;
|
|
86 |
|
|
87 |
TInt iLength; // in bytes.
|
|
88 |
const TUint8* iData; // only truly const for writes, i.e. *iData is modified bye Read transfers
|
|
89 |
|
|
90 |
TTransferPb* iNextPhase; // zero if a full transfer or last phase of a multiphase transfer
|
|
91 |
|
|
92 |
// only for asynchronous transfers i.e. WriteA() or ReadA();
|
|
93 |
TDfc* iCompletionDfc;
|
|
94 |
TInt iResult;
|
|
95 |
|
|
96 |
// reserved for use by I2C driver
|
|
97 |
TTransferPb* iNextTransfer;
|
|
98 |
TDeviceControl* iDcb;
|
|
99 |
};
|
|
100 |
|
|
101 |
// call Open() for each slave device.
|
|
102 |
// returns:
|
|
103 |
// KErrArgument if a combination of iUnit, iRole, iMode or iRate are not supported
|
|
104 |
// KErrInUse if already open exclusively, the configuration doesn't match or the device is already open.
|
|
105 |
// KErrTooBig if there are already KMaxDevicesPerUnit (currently 8) slave devices open
|
|
106 |
// a positive value if successful
|
|
107 |
IMPORT_C THandle Open(const TConfigPb&);
|
|
108 |
IMPORT_C void Close(THandle&);
|
|
109 |
IMPORT_C TInt TransferS(THandle, TTransferPb&);
|
|
110 |
IMPORT_C void TransferA(THandle, TTransferPb&); // TBI
|
|
111 |
IMPORT_C void CancelATransfer(THandle); // TBI
|
|
112 |
}
|
|
113 |
|
|
114 |
#endif // !OMAP3530_I2C_H_
|