dom/bluetooth/BluetoothService.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
     2 /* vim: set ts=2 et sw=2 tw=80: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #ifndef mozilla_dom_bluetooth_bluetootheventservice_h__
     8 #define mozilla_dom_bluetooth_bluetootheventservice_h__
    10 #include "BluetoothCommon.h"
    11 #include "BluetoothProfileManagerBase.h"
    12 #include "mozilla/dom/ipc/Blob.h"
    13 #include "nsAutoPtr.h"
    14 #include "nsClassHashtable.h"
    15 #include "nsIDOMFile.h"
    16 #include "nsIObserver.h"
    17 #include "nsTObserverArray.h"
    18 #include "nsThreadUtils.h"
    20 namespace mozilla {
    21 namespace ipc {
    22 class UnixSocketConsumer;
    23 }
    24 }
    26 BEGIN_BLUETOOTH_NAMESPACE
    28 class BluetoothManager;
    29 class BluetoothNamedValue;
    30 class BluetoothReplyRunnable;
    31 class BluetoothSignal;
    33 typedef mozilla::ObserverList<BluetoothSignal> BluetoothSignalObserverList;
    35 class BluetoothService : public nsIObserver
    36                        , public BluetoothSignalObserver
    37 {
    38   class ToggleBtTask;
    39   friend class ToggleBtTask;
    41   class StartupTask;
    42   friend class StartupTask;
    44 public:
    45   class ToggleBtAck : public nsRunnable
    46   {
    47   public:
    48     ToggleBtAck(bool aEnabled);
    49     NS_IMETHOD Run();
    51   private:
    52     bool mEnabled;
    53   };
    54   friend class ToggleBtAck;
    56   NS_DECL_ISUPPORTS
    57   NS_DECL_NSIOBSERVER
    59   /**
    60    * Add a message handler object from message distribution observer.
    61    * Must be called from the main thread.
    62    *
    63    * @param aNodeName Node name of the object
    64    * @param aMsgHandler Weak pointer to the object
    65    */
    66   virtual void
    67   RegisterBluetoothSignalHandler(const nsAString& aNodeName,
    68                                  BluetoothSignalObserver* aMsgHandler);
    70   /**
    71    * Remove a message handler object from message distribution observer.
    72    * Must be called from the main thread.
    73    *
    74    * @param aNodeName Node name of the object
    75    * @param aMsgHandler Weak pointer to the object
    76    */
    77   virtual void
    78   UnregisterBluetoothSignalHandler(const nsAString& aNodeName,
    79                                    BluetoothSignalObserver* aMsgHandler);
    81   /**
    82    * Remove a message handlers for the given observer.
    83    * Must be called from the main thread.
    84    *
    85    * @param aMsgHandler Weak pointer to the object
    86    */
    87   void
    88   UnregisterAllSignalHandlers(BluetoothSignalObserver* aMsgHandler);
    90   /**
    91    * Distribute a signal to the observer list
    92    *
    93    * @param aSignal Signal object to distribute
    94    *
    95    * @return NS_OK if signal distributed, NS_ERROR_FAILURE on error
    96    */
    97   void
    98   DistributeSignal(const BluetoothSignal& aEvent);
   100   /**
   101    * Called when get a Bluetooth Signal from BluetoothDBusService
   102    *
   103    */
   104   void
   105   Notify(const BluetoothSignal& aParam);
   107   /**
   108    * Returns the BluetoothService singleton. Only to be called from main thread.
   109    *
   110    * @param aService Pointer to return singleton into.
   111    *
   112    * @return NS_OK on proper assignment, NS_ERROR_FAILURE otherwise (if service
   113    * has not yet been started, for instance)
   114    */
   115   static BluetoothService*
   116   Get();
   118   static already_AddRefed<BluetoothService>
   119   FactoryCreate()
   120   {
   121     nsRefPtr<BluetoothService> service = Get();
   122     return service.forget();
   123   }
   125   /**
   126    * Returns the path of the default adapter, implemented via a platform
   127    * specific method.
   128    *
   129    * @return NS_OK on success, NS_ERROR_FAILURE otherwise
   130    */
   131   virtual nsresult
   132   GetDefaultAdapterPathInternal(BluetoothReplyRunnable* aRunnable) = 0;
   134   /**
   135    * Returns the properties of paired devices, implemented via a platform
   136    * specific method.
   137    *
   138    * @return NS_OK on success, NS_ERROR_FAILURE otherwise
   139    */
   140   virtual nsresult
   141   GetPairedDevicePropertiesInternal(const nsTArray<nsString>& aDeviceAddresses,
   142                                     BluetoothReplyRunnable* aRunnable) = 0;
   144   /**
   145    * Returns the properties of connected devices regarding to specific profile,
   146    * implemented via a platform specific methood.
   147    *
   148    * @return NS_OK on success, NS_ERROR_FAILURE otherwise
   149    */
   150   virtual nsresult
   151   GetConnectedDevicePropertiesInternal(uint16_t aServiceUuid,
   152                                        BluetoothReplyRunnable* aRunnable) = 0;
   154   /**
   155    * Stop device discovery (platform specific implementation)
   156    *
   157    * @return NS_OK if discovery stopped correctly, false otherwise
   158    */
   159   virtual nsresult
   160   StopDiscoveryInternal(BluetoothReplyRunnable* aRunnable) = 0;
   162   /**
   163    * Start device discovery (platform specific implementation)
   164    *
   165    * @return NS_OK if discovery stopped correctly, false otherwise
   166    */
   167   virtual nsresult
   168   StartDiscoveryInternal(BluetoothReplyRunnable* aRunnable) = 0;
   170   /**
   171    * Set a property for the specified object
   172    *
   173    * @param aPropName Name of the property
   174    * @param aValue Boolean value
   175    * @param aRunnable Runnable to run on async reply
   176    *
   177    * @return NS_OK if property is set correctly, NS_ERROR_FAILURE otherwise
   178    */
   179   virtual nsresult
   180   SetProperty(BluetoothObjectType aType,
   181               const BluetoothNamedValue& aValue,
   182               BluetoothReplyRunnable* aRunnable) = 0;
   184   virtual nsresult
   185   CreatePairedDeviceInternal(const nsAString& aAddress,
   186                              int aTimeout,
   187                              BluetoothReplyRunnable* aRunnable) = 0;
   189   virtual nsresult
   190   RemoveDeviceInternal(const nsAString& aObjectPath,
   191                        BluetoothReplyRunnable* aRunnable) = 0;
   193   /**
   194    * Get corresponding service channel of specific service on remote device.
   195    * It's usually the very first step of establishing an outbound connection.
   196    *
   197    * @param aObjectPath Object path of remote device
   198    * @param aServiceUuid UUID of the target service
   199    * @param aManager Instance which has callback function OnGetServiceChannel()
   200    *
   201    * @return NS_OK if the task begins, NS_ERROR_FAILURE otherwise
   202    */
   203   virtual nsresult
   204   GetServiceChannel(const nsAString& aDeviceAddress,
   205                     const nsAString& aServiceUuid,
   206                     BluetoothProfileManagerBase* aManager) = 0;
   208   virtual bool
   209   UpdateSdpRecords(const nsAString& aDeviceAddress,
   210                    BluetoothProfileManagerBase* aManager) = 0;
   212   virtual bool
   213   SetPinCodeInternal(const nsAString& aDeviceAddress, const nsAString& aPinCode,
   214                      BluetoothReplyRunnable* aRunnable) = 0;
   216   virtual bool
   217   SetPasskeyInternal(const nsAString& aDeviceAddress, uint32_t aPasskey,
   218                      BluetoothReplyRunnable* aRunnable) = 0;
   220   virtual bool
   221   SetPairingConfirmationInternal(const nsAString& aDeviceAddress, bool aConfirm,
   222                                  BluetoothReplyRunnable* aRunnable) = 0;
   224   virtual void
   225   Connect(const nsAString& aDeviceAddress, uint32_t aCod, uint16_t aServiceUuid,
   226           BluetoothReplyRunnable* aRunnable) = 0;
   228   virtual void
   229   Disconnect(const nsAString& aDeviceAddress, uint16_t aServiceUuid,
   230              BluetoothReplyRunnable* aRunnable) = 0;
   232   virtual bool
   233   IsConnected(uint16_t aServiceUuid) = 0;
   235   virtual void
   236   SendFile(const nsAString& aDeviceAddress,
   237            BlobParent* aBlobParent,
   238            BlobChild* aBlobChild,
   239            BluetoothReplyRunnable* aRunnable) = 0;
   241   virtual void
   242   SendFile(const nsAString& aDeviceAddress,
   243            nsIDOMBlob* aBlob,
   244            BluetoothReplyRunnable* aRunnable) = 0;
   246   virtual void
   247   StopSendingFile(const nsAString& aDeviceAddress,
   248                   BluetoothReplyRunnable* aRunnable) = 0;
   250   virtual void
   251   ConfirmReceivingFile(const nsAString& aDeviceAddress, bool aConfirm,
   252                        BluetoothReplyRunnable* aRunnable) = 0;
   254   virtual void
   255   ConnectSco(BluetoothReplyRunnable* aRunnable) = 0;
   257   virtual void
   258   DisconnectSco(BluetoothReplyRunnable* aRunnable) = 0;
   260   virtual void
   261   IsScoConnected(BluetoothReplyRunnable* aRunnable) = 0;
   263 #ifdef MOZ_B2G_RIL
   264   virtual void
   265   AnswerWaitingCall(BluetoothReplyRunnable* aRunnable) = 0;
   267   virtual void
   268   IgnoreWaitingCall(BluetoothReplyRunnable* aRunnable) = 0;
   270   virtual void
   271   ToggleCalls(BluetoothReplyRunnable* aRunnable) = 0;
   272 #endif
   274   virtual void
   275   SendMetaData(const nsAString& aTitle,
   276                const nsAString& aArtist,
   277                const nsAString& aAlbum,
   278                int64_t aMediaNumber,
   279                int64_t aTotalMediaCount,
   280                int64_t aDuration,
   281                BluetoothReplyRunnable* aRunnable) = 0;
   283   virtual void
   284   SendPlayStatus(int64_t aDuration,
   285                  int64_t aPosition,
   286                  const nsAString& aPlayStatus,
   287                  BluetoothReplyRunnable* aRunnable) = 0;
   289   virtual void
   290   UpdatePlayStatus(uint32_t aDuration,
   291                    uint32_t aPosition,
   292                    ControlPlayStatus aPlayStatus) = 0;
   294   virtual nsresult
   295   SendSinkMessage(const nsAString& aDeviceAddresses,
   296                   const nsAString& aMessage) = 0;
   298   virtual nsresult
   299   SendInputMessage(const nsAString& aDeviceAddresses,
   300                    const nsAString& aMessage) = 0;
   302   bool
   303   IsEnabled() const
   304   {
   305     return mEnabled;
   306   }
   308   bool
   309   IsToggling() const;
   311   void
   312   RemoveObserverFromTable(const nsAString& key);
   314   /**
   315    * Below 2 function/variable are used for ensuring event 'AdapterAdded' will
   316    * be fired after event 'Enabled'.
   317    */
   318   void TryFiringAdapterAdded();
   319   void AdapterAddedReceived();
   321 protected:
   322   BluetoothService() : mEnabled(false)
   323                      , mAdapterAddedReceived(false)
   324   {
   325   }
   327   virtual ~BluetoothService();
   329   bool
   330   Init();
   332   void
   333   Cleanup();
   335   nsresult
   336   StartBluetooth(bool aIsStartup);
   338   nsresult
   339   StopBluetooth(bool aIsStartup);
   341   nsresult
   342   StartStopBluetooth(bool aStart, bool aIsStartup);
   344   /**
   345    * Platform specific startup functions go here. Usually deals with member
   346    * variables, so not static. Guaranteed to be called outside of main thread.
   347    *
   348    * @return NS_OK on correct startup, NS_ERROR_FAILURE otherwise
   349    */
   350   virtual nsresult
   351   StartInternal() = 0;
   353   /**
   354    * Platform specific startup functions go here. Usually deals with member
   355    * variables, so not static. Guaranteed to be called outside of main thread.
   356    *
   357    * @return NS_OK on correct startup, NS_ERROR_FAILURE otherwise
   358    */
   359   virtual nsresult
   360   StopInternal() = 0;
   362   /**
   363    * Called when XPCOM first creates this service.
   364    */
   365   virtual nsresult
   366   HandleStartup();
   368   /**
   369    * Called when the startup settings check has completed.
   370    */
   371   nsresult
   372   HandleStartupSettingsCheck(bool aEnable);
   374   /**
   375    * Called when "mozsettings-changed" observer topic fires.
   376    */
   377   nsresult
   378   HandleSettingsChanged(const nsAString& aData);
   380   /**
   381    * Called when XPCOM is shutting down.
   382    */
   383   virtual nsresult
   384   HandleShutdown();
   386   // Called by ToggleBtAck.
   387   void
   388   SetEnabled(bool aEnabled);
   390   // Called by Get().
   391   static BluetoothService*
   392   Create();
   394   typedef nsClassHashtable<nsStringHashKey, BluetoothSignalObserverList >
   395   BluetoothSignalObserverTable;
   397   BluetoothSignalObserverTable mBluetoothSignalObserverTable;
   399   bool mEnabled;
   401 private:
   402   bool mAdapterAddedReceived;
   403 };
   405 END_BLUETOOTH_NAMESPACE
   407 #endif

mercurial