williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of the License "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // omap3530/omap3530_drivers/i2c/omap3530_i2c.h williamr@4: // I2C driver interface. williamr@4: // This file is part of the Beagle Base port williamr@4: // williamr@4: williamr@4: #ifndef OMAP3530_I2C_H_ williamr@4: #define OMAP3530_I2C_H_ williamr@4: williamr@4: #include williamr@4: williamr@4: #define I2C_VERSION 0 // update if TConfigPb or TTransferPb change williamr@4: williamr@4: class TDfc; williamr@4: class TDfcQue; williamr@4: williamr@4: namespace I2c williamr@4: { williamr@4: class TDeviceControl; williamr@4: williamr@4: enum TUnit williamr@4: { williamr@4: E1, // EMaster, ESlave williamr@4: E2, // EMaster, ESlave, ESccb williamr@4: E3 // EMaster, ESlave, ESccb williamr@4: }; williamr@4: enum TRole williamr@4: { williamr@4: EMaster williamr@4: // ESlave - TBI williamr@4: }; williamr@4: enum TMode williamr@4: { williamr@4: E7Bit williamr@4: // E10Bit - TBI williamr@4: // EHs - TBI williamr@4: // ESccb - TBI williamr@4: }; williamr@4: enum TRate williamr@4: { williamr@4: E100K, williamr@4: E400K williamr@4: // E3M31 - TBI williamr@4: }; williamr@4: typedef TInt TDeviceAddress; // range 0..1023 or 0..128 williamr@4: struct TVersion williamr@4: { williamr@4: inline TVersion() : iVersion(I2C_VERSION){} williamr@4: TInt iVersion; williamr@4: }; williamr@4: struct TConfigPb : TVersion // the parameter block used by Open() williamr@4: { williamr@4: IMPORT_C TConfigPb(); williamr@4: williamr@4: TUnit iUnit; williamr@4: TRole iRole; williamr@4: TMode iMode; williamr@4: void* iExclusiveClient; // Clients magic number - zero if the client doesn't require exclusive access otherwise use an owned object, code, stack or data address. williamr@4: TRate iRate; williamr@4: TDeviceAddress iOwnAddress; williamr@4: TDeviceAddress iDeviceAddress; // if role is master williamr@4: TDfcQue* iDfcQueue; // clients thread williamr@4: }; williamr@4: typedef TInt THandle; // returned from Open() williamr@4: struct TTransferPb // the parameter block used by Transfer*() williamr@4: { williamr@4: IMPORT_C TTransferPb(); williamr@4: williamr@4: enum williamr@4: { williamr@4: ERead, williamr@4: EWrite williamr@4: } iType; williamr@4: williamr@4: TInt iLength; // in bytes. williamr@4: const TUint8* iData; // only truly const for writes, i.e. *iData is modified bye Read transfers williamr@4: williamr@4: TTransferPb* iNextPhase; // zero if a full transfer or last phase of a multiphase transfer williamr@4: williamr@4: // only for asynchronous transfers i.e. WriteA() or ReadA(); williamr@4: TDfc* iCompletionDfc; williamr@4: TInt iResult; williamr@4: williamr@4: // reserved for use by I2C driver williamr@4: TTransferPb* iNextTransfer; williamr@4: TDeviceControl* iDcb; williamr@4: }; williamr@4: williamr@4: // call Open() for each slave device. williamr@4: // returns: williamr@4: // KErrArgument if a combination of iUnit, iRole, iMode or iRate are not supported williamr@4: // KErrInUse if already open exclusively, the configuration doesn't match or the device is already open. williamr@4: // KErrTooBig if there are already KMaxDevicesPerUnit (currently 8) slave devices open williamr@4: // a positive value if successful williamr@4: IMPORT_C THandle Open(const TConfigPb&); williamr@4: IMPORT_C void Close(THandle&); williamr@4: IMPORT_C TInt TransferS(THandle, TTransferPb&); williamr@4: IMPORT_C void TransferA(THandle, TTransferPb&); // TBI williamr@4: IMPORT_C void CancelATransfer(THandle); // TBI williamr@4: } williamr@4: williamr@4: #endif // !OMAP3530_I2C_H_