--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/bluetoothclientlib/btlib/rfcommsock.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,353 @@
+// Copyright (c) 2000-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:
+//
+
+#include <bt_sock.h>
+
+#define FLOG(a) (a)
+
+// Remote Port Params class
+EXPORT_C void TRfcommRemotePortParams::UpdateFlowCtrlBit(TUint8 aFlowCtrl,
+ TRPNFlowCtrlMask aFCMask)
+/** Constructor
+Set the flow control bit specified by aFCMask to
+the same value it has in aFlowCtrl
+@param aFlowCtrl Flow control specifier.
+@param aFCMask Flow control mask.
+*/
+ {
+ // Set flow control to all zeros if it's not valid already
+ if(!(IsValid() & EVMFlowCtrl))
+ {
+ const TUint8 KDefaultFlowControl = 0;
+ SetFlowCtrl(KDefaultFlowControl);
+ }
+
+ // bitMask is guaranteed to have one and only one bit set as long as
+ // the enums in TRPNFlowCtrlMask only have one bit set each
+ TUint8 bitMask = TUint8(aFCMask);
+ if(aFlowCtrl & bitMask)
+ {
+ // Bit is set in aFlowCtrl so set it here too
+ SetFlowCtrl(iFlowCtrl |= bitMask);
+ }
+ else
+ {
+ // Bit is clear in aFlowCtrl so clear it here too
+ SetFlowCtrl(iFlowCtrl &= ~bitMask);
+ }
+ }
+
+EXPORT_C void TRfcommRemotePortParams::UpdateWholeFlowCtrl(TUint16 aParamMask,
+ TUint8 aFlowCtrl)
+/** Used to update flow control with relevant bits from aFlowCtrl
+(as specified by aParamsMask)
+@param aParamMask The parameter mask specifing what to change.
+@param aFlowCtrl Flow control information specifing new values.
+*/
+ {
+ if(aParamMask & EPMXOnOffInput)
+ {
+ // XON/off on input
+ UpdateFlowCtrlBit(aFlowCtrl, EFCXOnOffInput);
+ }
+
+ if(aParamMask & EPMXOnOffOutput)
+ {
+ // XON/off on output
+ UpdateFlowCtrlBit(aFlowCtrl, EFCXOnOffOutput);
+ }
+
+ if(aParamMask & EPMRTRInput)
+ {
+ // RTR on input
+ UpdateFlowCtrlBit(aFlowCtrl, EFCRTRInput);
+ }
+
+ if(aParamMask & EPMRTROutput)
+ {
+ // RTR on output
+ UpdateFlowCtrlBit(aFlowCtrl, EFCRTROutput);
+ }
+
+ if(aParamMask & EPMRTCInput)
+ {
+ // RTC on input
+ UpdateFlowCtrlBit(aFlowCtrl, EFCRTCInput);
+ }
+
+ if(aParamMask & EPMRTCOutput)
+ {
+ // RTC on output
+ UpdateFlowCtrlBit(aFlowCtrl, EFCRTCOutput);
+ }
+ }
+
+EXPORT_C void TRfcommRemotePortParams::UpdateFromRPNTransaction(
+ const TRfcommRPNTransaction& aRPNTransaction)
+/** Update using a TRfcommRPNTransaction class.
+Update all parameters according to parameters and mask in aRPNTransaction
+@param aRPNTransaction The internal values are updated according to the values held in this attribute.
+@see TRfcommRPNTransaction
+*/
+ {
+ TUint16 paramMask = aRPNTransaction.iParamMask;
+ TRfcommRemotePortParams portParams = aRPNTransaction.iPortParams;
+
+ // Copy everything that is marked in the parameter mask if it is valid in the
+ // source 'remote port params' structure
+ if(paramMask & EPMBitRate)
+ {
+ TBps bitRate = EBps9600; // To stop compiler warnings
+ if(portParams.GetBitRate(bitRate)) // Guarantees 'bitRate' set if returns True
+ SetBitRate(bitRate);
+ }
+
+ if(paramMask & EPMDataBits)
+ {
+ TDataBits dataBits = EData5; // To stop compiler warnings
+ if(portParams.GetDataBits(dataBits)) // Guarantees 'dataBits' set if returns True
+ SetDataBits(dataBits);
+ }
+
+ if(paramMask & EPMStopBit)
+ {
+ TStopBits stopBit = EStop1; // To stop compiler warnings
+ if(portParams.GetStopBit(stopBit)) // Guarantees 'stopBit' set if returns True
+ SetStopBit(stopBit);
+ }
+
+ // Both indicate a change in the same thing in TRfcommRemotePortparams
+ if(paramMask & EPMParity || paramMask & EPMParityType)
+ {
+ TParity parity = EParityNone; // To stop compiler warnings
+ if(portParams.GetParity(parity)) // Guarantees 'parity' set if returns True
+ SetParity(parity);
+ }
+
+ if(paramMask & EPMXOnChar)
+ {
+ TUint8 xOnChar = 0; // To stop compiler warnings
+ if(portParams.GetXOnChar(xOnChar)) // Guarantees 'xOnChar' set if returns True
+ SetXOnChar(xOnChar);
+ }
+
+ if(paramMask & EPMXOffChar)
+ {
+ TUint8 xOffChar = 0; // To stop compiler warnings
+ if(portParams.GetXOffChar(xOffChar)) // Guarantees 'xOffChar' set if returns True
+ SetXOffChar(xOffChar);
+ }
+
+ // Flow control is compound - do it separately
+ TUint8 flowCtrl = 0; // To stop compiler warnings
+ if(portParams.GetFlowCtrl(flowCtrl))
+ UpdateWholeFlowCtrl(paramMask, flowCtrl);
+ }
+
+EXPORT_C TRfcommRemotePortParams::TRfcommRemotePortParams()
+ : iFlowCtrl(0),
+ iXOnChar(0),
+ iXOffChar(0),
+ iValidMask(0)
+ {
+ }
+
+EXPORT_C TUint8 TRfcommRemotePortParams::IsValid() const
+ {
+ return iValidMask;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetBitRate(TBps& aBitRate) const
+ {
+ if(IsValid() & EVMBitRate)
+ {
+ aBitRate = iBitRate;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetBitRate(TBps aBitRate)
+ {
+ switch(aBitRate)
+ {
+ case EBps2400:
+ case EBps4800:
+ case EBps7200:
+ case EBps9600:
+ case EBps19200:
+ case EBps38400:
+ case EBps57600:
+ case EBps115200:
+ case EBps230400:
+ iValidMask|=EVMBitRate;
+ iBitRate=aBitRate;
+ return KErrNone;
+ //break;
+ default:
+ return KErrArgument;
+ //break;
+ }
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetDataBits(TDataBits& aDataBits) const
+// If Data Bits are valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMDataBits)
+ {
+ aDataBits = iDataBits;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetDataBits(TDataBits aDataBits)
+ {
+ iValidMask|=EVMDataBits;
+ iDataBits=aDataBits;
+ return KErrNone;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetStopBit(TStopBits& aStopBit) const
+// If Stop Bit is valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMStopBit)
+ {
+ aStopBit = iStopBit;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetStopBit(TStopBits aStopBit)
+ {
+ iValidMask|=EVMStopBit;
+ iStopBit=aStopBit;
+ return KErrNone;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetParity(TParity& aParity) const
+// If Parity is valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMParity)
+ {
+ aParity = iParity;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetParity(TParity aParity)
+ {
+ iValidMask|=EVMParity;
+ iParity=aParity;
+ return KErrNone;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetFlowCtrl(TUint8& aFlowCtrl) const
+// If Flow Control is valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMFlowCtrl)
+ {
+ aFlowCtrl = iFlowCtrl;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetFlowCtrl(TUint8 aFlowCtrl)
+ {
+ iValidMask|=EVMFlowCtrl;
+ iFlowCtrl=aFlowCtrl;
+ return KErrNone;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetXOnChar(TUint8& aXOnChar) const
+// If XOn Char is valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMXOnChar)
+ {
+ aXOnChar = iXOnChar;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetXOnChar(TUint8 aXOnChar)
+ {
+ iValidMask|=EVMXOnChar;
+ iXOnChar=aXOnChar;
+ return KErrNone;
+ }
+
+EXPORT_C TBool TRfcommRemotePortParams::GetXOffChar(TUint8& aXOffChar) const
+// If XOff Char is valid, sets reference and returns True,
+// otherwise, returns False
+ {
+ if(IsValid() & EVMXOffChar)
+ {
+ aXOffChar = iXOffChar;
+ return ETrue;
+ }
+ else
+ return EFalse;
+ }
+
+EXPORT_C TInt TRfcommRemotePortParams::SetXOffChar(TUint8 aXOffChar)
+ {
+ iValidMask|=EVMXOffChar;
+ iXOffChar=aXOffChar;
+ return KErrNone;
+ }
+
+// RPN Transaction class
+
+EXPORT_C TRfcommRPNTransaction::TRfcommRPNTransaction():iParamMask(0)
+ {
+ }
+
+// Socket Address class
+
+EXPORT_C TRfcommSockAddr::TRfcommSockAddr()
+/** Constructor
+*/
+ {
+ }
+
+EXPORT_C TRfcommSockAddr::TRfcommSockAddr(const TSockAddr &aAddr)
+ : TBTSockAddr(aAddr)
+/** Constructor that takes a BT socket address.
+@param aAddr The BT socket address from which this instance is initialised.
+*/
+ {
+ }
+
+EXPORT_C TRfcommSockAddr& TRfcommSockAddr::Cast(const TSockAddr &aAddr)
+ {
+ return *((TRfcommSockAddr *)&aAddr);
+ }
+
+// EOF