60
|
1 |
/*
|
|
2 |
* Component Name: Headset Simulator
|
|
3 |
* Author: Comarch S.A.
|
|
4 |
* Version: 1.0
|
|
5 |
* Copyright (c) 2010 Comarch S.A.
|
|
6 |
*
|
|
7 |
* This Software is submitted by Comarch S.A. to Symbian Foundation Limited on
|
|
8 |
* the basis of the Member Contribution Agreement entered between Comarch S.A.
|
|
9 |
* and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be
|
|
10 |
* used only in accordance with the terms and conditions of the Agreement.
|
|
11 |
* Any other usage, duplication or redistribution of this Software is not
|
|
12 |
* allowed without written permission of Comarch S.A.
|
|
13 |
*
|
|
14 |
*/
|
|
15 |
|
|
16 |
#ifndef HSREMOTECONTROLSERVER_H
|
|
17 |
#define HSREMOTECONTROLSERVER_H
|
|
18 |
|
|
19 |
#include <bt_sock.h>
|
|
20 |
#include <e32base.h>
|
|
21 |
#include <es_sock.h>
|
|
22 |
#include <btsdp.h>
|
|
23 |
#include <hsclientobservers.h>
|
|
24 |
|
|
25 |
class CHsCore;
|
|
26 |
class CHsRemoteControlDataHandler;
|
|
27 |
|
|
28 |
/**
|
|
29 |
* The id used for advertising and discovering the remote control service.
|
|
30 |
*/
|
|
31 |
const TUint32 KHsRemoteControlServiceID = 0xfabc234f;
|
|
32 |
|
|
33 |
/** Avalaible service state */
|
|
34 |
const TInt KServicAvailable = 0xFF;
|
|
35 |
|
|
36 |
/** Unavalaible service state */
|
|
37 |
const TInt KServiceUnavailable = 0x00;
|
|
38 |
|
|
39 |
/** Buffer size */
|
|
40 |
const TInt KHsRemoteControlBufferSize = 256;
|
|
41 |
|
|
42 |
/** The number of connections allowed in the queue */
|
|
43 |
const TInt KHsSizeOfListenQueue = 5;
|
|
44 |
|
|
45 |
/** Useful constants */
|
|
46 |
_LIT(KHsRFComm,"RFCOMM");
|
|
47 |
_LIT(KServiceName, "HSControlServer");
|
|
48 |
_LIT(KServiceDesc, "HSControlServer");
|
|
49 |
|
|
50 |
/** Buffer for remote control */
|
|
51 |
typedef TBuf8 <KHsRemoteControlBufferSize> THsRemoteControlBuffer;
|
|
52 |
|
|
53 |
/**
|
|
54 |
* @brief Server for remote control requests
|
|
55 |
*/
|
|
56 |
class CHsControlServer : public CBase, public MBluetoothSocketNotifier
|
|
57 |
{
|
|
58 |
|
|
59 |
public:
|
|
60 |
|
|
61 |
/**
|
|
62 |
* Two-phased constructor.
|
|
63 |
*
|
|
64 |
* @param aSocketServ sesion to socket server
|
|
65 |
* @param aHsCore pointer to CHsCore
|
|
66 |
* @return class instance
|
|
67 |
*/
|
|
68 |
static CHsControlServer* NewL( RSocketServ& aSocketServ, CHsCore* aHsCore );
|
|
69 |
|
|
70 |
/**
|
|
71 |
* Two-phased constructor.
|
|
72 |
*
|
|
73 |
* @param aSocketServ session to socket server
|
|
74 |
* @param aHsCore pointer to CHsCore
|
|
75 |
* @return class instance
|
|
76 |
*/
|
|
77 |
static CHsControlServer* NewLC( RSocketServ& aSocketServ,
|
|
78 |
CHsCore* aHsCore );
|
|
79 |
|
|
80 |
/**
|
|
81 |
* Destructor.
|
|
82 |
*/
|
|
83 |
~CHsControlServer();
|
|
84 |
|
|
85 |
public:
|
|
86 |
|
|
87 |
/**
|
|
88 |
* Turns on server for remote control
|
|
89 |
*/
|
|
90 |
void StartRemoteControlServerL();
|
|
91 |
|
|
92 |
/**
|
|
93 |
* Stops remote control server. Cancels receiving and sending data, destroys
|
|
94 |
* all CBluetoothSockets
|
|
95 |
*/
|
|
96 |
void CancelListen();
|
|
97 |
|
|
98 |
/**
|
|
99 |
* Setter for observer
|
|
100 |
*
|
|
101 |
* @param aConnectionObserver observer
|
|
102 |
*/
|
|
103 |
void SetConnectionObserver(
|
|
104 |
MRemoteControllerConnectionObserver &aConnectionObserver );
|
|
105 |
|
|
106 |
private:
|
|
107 |
|
|
108 |
/**
|
|
109 |
* Constructor for performing 1st stage construction
|
|
110 |
*
|
|
111 |
* @param aSocketServ sesion to socket server
|
|
112 |
* @param aHsCore pointer to CHsCore
|
|
113 |
*/
|
|
114 |
CHsControlServer( RSocketServ& aSocketServ, CHsCore* aHsCore );
|
|
115 |
|
|
116 |
/**
|
|
117 |
* Default constructor for performing 2nd stage construction
|
|
118 |
*/
|
|
119 |
void ConstructL();
|
|
120 |
|
|
121 |
private:
|
|
122 |
/**
|
|
123 |
* Sends data to client.
|
|
124 |
*
|
|
125 |
* @param aData message to be send
|
|
126 |
*
|
|
127 |
* @return error code
|
|
128 |
*/
|
|
129 |
TInt Send( const TDesC8& aData );
|
|
130 |
|
|
131 |
/**
|
|
132 |
* Receives data from listening socket.
|
|
133 |
*/
|
|
134 |
void Receive();
|
|
135 |
|
|
136 |
/**
|
|
137 |
* Registers service in SDP database
|
|
138 |
*
|
|
139 |
* @param aChannel port number
|
|
140 |
* @return error code. KErrNone if success
|
|
141 |
*/
|
|
142 |
void RegisterSdpL( TInt aChannel );
|
|
143 |
|
|
144 |
/**
|
|
145 |
* Updates availability of service registered in SDP database
|
|
146 |
*
|
|
147 |
* @param aAvailable service availability
|
|
148 |
*/
|
|
149 |
void UpdateAvailabilityL( TBool aAvailable );
|
|
150 |
|
|
151 |
/**
|
|
152 |
* Deletes service record from SDP database
|
|
153 |
*/
|
|
154 |
void DeleteRecordSdp();
|
|
155 |
|
|
156 |
/**
|
|
157 |
* Handles incoming remote control request
|
|
158 |
*
|
|
159 |
* @param aRequest 8-bit desciptor containing request
|
|
160 |
*/
|
|
161 |
void HandleRequestL( TDes8& aRequest );
|
|
162 |
|
|
163 |
/**
|
|
164 |
* Retrieves 'HsTurnOn' command's data needed for HS's initialization
|
|
165 |
*
|
|
166 |
* @param aParams command's data
|
|
167 |
* @param aPluginCod Cod plugin's name
|
|
168 |
* @param aPluginSdp Sdp plugin's name
|
|
169 |
* @param aPluginName profile plugin's name
|
|
170 |
*/
|
|
171 |
void RetrieveStartupParamsL( const TDesC8& aParams, RBuf8& aPluginCod,
|
|
172 |
RBuf8& aPluginSdp, RBuf8& aPluginProfile );
|
|
173 |
|
|
174 |
private:
|
|
175 |
//Methods inherited from MBluetoothSocketNotifier
|
|
176 |
|
|
177 |
void HandleConnectCompleteL( TInt aErr );
|
|
178 |
|
|
179 |
void HandleAcceptCompleteL( TInt aErr );
|
|
180 |
|
|
181 |
void HandleShutdownCompleteL( TInt aErr );
|
|
182 |
|
|
183 |
void HandleSendCompleteL( TInt aErr );
|
|
184 |
|
|
185 |
void HandleReceiveCompleteL( TInt aErr );
|
|
186 |
|
|
187 |
void HandleIoctlCompleteL( TInt aErr );
|
|
188 |
|
|
189 |
void HandleActivateBasebandEventNotifierCompleteL( TInt aErr,
|
|
190 |
TBTBasebandEventNotification& aEventNotification );
|
|
191 |
|
|
192 |
private:
|
|
193 |
|
|
194 |
/** States of the Remote control server */
|
|
195 |
enum THsRemoteControlState
|
|
196 |
{
|
|
197 |
/** Not initialized */
|
|
198 |
ENone = 1,
|
|
199 |
/** Connection attempt ongoing */
|
|
200 |
EConnecting,
|
|
201 |
/** Ready for clients */
|
|
202 |
EWaiting
|
|
203 |
};
|
|
204 |
|
|
205 |
/** Current state */
|
|
206 |
THsRemoteControlState iState;
|
|
207 |
|
|
208 |
/** Listening status */
|
|
209 |
TBool iInitialized;
|
|
210 |
|
|
211 |
/** Server port */
|
|
212 |
TInt iServerPort;
|
|
213 |
|
|
214 |
/** Service record state */
|
|
215 |
TInt iRecordState;
|
|
216 |
|
|
217 |
/** Data length */
|
|
218 |
TSockXfrLength iDataLength;
|
|
219 |
|
|
220 |
/** Holds received data */
|
|
221 |
THsRemoteControlBuffer iReceiveDataBuffer;
|
|
222 |
|
|
223 |
/** Used for buffering data */
|
|
224 |
THsRemoteControlBuffer iTempDataBuffer;
|
|
225 |
|
|
226 |
/** Holds data to be send */
|
|
227 |
THsRemoteControlBuffer iSendDataBuffer;
|
|
228 |
|
|
229 |
/** Service record */
|
|
230 |
TSdpServRecordHandle iSdpRecordHandle;
|
|
231 |
|
|
232 |
/** Service discovery database session */
|
|
233 |
RSdp iSdpServer;
|
|
234 |
|
|
235 |
/** Service discovery database subsession */
|
|
236 |
RSdpDatabase iSdpDB;
|
|
237 |
|
|
238 |
/** Creates subsession to socket server */
|
|
239 |
RSocketServ &iSocketServ;
|
|
240 |
|
|
241 |
/** Socket for listening for new connections */
|
|
242 |
CBluetoothSocket *iListenSocket;
|
|
243 |
|
|
244 |
/** Socket */
|
|
245 |
CBluetoothSocket *iSocket;
|
|
246 |
|
|
247 |
/** Pointer to CHsCore */
|
|
248 |
CHsCore *iHsCore;
|
|
249 |
|
|
250 |
/** Pointer to CHsRemoteControlDataHandler */
|
|
251 |
CHsRemoteControlDataHandler* iDataHandler;
|
|
252 |
|
|
253 |
/** Pointer to observer */
|
|
254 |
MRemoteControllerConnectionObserver *iConnectionObserver;
|
|
255 |
|
|
256 |
};
|
|
257 |
|
|
258 |
#endif // HSREMOTECONTROLSERVER_H
|