merge with master
[framework/osp/net.git] / src / inc / FNetWifi_WifiDirectDeviceImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file    FNetWifi_WifiDirectDeviceImpl.h
20  * @brief   This is the header file for the _WifiDirectDeviceImpl class.
21  * @version 2.0
22  *
23  * This header file contains declarations of the _WifiDirectDeviceImpl class.
24  */
25
26 #ifndef _FNET_WIFI_INTERNAL_WIFI_DIRECT_DEVICE_IMPL_H_
27 #define _FNET_WIFI_INTERNAL_WIFI_DIRECT_DEVICE_IMPL_H_
28
29 // Includes
30 #include <unique_ptr.h>
31 #include <FOspConfig.h>
32 #include <FBaseObject.h>
33 #include <FNetWifiWifiTypes.h>
34 #include "FNetWifi_WifiDirectGroupOwnerImpl.h"
35 #include "FNetWifi_WifiDirectGroupClientImpl.h"
36 #include "FNetWifi_IWifiDirectListener.h"
37
38 namespace Tizen { namespace Base { namespace Collection
39 {
40 class IList;
41 } } } // Tizen::Base::Collection
42
43 namespace Tizen { namespace Net { namespace Wifi
44 {
45 class IWifiDirectDeviceListener;
46 class IWifiDirectGroupOwnerListener;
47 class IWifiDirectGroupClientListener;
48 class WifiDirectDevice;
49 class WifiDirectDeviceInfo;
50 class WifiDirectGroupInfo;
51 class _WifiDirectSystemAdapter;
52 class _WifiDirectDeviceEvent;
53 class _WifiDirectGroupOwnerEvent;
54 class _WifiDirectGroupClientEvent;
55 class _WifiDirectEventArg;
56
57 enum _WifiDirectDeviceState
58 {
59    WIFI_DIRECT_DEVICE_INTERNAL_DEACTIVATED,
60    WIFI_DIRECT_DEVICE_INTERNAL_ACTIVATING,
61    WIFI_DIRECT_DEVICE_INTERNAL_DEACTIVATING,
62    WIFI_DIRECT_DEVICE_INTERNAL_ACTIVATED,
63    WIFI_DIRECT_DEVICE_INTERNAL_CONNECTING,
64    WIFI_DIRECT_DEVICE_INTERNAL_CONNECT_CANCELLING,
65    WIFI_DIRECT_DEVICE_INTERNAL_CREATED_OWNER,
66    WIFI_DIRECT_DEVICE_INTERNAL_CREATED_CLIENT,
67    WIFI_DIRECT_DEVICE_INTERNAL_DISCONNECTING,
68    WIFI_DIRECT_DEVICE_INTERNAL_LEAVING,
69    WIFI_DIRECT_DEVICE_INTERNAL_GROUP_CREATING
70 };
71
72
73 enum _WifiDirectScanState
74 {
75    WIFI_DIRECT_SCAN_INTERNAL_IDLE,
76    WIFI_DIRECT_SCAN_INTERNAL_SCANNING,
77    WIFI_DIRECT_SCAN_INTERNAL_CANCELLING
78 };
79
80 /**
81  * @class       _WifiDirectDeviceImpl
82  * @brief   This class provides methods for the Wi-Fi Direct management.
83  * @since       2.0
84  *
85  * WifiDirectDeviceImpl class provides the functionality for creating a WifiDirectDevice instance, and
86  * managing Wi-Fi Direct group. It also allows the listener to get events from Wi-Fi Direct group.
87  */
88
89 class _OSP_EXPORT_ _WifiDirectDeviceImpl
90     : public Tizen::Base::Object
91     , public _IWifiDirectListener
92 {
93 public:
94
95     /**
96      * @see WifiDirectDevice::Construct()
97      */
98     result Construct(WifiDirectDeviceId localDeviceId, bool enableIpInfoService = true);
99
100     /**
101      * @see WifiDirectDevice::AddWifiDirectDeviceListener()
102      */
103         result AddWifiDirectDeviceListener(IWifiDirectDeviceListener &listener);
104
105     /**
106      * @see WifiDirectDevice::AddWifiDirectGroupOwnerListener()
107      */
108         result AddWifiDirectGroupOwnerListener(IWifiDirectGroupOwnerListener &listener);
109
110     /**
111      * @see WifiDirectDevice::AddWifiDirectGroupClientListener()
112      */
113         result AddWifiDirectGroupClientListener(IWifiDirectGroupClientListener &listener);
114
115     /**
116      * @see WifiDirectDevice::RemoveWifiDirectDeviceListener()
117      */
118         result RemoveWifiDirectDeviceListener(IWifiDirectDeviceListener &listener);
119
120     /**
121      * @see WifiDirectDevice::RemoveWifiDirectGroupOwnerListener()
122      */
123         result RemoveWifiDirectGroupOwnerListener(IWifiDirectGroupOwnerListener &listener);
124
125     /**
126      * @see WifiDirectDevice::RemoveWifiDirectGroupClientListener()
127      */
128         result RemoveWifiDirectGroupClientListener(IWifiDirectGroupClientListener &listener);
129
130     /**
131      * @see WifiDirectDevice::Activate()
132      */
133         result Activate(void);
134
135     /**
136      * @see WifiDirectDevice::Deactivate()
137      */
138         result Deactivate(void);
139
140     /**
141      * @see WifiDirectDevice::IsActivated()
142      */
143     bool IsActivated(void) const;
144
145     /**
146      * @see WifiDirectDevice::GetGroupSettingInfoN()
147      */
148         WifiDirectGroupInfo* GetGroupSettingInfoN(void) const;
149
150     /**
151      * @see WifiDirectDevice::GetLocalDeviceInfoN()
152      */
153         WifiDirectDeviceInfo* GetLocalDeviceInfoN(void) const;
154
155     /**
156      * @see WifiDirectDevice::GetWpsConfigurationModePreference()
157      */
158         WifiWpsConfigurationMode GetWpsConfigurationModePreference(void) const;
159
160     /**
161      * @see WifiDirectDevice::SetLocalDeviceName()
162      */
163         result SetLocalDeviceName(const Tizen::Base::String &name);
164
165     /**
166      * @see WifiDirectDevice::SetWpsConfigurationModePreference()
167      */
168         result SetWpsConfigurationModePreference(WifiWpsConfigurationMode mode);
169
170     /**
171      * @see WifiDirectDevice::CreateGroup()
172      */
173         result CreateGroup(const WifiDirectGroupInfo *pWifiDirectGroupInfo = null, const WifiDirectDeviceInfo *pWifiDirectRemoteDeviceInfo = null);
174
175     /**
176      * @see WifiDirectDevice::CancelGroupCreation()
177      */
178         result CancelGroupCreation(void);
179
180     /**
181      * @see WifiDirectDevice::Scan()
182      */
183         result Scan(void);
184
185     /**
186      * @see WifiDirectDevice::CancelScan()
187      */
188         result CancelScan(void);
189
190     /**
191      * @see WifiDirectDevice::Associate()
192      */
193         result Associate(const WifiDirectDeviceInfo &wifiDirectGroupOwnerDeviceInfo);
194
195     /**
196      * @see WifiDirectDevice::GetWifiDirectMemberN()
197      */
198         WifiDirectGroupMember* GetWifiDirectMemberN(void);
199
200     /**
201      * @see WifiDirectDevice::IsDiscoverable()
202      */
203         bool IsDiscoverable(void) const;
204
205         /**
206      * @see WifiDirectDevice::Connect()
207      */
208         result Connect(const WifiDirectDeviceInfo& peerDeviceInfo);
209
210         /**
211      * @see WifiDirectDevice::CancelConnect()
212      */
213         result CancelConnect(void);
214
215     /**
216      * @see WifiDirectDevice::CreateAutonomousGroup()
217      */
218         result CreateAutonomousGroup(void);
219
220     /**
221      * @see WifiDirectDevice::SetGroupSettingInfo()
222      */
223         result SetGroupSettingInfo(const WifiDirectGroupInfo& groupConfigurationInfo);
224
225     /**
226      * @see WifiDirectDevice::Disconnect()
227      */
228         result Disconnect(const WifiDirectDeviceInfo& remoteDeviceInfo);
229
230     /**
231      * @see WifiDirectDevice::LeaveGroup()
232      */
233         result LeaveGroup(void);
234
235     /**
236      * @see WifiDirectDevice::GetGroupOwnerInfo()
237      */
238         WifiDirectDeviceInfo* GetGroupOwnerInfoN(void) const;
239
240     /**
241      * @see WifiDirectDevice::GetGroupClientInfoListN()
242      */
243         Tizen::Base::Collection::IList* GetGroupClientInfoListN(void) const;
244
245         /**
246      * @see WifiDirectDevice::GetOperatingChannel()
247      */
248         WifiRadioChannel GetOperatingChannel(void) const;
249
250     /**
251      * Returns string representation of current status.
252      *
253      * @return      current status of wifi direct
254      */
255
256         const char* GetStringOfCurrentState(void) const;
257
258     /**
259      * Returns String representation of Current Status of Scan.
260      *
261      * @return      current scan status of wifi direct
262      */
263         const char* GetStringOfScanState(void) const;
264
265     /**
266      * Adds reference count.
267      *
268      * @return      current reference count
269      */
270         int AddRef(void);
271
272     /**
273      * Removes reference count.
274      *
275      * @return      current reference count
276      */
277         int Release(void);
278
279     /**
280      * returns current status of wifi direct
281      *
282      * @return      Wifi Direct Device Status
283      */
284     _WifiDirectDeviceState GetWifiDirectDeviceCurrentState(void) const;
285
286     /**
287      * Sets current status of wifi direct
288      *
289      * @param[in]    currentState Wifi Direct Device Status
290      */
291         void SetWifiDirectDeviceCurrentState(_WifiDirectDeviceState currentState);
292
293     /**
294      * Returns wifi direct group owner event object
295      *
296      * @return      Wifi Direct Group Owner event object
297      */
298         _WifiDirectGroupOwnerEvent* GetWifiDirectGroupOwnerEvent() const;
299
300     /**
301      * Returns wifi direct group client event object
302      *
303      * @return      Wifi Direct Group Client event object
304      */
305         _WifiDirectGroupClientEvent* GetWifiDirectGroupClientEvent() const;
306
307     /**
308      * Returns all device information
309      *
310      * @return      List of Device Information
311      */
312     static Tizen::Base::Collection::IList* GetAllDeviceInfoN(void);
313
314     /**
315      * Gets WifiDirectDeviceInstance, 
316      *   incase pDeviceInfo = null gets information of Default Device
317      *
318      * @return      Wifi Direct Device instance
319      * @param[in]   pDeviceInfo A pointer to WifiDirectDeviceInfo
320      */
321     static WifiDirectDevice* GetWifiDirectDeviceInstanceN(const WifiDirectDeviceInfo* pDeviceInfo = null);
322
323
324     /**
325      * Gets WifiDirectDeviceInstance
326      *
327      * @return      Wifi Direct Device instance
328      */
329     static WifiDirectDevice* GetWifiDirectDeviceInstanceWithoutIpServiceN(void);
330
331     /**
332      * Creates _WifiDirectDeviceImpl class instance 
333      *
334      * @return      The pointer to _WifiDirectDeviceImpl
335      */
336     static _WifiDirectDeviceImpl* CreateWifiDirectDeviceImplInstanceN(void);
337
338     /**
339      * Gets the Impl instance.
340      *
341      * @return  The pointer to %_WifiDirectDeviceImpl
342      * @param[in]   wifiDirectDevice   An instance of %WifiDirectDevice
343      */
344     static _WifiDirectDeviceImpl* GetInstance(WifiDirectDevice& wifiDirectDevice);
345
346     /**
347      * Gets the Impl instance.
348      *
349      * @return  The pointer to %_WifiDirectDeviceImpl
350      * @param[in]   wifiDirectDevice   An instance of %WifiDirectDevice
351      */
352     static const _WifiDirectDeviceImpl* GetInstance(const WifiDirectDevice& wifiDirectDevice);
353
354 private:
355
356     /**
357      * This default constructor is intentionally declared as private so that only the platform can create an instance.
358      *
359      */
360     _WifiDirectDeviceImpl(void);
361
362     /**
363      * The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
364      *
365      * @param[in] rhs _WifiDirectDeviceImpl
366      */
367     _WifiDirectDeviceImpl(const _WifiDirectDeviceImpl& rhs);
368
369     /**
370      * 
371      * This destructor overrides Tizen::Base::Object::~Object().
372      *
373      */
374     virtual ~_WifiDirectDeviceImpl(void);
375
376     /**
377      * @see IWifiDirectDeviceListener::OnWifiDirectDeviceActivated()
378      */
379         void OnWifiDirectDeviceActivated(const _WifiDirectEventArg& arg, result r);
380
381     /**
382      * @see IWifiDirectDeviceListener::OnWifiDirectDeviceDeactivated()
383      */
384         void OnWifiDirectDeviceDeactivated(const _WifiDirectEventArg& arg, result r);
385
386     /**
387      * @see IWifiDirectDeviceListener::OnWifiDirectGroupCreatedN()
388      */
389         void OnWifiDirectGroupCreated(const _WifiDirectEventArg& arg, WifiDirectGroupMemberType wifiDirectMemberType, result r);
390
391         /**
392      * @see IWifiDirectDeviceListener::OnWifiDirectRemoteDeviceFound()
393      */
394         void OnWifiDirectRemoteDeviceFound(const _WifiDirectEventArg& arg);
395         
396         /**
397          * @see IWifiDirectDeviceListener::OnWifiDirectScanCompleted()
398          */
399         void OnWifiDirectScanCompleted(const _WifiDirectEventArg& arg, result r);
400
401     /**
402      * @see IWifiDirectDeviceListener::OnWifiDirectAssociationCompleted()
403      */
404         void OnWifiDirectAssociationCompleted(const _WifiDirectEventArg& arg, result r);
405
406     /**
407      * @see IWifiDirectDeviceListener::OnWifiDirectConnected()
408      */
409     void OnWifiDirectConnected(const _WifiDirectEventArg& arg, result r);
410
411     /**
412      * @see IWifiDirectDeviceListener::OnWifiDirectDisconnected()
413      */
414
415     void OnWifiDirectDisconnected(const _WifiDirectEventArg& arg, result r);
416
417     /**
418      * @see IWifiDirectDeviceListener::OnWifiDirectGroupLeft()
419      */
420     void OnWifiDirectGroupLeft(const _WifiDirectEventArg& arg, result r);
421
422     /**
423      * @see IWifiDirectDeviceListener::OnWifiDirectAutonomousGroupCreated()
424      */
425     void OnWifiDirectAutonomousGroupCreated(const _WifiDirectEventArg& arg, result r);
426
427
428     /**
429      * @see IWifiDirectGroupOwnerListener::OnWifiDirectAssociationCompleted()
430      */
431         void OnWifiDirectClientAssociated(const _WifiDirectEventArg& arg);
432
433     /**
434      * @see IWifiDirectGroupOwnerListener::OnWifiDirectClientDisassociated()
435      */
436         void OnWifiDirectClientDisassociated(const _WifiDirectEventArg& arg, WifiDirectAssociationTerminationReason reason);
437
438     /**
439      * @see IWifiDirectGroupOwnerListener::OnWifiDirectGroupDestroyed()
440      */
441         void OnWifiDirectGroupDestroyed(const _WifiDirectEventArg& arg, result r);
442
443     /**
444      * @see IWifiDirectGroupClientListener::OnWifiDirectAssociationTerminated()
445      */
446
447         void OnWifiDirectAssociationTerminated(const _WifiDirectEventArg& arg, result r);
448
449     /**
450      * @see IWifiDirectGroupClientListener::OnWifiDirectGroupOwnerInfoReceived()
451      */
452         void OnWifiDirectGroupOwnerInfoReceived(const _WifiDirectEventArg& arg, result r);
453
454     /**
455      * @see IWifiDirectGroupClientListener::OnWifiDirectAllGroupMemberInfoReceivedN()
456      */
457         void OnWifiDirectAllGroupMemberInfoReceivedN(const _WifiDirectEventArg& arg, result r);
458
459     /**
460      *
461      * The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
462      *
463      * @param[in] rhs An instance of %_WifiDirectDeviceImpl
464      */
465         _WifiDirectDeviceImpl& operator =(const _WifiDirectDeviceImpl& rhs);
466
467 private:
468     WifiDirectDeviceId  __localDeviceId;
469
470     std::unique_ptr<_WifiDirectDeviceEvent> __pWifiDirectDeviceEvent;
471     std::unique_ptr<_WifiDirectGroupOwnerEvent> __pWifiDirectGroupOwnerEvent;
472     std::unique_ptr<_WifiDirectGroupClientEvent> __pWifiDirectGroupClientEvent;
473
474     _WifiDirectGroupOwnerImpl __groupOwnerImpl;
475     _WifiDirectGroupClientImpl __groupClientImpl;
476
477         _WifiDirectDeviceState __deviceState;
478         _WifiDirectScanState __scanState;
479
480     _WifiDirectSystemAdapter* __pWifiDirectSystemAdapter;
481
482         int __refCount;
483     Tizen::Base::Runtime::Mutex __stateMutex;
484     friend class std::default_delete<_WifiDirectDeviceImpl>;
485 }; // _WifiDirectDeviceImpl
486 } } } // Tizen::Net::Wifi
487
488 #endif // _FNET_WIFI_INTERNAL_WIFI_DIRECT_DEVICE_IMPL_H_
489
490