diff -r 000000000000 -r 29b1cd4cb562 bluetoothmgmt/bluetoothclientlib/inc/bttypes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothmgmt/bluetoothclientlib/inc/bttypes.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,946 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// BT protocol wide types +// +// + +#ifndef _BTTYPES_H +#define _BTTYPES_H + +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + +#include +#include + +/** +@publishedAll +@released + +Minimum eSCO connection latency in milliseconds. Attempts to specify less than this will be silently +increased to this level. +*/ +static const TInt KMinESCOLatency = 4; + +/** +@publishedAll +@released + +Typedef to represent a HCI connection handle. +*/ +typedef TUint16 THCIConnHandle; + +/** +@publishedAll +@released + +Bluetooth SIG specified values for specification of (piconet) role. +*/ +enum TBTBasebandRole + { + EMaster = 0x00, /*!< Master role */ + ESlave = 0x01, /*!< Slave role */ + ERoleUnknown, /*!< Unknown role */ + }; + +/** +@publishedAll +@released + +Bluetooth SIG specified values for indicating link modes. +*/ +enum TBTLinkMode + { + EActiveMode = 0x00, /*!< Active mode */ + EHoldMode = 0x01, /*!< Hold mode */ + ESniffMode = 0x02, /*!< Sniff mode */ + EParkMode = 0x04, /*!< Park mode */ + EScatterMode = 0x08, /*!< Scatter mode */ + }; + +/** +@publishedAll +@released + +Typedef to represent a union of TBTLinkMode values. +*/ +typedef TUint32 TBTLinkModeSet; + +/** +@publishedAll +@released + +Bitmask values to help request combinations of link modes. +@see TBTLinkMode +*/ +enum TBTLinkModeCombinations + { + EAnyLowPowerMode = (EHoldMode | ESniffMode | EParkMode | EScatterMode) /*!< Any low power mode */ + }; + +/** +@publishedAll +@released + +Bluetooth SIG specified values for indicating packet types. + +DM1, DH1, DM3, DH3, DM5, DH5 are ACL packet types +HV1, HV2, HV3 are SCO (synchronous link) packet types +*/ +enum TBTPacketType + { + EPacketsDM1 = 0x0008, /*!< DM1 ACL packet type */ + EPacketsDH1 = 0x0010, /*!< DH1 ACL packet type */ + EPacketsDM3 = 0x0400, /*!< DM3 ACL packet type */ + EPacketsDH3 = 0x0800, /*!< DH3 ACL packet type */ + EPacketsDM5 = 0x4000, /*!< DM5 ACL packet type */ + EPacketsDH5 = 0x8000, /*!< DH5 ACL packet type */ + + EPackets2_DH1 = 0x0002, /*!< 2-DH1 ACL packet type */ + EPackets3_DH1 = 0x0004, /*!< 3-DH1 ACL packet type */ + EPackets2_DH3 = 0x0100, /*!< 2-DH3 ACL packet type */ + EPackets3_DH3 = 0x0200, /*!< 3-DH3 ACL packet type */ + EPackets2_DH5 = 0x1000, /*!< 2-DH5 ACL packet type */ + EPackets3_DH5 = 0x2000, /*!< 3-DH5 ACL packet type */ + + EPacketsHV1 = 0x0020, /*!< HV1 SCO packet type */ + EPacketsHV2 = 0x0040, /*!< HV2 SCO packet type */ + EPacketsHV3 = 0x0080, /*!< HV3 SCO packet type */ + }; + +/** +@publishedAll +@released + +Typedef to represent a set of SCO packet types. +*/ +typedef TUint16 TBTSCOPackets; + +/** +@publishedAll +@released + +Typedef to represent a set of ACL packet types. +*/ +typedef TUint16 TBTACLPackets; + +/** +@publishedAll +@released + +Bitmask values to help request combinations of packets. +@see TBTPacketType +*/ +enum TBTPacketTypeCombinations + { + EAnyACLPacket = EPacketsDM1 | EPacketsDM3 | EPacketsDM5 | EPacketsDH1 | EPacketsDH3 | EPacketsDH5, /*!< Any ACL packet */ + EAnyNonEdrACLPacket = EAnyACLPacket | EPackets2_DH1 | EPackets3_DH1 | EPackets2_DH3 | EPackets3_DH3 | EPackets2_DH5 | EPackets3_DH5, /*!< Any Non-EDR ACL packet */ + EAnySCOPacket = EPacketsHV1 | EPacketsHV2 | EPacketsHV3, /*!< Any SCO packet */ + EAnyPacket = EAnyACLPacket | EAnySCOPacket /*!< Any packet */ + }; + + +/** +@publishedAll +@released + +Typedef to represent a set of synchronous packet types (SCO and eSCO on v1.2). +@see TBTSyncPackets::TSyncPackets +*/ +typedef TUint32 TBTSyncPacketTypes; + +/** +@publishedAll +@deprecated + +This constant is no longer needed to translate the SCO mapping of HV packet types to Synchronous +because CBluetoothSynchronousLink::SetupConnection(const TBTDevAddr& aBDAddr, const TUint16 aPacketTypes) +adjusts aPacketTypes internally on behalf of clients. +*/ +static const TInt KSCOvsSyncHVOffset = 5; + + +/** +@publishedAll +@released + +Class to represent a set of synchronous packet types (SCO and eSCO on v1.2). +This differs from TBTSyncPacketTypes as it is the interface used by CBluetoothSynchronousLink +in order to detect the difference between a pre and post eSCO caller. This is necessary +as HV1 packets in the SCO numbering clash with EV5 packets in the sync numbering. +*/ +NONSHARABLE_CLASS(TBTSyncPackets) + { + public: + /** + @publishedAll + @released + + Individual synchronous packet types. + @see TBTSyncPacketTypes + */ + enum TSyncPackets + { + ESyncPacketsHV1 = 0x10001, + ESyncPacketsHV2 = 0x10002, + ESyncPacketsHV3 = 0x10004, + + ESyncPacketsEV3 = 0x20008, + ESyncPacketsEV4 = 0x20010, + ESyncPacketsEV5 = 0x20020, + + ESyncAnySCOPacket = ESyncPacketsHV1 | ESyncPacketsHV2 | ESyncPacketsHV3, + ESyncAnyESCOPacket = ESyncPacketsEV3 | ESyncPacketsEV4 | ESyncPacketsEV5 + }; + + public: + IMPORT_C explicit TBTSyncPackets(TBTSyncPacketTypes aPackets); + IMPORT_C TBTSyncPacketTypes operator()() const; + + private: + TUint32 iPacketTypes; + + // This data padding has been added to help prevent future binary compatibility breaks + // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used + TUint32 iPadding1; + TUint32 iPadding2; + }; + + +/** +@publishedAll +@released + +eSCO links can have different retransmission options, optimised for link usage, +power or reliability. + +@see CBluetoothSynchronousLink::SetRetransmissionEffort +*/ +enum TBTeSCORetransmissionTypes + { + EeSCORetransmitNone = 0, + EeSCORetransmitPower = 1, + EeSCORetransmitReliability = 2, + EeSCORetransmitDontCare = 0xff + }; + +/** +@publishedAll +@released + +eSCO unspecified bandwidth. This value can only be used by the accepting side +of an eSCO link, to allow any bandwidth to be specified by the initiator. +Otherwise both sides of the link must agree on the same bandwidth. + +@see CBluetoothSynchronousLink::SetBandwidth +@see CBluetoothSynchronousLink::AcceptConnection +*/ +static const TUint32 KESCOBandwidthDontCare = KMaxTUint32; + +/** +@publishedAll +@released + +Bluetooth SIG specified values indicating whether a device +is physically able to support a baseband (or link manager protocol) feature +*/ +enum TBTSupportedFeatures + { + ESupportedThreeSlotPackets = 1<<0, /*!< Three slot packets are supported */ + ESupportedFiveSlotPackets = 1<<1, /*!< Five slot packets are supported */ + ESupportedEncryption = 1<<2, /*!< Encryption is supported */ + ESupportedSlotOffset = 1<<3, /*!< Slot offset is supported */ + ESupportedTimingAccuracy = 1<<4, /*!< Timing accuracy is supported */ + ESupportedSwitch = 1<<5, /*!< Role switch is supported */ + ESupportedHoldMode = 1<<6, /*!< Hold mode is supported */ + ESupportedSniffMode = 1<<7, /*!< Sniff mode is supported */ + ESupportedParkMode = 1<<8, /*!< Park mode is supported */ + ESupportedRSSI = 1<<9, /*!< Receive signal strength indication is supported */ + ESupportedChannelQualityDrivenDataRate = 1<<10, /*!< Channel quality driven data rate is supported */ + ESupportedSCOLink = 1<<11, /*!< SCO links are supported */ + ESupportedHV2Packets = 1<<12, /*!< HV2 packets are supported */ + ESupportedHV3Packets = 1<<13, /*!< HV3 packets are supported */ + ESupportedu_lawLog = 1<<14, /*!< SCO u-law encoding is supported */ + ESupportedA_lawLog = 1<<15, /*!< SCO A-law encoding is supported */ + ESupportedCVSD = 1<<16, /*!< SCO Continuously variable slope delta modulation is supported */ + ESupportedPagingScheme = 1<<17, /*!< Paging scheme is supported */ + ESupportedPowerControl = 1<<18, /*!< Power control is supported */ + ESupportedTransparentSCOData = 1<<19, /*!< Transparent SCO data is supported */ + ESupportedFlowControlLagBit0 = 1<<20, /*!< Flow control lag bit 0 is supported */ + ESupportedFlowControlLagBit1 = 1<<21, /*!< Flow control lag bit 1 is supported */ + ESupportedFlowControlLagBit2 = 1<<22, /*!< Flow control lag bit 2 is supported */ + }; + +/** +@publishedAll +@released + +Bitmask values for notifying/requesting notification of the state of a physical link. + +These values have a two fold purpose: +1) They can be used along with TBTPhysicalLinkStateNotifierCombinations to specify +a set of baseband change events for which notification is desired. +2) They can be used to notify the state of a physical link or a subset of that state. +For example if only mode change events are being monitored, then at each mode change event +only the bit reperesenting the new mode will be returned, however if the whole link state +is required, then a combination of bit values indicating that state will be returned. + +THESE BIT VALUES MUST ONLY BE USED WHEN REQUESTING NOTIFICATION, OR WHEN PARSING THE +RESULTS OF A NOTIFICATION. All other baseband state activities should use one of the +appropriate Bluetooth SIG specified enums +@see TBTBasebandRole +@see TBTLinkMode +@see TBTLinkModeCombinations +@see TBTPacketType +@see TBTPacketTypeCombinations +*/ +enum TBTPhysicalLinkStateNotifier + { + ENotifyMaster = 0x00000001, /*!< Master */ + ENotifySlave = 0x00000002, /*!< Slave */ + + ENotifyActiveMode = 0x00000004, /*!< Active mode */ + ENotifySniffMode = 0x00000008, /*!< Sniff mode */ + ENotifyParkMode = 0x00000010, /*!< Park mode */ + ENotifyHoldMode = 0x00000020, /*!< Hold mode */ + + ENotifyMaxSlots1 = 0x00000040, /*!< Max slots 1 */ + ENotifyMaxSlots3 = 0x00000080, /*!< Max slots 3 */ + ENotifyMaxSlots5 = 0x00000100, /*!< Max slots 5 */ + + ENotifyPacketsDM1 = 0x00000200, /*!< Packets DM1 */ + ENotifyPacketsDH1 = 0x00000400, /*!< Packets DH1 */ + ENotifyPacketsDM3 = 0x00000800, /*!< Packets DM3 */ + ENotifyPacketsDH3 = 0x00001000, /*!< Packets DH3 */ + ENotifyPacketsDM5 = 0x00002000, /*!< Packets DM5 */ + ENotifyPacketsDH5 = 0x00004000, /*!< Packets DH5 */ + + ENotifyPacketsHV1 = 0x00008000, /*!< HV1 */ + ENotifyPacketsHV2 = 0x00010000, /*!< HV2 */ + ENotifyPacketsHV3 = 0x00020000, /*!< HV3 */ + + ENotifyAuthenticationComplete = 0x00040000, /*!< Authentication Complete */ + ENotifyEncryptionChangeOn = 0x00080000, /*!< Encryption Change On */ + ENotifyEncryptionChangeOff = 0x00100000, /*!< Encryption Change Off */ + + ENotifyPhysicalLinkUp = 0x00200000, /*!< Physical Link Up */ + ENotifyPhysicalLinkDown = 0x00400000, /*!< Physical Link Down */ + ENotifyPhysicalLinkError = 0x00800000, /*!< Physical Link Error */ + + ENotifySynchronousLinkUp = 0x01000000, /*!< Synchronous Link Up */ + ENotifySynchronousLinkDown = 0x02000000, /*!< Synchronous Link Down */ + ENotifySynchronousLinkError = 0x04000000, /*!< Synchronous Link Error */ + + + /** + @deprecated This has been superseded by ENotifySynchronousLinkUp + @see ENotifySynchronousLinkUp + */ + ENotifySCOLinkUp = ENotifySynchronousLinkUp, + /** + @deprecated This has been superseded by ENotifySynchronousLinkDown + @see ENotifySynchronousLinkDown + */ + ENotifySCOLinkDown = ENotifySynchronousLinkDown, + /** + @deprecated This has been superseded by ENotifySynchronousLinkError + @see ENotifySynchronousLinkError + */ + ENotifySCOLinkError = ENotifySynchronousLinkError + + }; + +/** +@publishedAll +@released + +Bitmask values to help request notification of the state of a physical link. +@see TBTPhysicalLinkStateNotifier +*/ +enum TBTPhysicalLinkStateNotifierCombinations + { + ENotifyAnyRole = ENotifyMaster | ENotifySlave, + ENotifyAnyLowPowerMode = ENotifySniffMode | ENotifyParkMode | ENotifyHoldMode, + ENotifyAnyPowerMode = ENotifyActiveMode | ENotifyAnyLowPowerMode, + ENotifyAnyMaxSlots = ENotifyMaxSlots1 | ENotifyMaxSlots3 | ENotifyMaxSlots5, + ENotifyAnyACLPacketType = ENotifyPacketsDM1 | ENotifyPacketsDH1 | ENotifyPacketsDM3 | EPacketsDH3 | EPacketsDM5 | EPacketsDH5, + ENotifyAnySCOPacketType = ENotifyPacketsHV1 | ENotifyPacketsHV2 | ENotifyPacketsHV3, + ENotifyAnyPacketType = ENotifyAnyACLPacketType | ENotifyAnySCOPacketType, + ENotifyAnyPhysicalLinkState = 0xffffffff, + }; + +/** +@publishedAll +@released + +The maximum length of an SDP UUID. +*/ +static const TInt KSdpUUIDMaxLength = 16; + +/** +@publishedAll +@released + +The size of a bluetooth device address in bytes. +*/ +const TInt KBTDevAddrSize=0x06; + +/** +@publishedAll +@released + +The size of a bluetooth device address in bytes. +*/ +const TInt KBTMaxDevAddrSize = KBTDevAddrSize; + +/** +@publishedAll +@released + +48-bit bluetooth device address. +Each bluetooth device has a unique address built into the hardware, which +is represented by this class. Used for identifying remote addresses. +The interface operates in a big-endian manner -- e.g. addr[0] refers +to the most significant byte of the address. This is the same ordering +as the addresses would naturally be written down on paper. +**/ +NONSHARABLE_CLASS(TBTDevAddr) + { +public: + IMPORT_C TBTDevAddr(); + IMPORT_C TBTDevAddr(const TInt64 &aInt); + IMPORT_C TBTDevAddr(const TDesC8 &aDes); + IMPORT_C TBool operator==(const TBTDevAddr& aAddr) const; + IMPORT_C TBool operator!=(const TBTDevAddr& aAddr) const; + IMPORT_C const TUint8 &operator[](TInt aIndex) const; + IMPORT_C TUint8 &operator[](TInt aIndex); + IMPORT_C void Reset(); + IMPORT_C TPtr8 Des(); + IMPORT_C const TPtrC8 Des() const; + IMPORT_C TInt SetReadable(const TDesC& aSource); + IMPORT_C void GetReadable(TDes& aDest) const; + IMPORT_C void GetReadable(TDes& aDest, const TDesC& aPrepend, const TDesC& aByteSeperator, const TDesC& aAppend) const; + IMPORT_C TBool operator<=(const TBTDevAddr& aAddr) const; +private: + TFixedArray iAddr; + + // This data padding has been added to help prevent future binary compatibility breaks + // iPadding hasn't been zero'd because it is currently not used + TUint16 iPadding; + }; + +/** Array of device addresses +@see Enumerate method +*/ +typedef RArray RBTDevAddrArray; + +/** +@publishedAll +@released + +A Bluetooth Universally Unique Identifier. + +This is a 128-bit quantity that can be created without a central registry +while still being globally unique. +UUIDs are always held in full 128 bit format, however they can be set from +BT SIG short form (16 or 32 bit) addresses, and returned as down to their +shortest form using ShortestForm(). +**/ +NONSHARABLE_CLASS(TUUID) + { +public: + IMPORT_C TUUID(); + IMPORT_C TUUID(TUint32 aLong); + IMPORT_C TUUID(TUint32 aHH, TUint32 aHL, TUint32 aLH, TUint32 aLL); + IMPORT_C TUUID(const TUid& aUid); + IMPORT_C void SetL(const TDesC8& aDes); + IMPORT_C const TPtrC8 LongForm() const; + IMPORT_C const TPtrC8 ShortestForm() const; + IMPORT_C const TPtrC8 Des() const; + /** + @deprecated + Use SpecifiedLengthL(TInt aLength) instead + */ + IMPORT_C const TPtrC8 FixedLengthL(TInt aLength) const; + IMPORT_C TInt MinimumSize() const; + IMPORT_C TBool operator==(const TUUID& aUUID) const; + IMPORT_C TBool operator!=(const TUUID& aUUID) const; + IMPORT_C const TUint8 &operator[](TInt aIndex) const; + IMPORT_C TUint8 &operator[](TInt aIndex); + IMPORT_C const TPtrC8 SpecifiedLengthL(TInt aLength) const; + IMPORT_C void SetFromLittleEndianL(const TDesC8& aDes); +private: + TFixedArray iUUID; + + // This data padding has been added to help prevent future binary compatibility breaks + // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used + TUint32 iPadding1; + TUint32 iPadding2; + }; + + +/** +@publishedAll +@released + +A UUID container class +*/ +NONSHARABLE_CLASS(RUUIDContainer) + { +public: + IMPORT_C void Close(); + IMPORT_C void Reset(); + IMPORT_C TInt Count() const; + IMPORT_C TUUID& operator[](TInt aIndex); + IMPORT_C const TUUID& operator[](TInt aIndex) const; + IMPORT_C const TUUID& At(TInt aIndex) const; + IMPORT_C TBool IsPresent(const TUUID& aUuid) const; + IMPORT_C TInt Add(const TUUID& aUuid); + +private: + RArray iUUIDs; + + // This data padding has been added to help prevent future binary compatibility breaks + // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used + TUint32 iPadding1; + TUint32 iPadding2; + }; + + +/** +@publishedAll +@released + +An EIR UUID container class. Contains UUIDs and indications of data completeness +*/ +NONSHARABLE_CLASS(RExtendedInquiryResponseUUIDContainer) + { +public: + enum TUUIDType + { + EUUID16 = 0x1, + EUUID32 = 0x2, + EUUID128 = 0x4, + }; + +public: + IMPORT_C void Close(); + IMPORT_C RUUIDContainer& UUIDs(); + IMPORT_C void SetCompleteness(TUUIDType aType, TBool aIsComplete); + IMPORT_C TBool GetCompleteness(TUUIDType aType) const; + +private: + RUUIDContainer iUUIDs; + TInt iCompleteness; + + // This data padding has been added to help prevent future binary compatibility breaks + // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used + TUint32 iPadding1; + TUint32 iPadding2; + }; + +/** +@publishedAll +@released + +The size of a link key, in bytes. +*/ +const TUint8 KHCILinkKeySize=16; + +/** +@publishedAll +@released + +The size of a pin code, in bytes. +*/ +const TUint8 KHCIPINCodeSize=16; + +/** +@publishedAll +@released + +Link key structure. +*/ +NONSHARABLE_CLASS(TLinkKeyV10) + { +public: + TUint8 iLinkKey[KHCILinkKeySize]; /*!< The link key */ + }; + +/** +@publishedAll +@released + +Typedef'ed TPckgBuf of the class TLinkKeyV10. +*/ +typedef TPckgBuf TBTLinkKey; + +/** +The type of a link key with a remote device +@publishedAll +@released +*/ +enum TBTLinkKeyType + { + ELinkKeyCombination, /*!< this key has been generated with pairing with pre-v2.1 Bluetooth devices. */ + ELinkKeyUnauthenticatedUpgradable, /*!< this key hasn't yet been tried with MITM protection */ + ELinkKeyUnauthenticatedNonUpgradable, /*!< this key tried MITM protection; remote device incapable */ + ELinkKeyAuthenticated, /*!< this key authenticated with MITM protection */ + ELinkKeyDebug /*!< this key has been generated when in simple pairing debug mode */ + }; + +/** +@publishedAll +@released + +Bluetooth PIN Code structure. +*/ +NONSHARABLE_CLASS(TPINCodeV10) + { +public: + IMPORT_C TBool operator==(const TPINCodeV10& aTPINCodeV10) const; + +public: + TUint8 iLength; /*!< The length of the pin key */ + TUint8 iPIN[KHCIPINCodeSize]; /*!< The pin code */ + }; + +/** +@publishedAll +@released + +Typedef'ed TPckgBuf of the class TPINCodeV10. +*/ +typedef TPckgBuf TBTPinCode; + + +/** +Extended Inquiry Response Class +This class takes a reference from inquiry result, which could hold both local name and Extended Inquiry Response. +It provides API to parse and return the local name and data for any Extended Inquiry Response tag. +To get Device Name, Manufacturer Specific Data or Flags, firstly getting length of the data, +and then allocating a suitable buffer, which is where the data will be placed. +*/ +NONSHARABLE_CLASS(TBluetoothNameRecordWrapper) +{ +public: + IMPORT_C explicit TBluetoothNameRecordWrapper(const TNameRecord& aNameRecord); + IMPORT_C TInt GetDeviceName(TDes16& aName, TBool& aIsComplete) const; + IMPORT_C TInt GetServiceClassUuids(RExtendedInquiryResponseUUIDContainer& aEIRContainer) const; + IMPORT_C TInt GetVendorSpecificData(TDes8& aDes) const; + IMPORT_C TInt GetTxPowerLevel(TInt8& aTxPowerLevel) const; + IMPORT_C TInt GetFlags(TDes8& aDes) const; + IMPORT_C TInt GetDeviceNameLength() const; + IMPORT_C TInt GetVendorSpecificDataLength() const; + IMPORT_C TInt GetFlagsLength() const; + +private: + TInt AddUuids16(RExtendedInquiryResponseUUIDContainer& aEIRContainer, TPtrC8& aUuids) const; + TInt AddUuids128(RExtendedInquiryResponseUUIDContainer& aEIRContainer, TPtrC8& aUuids) const; +private: + TExtendedInquiryResponseDataCodec iEirCodec; + + // This data padding has been added to help prevent future binary compatibility breaks + // Neither iPadding1 nor iPadding2 have been zero'd because they are currently not used + TUint32 iPadding1; + TUint32 iPadding2; +}; + +/** +@publishedAll +@released + +Contains information resulting from a baseband notification. +*/ +NONSHARABLE_CLASS(TBTBasebandEventNotification) + { +public: + /** + Constructor. + @param aEventType The type of event. + @param aErrorCode The error code. + */ + TBTBasebandEventNotification(TUint32 aEventType, TInt aErrorCode = KErrNone) : iEventType(aEventType), iErrorCode(aErrorCode) {}; + + /** + Default constructor. + */ + TBTBasebandEventNotification() : iEventType(0), iErrorCode(KErrNone) {}; + + /** + Copy constructor. + @param aEvent The event to copy. + */ + TBTBasebandEventNotification(const TBTBasebandEventNotification& aEvent) : iEventType(aEvent.iEventType), iErrorCode(aEvent.iErrorCode) {}; + + /** + The event type. + @return The event type. + */ + TUint32 EventType() const { return iEventType; }; + + /** + The Bluetooth SIG error code associated with the event. + @return The SIG error code. + */ + TInt ErrorCode() const { return iErrorCode; }; + + /** + The Symbian HCI error code associated with the event. + @return The Symbian error code. + */ + IMPORT_C TInt SymbianErrorCode() const; + + /** + Set the event type. + @param aEventType The event type. + */ + void SetEventType(TUint32 aEventType) { iEventType = aEventType; }; + + /** + Set the error code. + @param aErrorCode The Bluetooth SIG error code. + */ + void SetErrorCode(TInt aErrorCode) { iErrorCode = aErrorCode; }; + +private: + TUint32 iEventType; + TInt iErrorCode; + }; + +/** +@publishedAll +@released + +Typedef'ed pckgbuf of the class TBTBasebandEventNotification. +*/ +typedef TPckgBuf TBTBasebandEvent; + +/** +@publishedAll +@released + +General Unlimited Inquiry Access Code +*/ +const TUint KGIAC=0x9e8b33; + +/** +@publishedAll +@released + +Limited Inquiry Access Code +*/ +const TUint KLIAC=0x9e8b00; + +/** +L2CAP channel modes +@publishedAll +@released +*/ +enum TL2CapChannelMode + { + EL2CAPBasicMode = 0x00, + EL2CAPRetransmissionMode = 0x01, + EL2CAPFlowControlMode = 0x02, + EL2CAPEnhancedRetransmissionMode = 0x03, + EL2CAPStreamingMode = 0x04, + }; + +/** +@publishedAll +@released + +API class for setting up an L2Cap channel configuration. + +This class may be used to set all or a subset of the following configuration +items: +Channel Reliability (and associated timer) +Maximum Transmission Unit (MTU) value preferred during MTU negotiation +Maximum Receive Unit (MRU) value preferred during MRU negotiation +Minimum MTU value acceptable during MTU negotiation +Minimum MRU value acceptable during MRU negotiation +Channel Priority + +If a configuration item is to be set, then its 'Set' or 'Configure' +method should be called. + +Once a TL2CapConfig object has been set up it can be used to configure a socket +using RSocket::SetOption or RSocket::Ioctl (or the CBluetoothSocket equivalents). + +If the preferred Maximum Transmission Unit (MTU) value is specified but its +minimum acceptable value is not specified in the same object, then the minimum +acceptable value will be implicitly taken to be equal to the preferred MTU by +the L2CAP APIs processing the object. This means that only an MTU greater than or +equal to the preferred MTU will be accepted from the peer during negotiation. + +If the Maximum Receive Unit (MRU) value is specified but its minimum acceptable +value is not, then the minimum acceptable value is implicitly taken to be equal +to the protocol minimum (48 bytes) by the L2CAP APIs processing the object. + +Note that even though this API allows setting of Obsolescence timer, outgoing +packet flushing may not be supported on all hardware. + +@see RSocket +@see CBluetoothSocket +*/ +NONSHARABLE_CLASS(TL2CapConfig) + { +public: + /** + Priority required for data on L2Cap channel + */ + enum TChannelPriority + { + EHigh = 2, + EMedium = 1, + ELow = 0, + }; + + /** + Reliability of data transfer preferred for L2Cap channel. + */ + enum TChannelReliability + { + EReliableChannel, + EUnreliableChannel, + EUnreliableDesiredChannel + }; + + /** + Timer values in milliseconds for reliable and unreliable channels + */ + enum TL2CapConfigSpecifiedTimers + { + /** + This is a time in milliseconds. However 0xffff has been given a special + meaning in this interface. It means "Allow maximum possible number of + transmissions of a single packet before giving up and disconnecting the + L2Cap channel." This is the maximum number of transmissions effectively + allowed by the spec. It only applies to reliable modes and is 255 for + Retransmission Mode and Infinity for Enhanced Retransmission Mode. + */ + EDefaultRetransmission = 0xffff, + /** + Minimum data obsolescence timeout required because data packets + will not ever be sent if we flush them too quickly. + Speed of sending data depends on how many channels are open and channel priority. + Note that flushing of outgoing packets may not be implemented on all Symbian OS + platforms. + */ + EMinDataObsolescenceTimeout = 0x0a, + /** + This is translated to mean never flush (as per spec). + */ + EDefaultDataObsolescenceTimeout = 0xffff, + }; + + /** + Used to indicate which config options have been specified by the user + */ + enum TL2CapConfigSpecifiedMask + { + ENoConfigElementsSpecified = 0x0000, + EMTUSizeSpecifiedMask = 0x0001, + EMRUSizeSpecifiedMask = 0x0002, + EReliabilitySpecifiedMask = 0x0004, + EPrioritySpecifiedMask = 0x0008, + EMinMTUSizeSpecifiedMask = 0x0010, + EMinMRUSizeSpecifiedMask = 0x0020, + ELegacyModesDisallowedSpecifiedMask = 0x0040 + }; + + IMPORT_C TL2CapConfig(); + + IMPORT_C TInt SetMaxTransmitUnitSize(TUint16 aSize = 0xffff); + IMPORT_C TUint16 MaxTransmitUnitSize(TBool& aIsSpecified) const; + IMPORT_C TInt SetMaxReceiveUnitSize(TUint16 aSize = 0xffff); + IMPORT_C TUint16 MaxReceiveUnitSize(TBool& aIsSpecified) const; + + IMPORT_C TInt SetMinMTU(TUint16 aSize); + IMPORT_C TUint16 MinMTU(TBool& aIsSpecified) const; + + IMPORT_C TInt SetMinMRU(TUint16 aSize); + IMPORT_C TUint16 MinMRU(TBool& aIsSpecified) const; + + IMPORT_C TInt ConfigureReliableChannel(TUint16 aRetransmissionTimer); + IMPORT_C TInt ConfigureUnreliableChannel(TUint16 aObsolescenceTimer); + IMPORT_C TInt ConfigureUnreliableDesiredChannel(TUint16 aObsolescenceTimer, TUint16 aRetransmissionTimer); + IMPORT_C void SetLegacyModesDisallowed(TBool aDisallowed); + IMPORT_C TBool LegacyModesDisallowed() const; + + IMPORT_C TChannelReliability ChannelReliability(TBool& aIsSpecified, TUint16& aAssociatedTimer) const; + + IMPORT_C TChannelReliability ChannelReliability(TBool& aIsSpecified) const; + IMPORT_C TUint16 RetransmissionTimer(TBool& aIsSpecified) const; + IMPORT_C TUint16 ObsolescenceTimer(TBool& aIsSpecified) const; + + IMPORT_C TInt ConfigureChannelPriority(TChannelPriority aPriority); + IMPORT_C TChannelPriority ChannelPriority(TBool& aIsSpecified) const; + + /** + @deprecated + Use ConfigureReliableChannel(TUint16 aRetransmissionTimer) instead + */ + IMPORT_C TInt SetupReliableChannel(TUint16 aRetransmissionTimer = EDefaultRetransmission); + /** + @deprecated + Use ConfigureUnreliableChannel(TUint16 aObsolescenceTimer) instead + */ + IMPORT_C TInt SetupUnreliableChannel(TUint16 aObsolescenceTimer = EDefaultDataObsolescenceTimeout); + /** + @deprecated + Use ConfigureChannelPriority(TChannelPriority aPriority) instead + */ + IMPORT_C TInt SetChannelPriority(TChannelPriority aPriority = ELow); + +private: + TUint16 iMTUSize; + TUint16 iMRUSize; + TChannelReliability iChannelReliability; + TUint16 iChannelReliabilityTimer; // see note below + TChannelPriority iChannelPriority; + TUint16 iSpecifiedMask; + TUint16 iMinMTUSize; // Minimum acceptable MTU. + TUint16 iMinMRUSize; // Minimum acceptable MRU. + TUint16 iAdditionalChannelReliabilityTimer; // see note below + // This data padding has been added to help prevent future binary compatibility breaks. + TUint16 iPadding; + + // Note on the timer fields: + // iAdditionalChannelReliabilityTimer has been added when a need to pass two timers within + // one object arose. To maintain BC with existing clients of this class, when a single timer + // is passed, it's always stored in iChannelReliabilityTimer. Changing this to just having + // iRetransmissionTimer & iObsolescenceTimer would break BC. + // When both timers are stored, Flush timeout goes in iChannelReliabilityTimer and + // Retransmission timeout goes in iAdditionalChannelReliabilityTimer. + }; + +/** +@publishedAll +@released + +Typedef to represent a L2CAP Config object. +*/ +typedef TPckgBuf TL2CapConfigPkg; + + +enum TEirWrapperPanics + { + EEirBadUuid16List = 0, + EEirBadUuid128List = 1, + }; +_LIT(KEirWrapperPanicName, "ExtendedInquiryResponseWrapper"); + +#endif //_BTTYPES_H