|
1 /* |
|
2 * Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: BT sync socket |
|
15 * Version : %version: 4.2.4 % |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 #include <es_sock.h> |
|
21 #include "btmsyncsock.h" |
|
22 #include "btmsockobserver.h" |
|
23 #include "btmdefs.h" |
|
24 #include "debug.h" |
|
25 |
|
26 // ======== MEMBER FUNCTIONS ======== |
|
27 |
|
28 CBtmSyncSock* CBtmSyncSock::NewL(MBtmSockObserver& aNotifier, RSocketServ& aSockServ) |
|
29 { |
|
30 CBtmSyncSock* self = new (ELeave) CBtmSyncSock(aNotifier, aSockServ); |
|
31 CleanupStack::PushL(self); |
|
32 self->ConstructL(); |
|
33 CleanupStack::Pop(self); |
|
34 return self; |
|
35 } |
|
36 |
|
37 CBtmSyncSock::~CBtmSyncSock() |
|
38 { |
|
39 TRACE_FUNC_ENTRY |
|
40 delete iSco; |
|
41 delete iEScoLink; |
|
42 TRACE_FUNC_EXIT |
|
43 } |
|
44 |
|
45 void CBtmSyncSock::SetupL(const TBTDevAddr& aAddr, const TBTSyncPackets& aPackets) |
|
46 { |
|
47 TRACE_FUNC_ENTRY |
|
48 iSco->SetupConnection(aAddr, aPackets); |
|
49 TRACE_FUNC_EXIT |
|
50 } |
|
51 |
|
52 void CBtmSyncSock::CancelSetup() |
|
53 { |
|
54 TRACE_FUNC_ENTRY |
|
55 iSco->CancelSetup(); |
|
56 iSco->Disconnect(); |
|
57 TRACE_FUNC_EXIT |
|
58 } |
|
59 |
|
60 void CBtmSyncSock::DisconnectL() |
|
61 { |
|
62 TRACE_FUNC_ENTRY |
|
63 if (iConnectedLink) |
|
64 iConnectedLink->Disconnect(); |
|
65 TRACE_FUNC_EXIT |
|
66 } |
|
67 |
|
68 void CBtmSyncSock::AcceptL(TBool aAllowEsco) |
|
69 { |
|
70 TRACE_FUNC_ENTRY |
|
71 iScoAcceptor = TScoAcceptor(this); |
|
72 iSco->SetNotifier(iScoAcceptor); |
|
73 iSco->AcceptConnection(TBTSyncPackets(KScoPacketTypeSpec)); |
|
74 if (aAllowEsco) |
|
75 { |
|
76 iESco_Acceptor = TScoAcceptor(this); |
|
77 iEScoLink = CBluetoothSynchronousLink::NewL(iESco_Acceptor, iServer); |
|
78 iEScoLink->AcceptConnection(TBTSyncPackets(KEscoPacketTypeSpec)); |
|
79 } |
|
80 TRACE_FUNC_EXIT |
|
81 } |
|
82 |
|
83 void CBtmSyncSock::CancelAccept() |
|
84 { |
|
85 TRACE_FUNC_ENTRY |
|
86 if (iSco) |
|
87 { |
|
88 iSco->CancelAccept(); |
|
89 } |
|
90 if (iEScoLink) |
|
91 { |
|
92 iEScoLink->CancelAccept(); |
|
93 } |
|
94 TRACE_FUNC_EXIT |
|
95 } |
|
96 |
|
97 void CBtmSyncSock::SetMaxLatency(TUint16 aLatency) |
|
98 { |
|
99 iSco->SetMaxLatency(aLatency); |
|
100 if (iEScoLink) |
|
101 iEScoLink->SetMaxLatency(aLatency); |
|
102 } |
|
103 |
|
104 void CBtmSyncSock::SetRetransmissionEffort(TBTeSCORetransmissionTypes aRetransmissionEffort) |
|
105 { |
|
106 iSco->SetRetransmissionEffort(aRetransmissionEffort); |
|
107 if (iEScoLink) |
|
108 iEScoLink->SetRetransmissionEffort(aRetransmissionEffort); |
|
109 } |
|
110 |
|
111 void CBtmSyncSock::Reset() |
|
112 { |
|
113 TRACE_FUNC_ENTRY |
|
114 |
|
115 TRACE_FUNC_EXIT |
|
116 } |
|
117 |
|
118 void CBtmSyncSock::SetObserver(MBtmSockObserver& aObserver) |
|
119 { |
|
120 iObserver = &aObserver; |
|
121 } |
|
122 |
|
123 TInt CBtmSyncSock::Latency() |
|
124 { |
|
125 TRACE_FUNC |
|
126 return TInt(iSco->Latency()); |
|
127 } |
|
128 |
|
129 void CBtmSyncSock::HandleSetupConnectionCompleteL(TInt aErr) |
|
130 { |
|
131 TRACE_FUNC |
|
132 iConnectedLink = iSco; |
|
133 iObserver->SyncLinkSetupCompleteL(aErr); |
|
134 } |
|
135 |
|
136 void CBtmSyncSock::HandleDisconnectionCompleteL(TInt aErr) |
|
137 { |
|
138 TRACE_FUNC_ENTRY |
|
139 iConnectedLink = NULL; |
|
140 iObserver->SyncLinkDisconnectCompleteL(aErr); |
|
141 TRACE_FUNC_EXIT |
|
142 } |
|
143 |
|
144 void CBtmSyncSock::HandleAcceptConnectionCompleteL(TInt /*aErr*/) |
|
145 { |
|
146 TRACE_FUNC |
|
147 } |
|
148 |
|
149 void CBtmSyncSock::HandleSendCompleteL(TInt aErr) |
|
150 { |
|
151 iObserver->SyncLinkSendCompleteL(aErr); |
|
152 } |
|
153 |
|
154 void CBtmSyncSock::HandleReceiveCompleteL(TInt aErr) |
|
155 { |
|
156 TRACE_ERROR(_L("CBtmSyncSock::HandleReceiveCompleteL")) |
|
157 iObserver->SyncLinkReceiveCompleteL(aErr); |
|
158 } |
|
159 |
|
160 CBtmSyncSock::CBtmSyncSock(MBtmSockObserver& aObserver, RSocketServ& aSockServ) |
|
161 : iObserver(&aObserver), iServer(aSockServ) |
|
162 { |
|
163 } |
|
164 |
|
165 void CBtmSyncSock::ConstructL() |
|
166 { |
|
167 TRACE_FUNC |
|
168 iSco = CBluetoothSynchronousLink::NewL(*this, iServer); |
|
169 } |
|
170 |
|
171 void CBtmSyncSock::AcceptRedirectL(TInt aErr, TScoAcceptor& aAcceptor) |
|
172 { |
|
173 TRACE_FUNC |
|
174 if (&aAcceptor == &iScoAcceptor) |
|
175 { |
|
176 TRACE_INFO((_L("Sync link type SCO"))) |
|
177 iConnectedLink = iSco; |
|
178 if (iEScoLink) |
|
179 iEScoLink->CancelAccept(); |
|
180 } |
|
181 else |
|
182 { |
|
183 TRACE_INFO((_L("Sync link type ESCO"))) |
|
184 iConnectedLink = iEScoLink; |
|
185 iSco->CancelAccept(); |
|
186 } |
|
187 iConnectedLink->SetNotifier(*this); |
|
188 iObserver->SyncLinkAcceptCompleteL(aErr); |
|
189 } |
|
190 |
|
191 CBtmSyncSock::TScoAcceptor::TScoAcceptor() |
|
192 { |
|
193 TScoAcceptor(NULL); |
|
194 } |
|
195 |
|
196 CBtmSyncSock::TScoAcceptor::TScoAcceptor(CBtmSyncSock* aParent) |
|
197 : iParent(aParent) |
|
198 { |
|
199 } |
|
200 |
|
201 void CBtmSyncSock::TScoAcceptor::HandleSetupConnectionCompleteL(TInt /*aErr*/) |
|
202 { |
|
203 TRACE_FUNC |
|
204 } |
|
205 |
|
206 void CBtmSyncSock::TScoAcceptor::HandleDisconnectionCompleteL(TInt /*aErr*/) |
|
207 { |
|
208 TRACE_FUNC |
|
209 } |
|
210 void CBtmSyncSock::TScoAcceptor::HandleAcceptConnectionCompleteL(TInt aErr) |
|
211 { |
|
212 TRACE_FUNC |
|
213 iParent->AcceptRedirectL(aErr, *this); |
|
214 } |
|
215 |
|
216 void CBtmSyncSock::TScoAcceptor::HandleSendCompleteL(TInt /*aErr*/) |
|
217 { |
|
218 TRACE_FUNC |
|
219 } |
|
220 void CBtmSyncSock::TScoAcceptor::HandleReceiveCompleteL(TInt /*aErr*/) |
|
221 { |
|
222 TRACE_FUNC |
|
223 } |