/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_bluetooth_bluetoothdbusservice_h__ #define mozilla_dom_bluetooth_bluetoothdbusservice_h__ #include "mozilla/Attributes.h" #include "BluetoothCommon.h" #include "mozilla/ipc/RawDBusConnection.h" #include "BluetoothService.h" class DBusMessage; BEGIN_BLUETOOTH_NAMESPACE /** * BluetoothDBusService is the implementation of BluetoothService for DBus on * linux/android/B2G. Function comments are in BluetoothService.h */ class BluetoothDBusService : public BluetoothService { public: BluetoothDBusService(); ~BluetoothDBusService(); bool IsReady(); virtual nsresult StartInternal() MOZ_OVERRIDE; virtual nsresult StopInternal() MOZ_OVERRIDE; virtual bool IsEnabledInternal() MOZ_OVERRIDE; virtual nsresult GetDefaultAdapterPathInternal( BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult GetConnectedDevicePropertiesInternal(uint16_t aServiceUuid, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult GetPairedDevicePropertiesInternal( const nsTArray& aDeviceAddresses, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult StartDiscoveryInternal(BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult StopDiscoveryInternal(BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult SetProperty(BluetoothObjectType aType, const BluetoothNamedValue& aValue, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual bool GetDevicePath(const nsAString& aAdapterPath, const nsAString& aDeviceAddress, nsAString& aDevicePath) MOZ_OVERRIDE; static bool AddReservedServicesInternal(const nsTArray& aServices, nsTArray& aServiceHandlesContainer); virtual nsresult GetScoSocket(const nsAString& aObjectPath, bool aAuth, bool aEncrypt, mozilla::ipc::UnixSocketConsumer* aConsumer) MOZ_OVERRIDE; virtual nsresult GetServiceChannel(const nsAString& aDeviceAddress, const nsAString& aServiceUuid, BluetoothProfileManagerBase* aManager) MOZ_OVERRIDE; virtual bool UpdateSdpRecords(const nsAString& aDeviceAddress, BluetoothProfileManagerBase* aManager) MOZ_OVERRIDE; virtual nsresult CreatePairedDeviceInternal(const nsAString& aDeviceAddress, int aTimeout, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual nsresult RemoveDeviceInternal(const nsAString& aDeviceObjectPath, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual bool SetPinCodeInternal(const nsAString& aDeviceAddress, const nsAString& aPinCode, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual bool SetPasskeyInternal(const nsAString& aDeviceAddress, uint32_t aPasskey, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual bool SetPairingConfirmationInternal(const nsAString& aDeviceAddress, bool aConfirm, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void Connect(const nsAString& aDeviceAddress, uint32_t aCod, uint16_t aServiceUuid, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual bool IsConnected(uint16_t aServiceUuid) MOZ_OVERRIDE; virtual void Disconnect(const nsAString& aDeviceAddress, uint16_t aServiceUuid, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void SendFile(const nsAString& aDeviceAddress, BlobParent* aBlobParent, BlobChild* aBlobChild, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void StopSendingFile(const nsAString& aDeviceAddress, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void ConfirmReceivingFile(const nsAString& aDeviceAddress, bool aConfirm, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void ConnectSco(BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void DisconnectSco(BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void IsScoConnected(BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; #ifdef MOZ_B2G_RIL virtual void AnswerWaitingCall(BluetoothReplyRunnable* aRunnable); virtual void IgnoreWaitingCall(BluetoothReplyRunnable* aRunnable); virtual void ToggleCalls(BluetoothReplyRunnable* aRunnable); #endif virtual void SendMetaData(const nsAString& aTitle, const nsAString& aArtist, const nsAString& aAlbum, int64_t aMediaNumber, int64_t aTotalMediaCount, int64_t aDuration, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void SendPlayStatus(int64_t aDuration, int64_t aPosition, const nsAString& aPlayStatus, BluetoothReplyRunnable* aRunnable) MOZ_OVERRIDE; virtual void UpdatePlayStatus(uint32_t aDuration, uint32_t aPosition, ControlPlayStatus aPlayStatus) MOZ_OVERRIDE; virtual nsresult SendSinkMessage(const nsAString& aDeviceAddresses, const nsAString& aMessage) MOZ_OVERRIDE; virtual nsresult SendInputMessage(const nsAString& aDeviceAddresses, const nsAString& aMessage) MOZ_OVERRIDE; private: /** * For DBus Control method of "UpdateNotification", event id should be * specified as following: * (Please see specification of AVRCP 1.3, Table 5.28 for more details.) */ enum ControlEventId { EVENT_PLAYBACK_STATUS_CHANGED = 0x01, EVENT_TRACK_CHANGED = 0x02, EVENT_TRACK_REACHED_END = 0x03, EVENT_TRACK_REACHED_START = 0x04, EVENT_PLAYBACK_POS_CHANGED = 0x05, EVENT_BATT_STATUS_CHANGED = 0x06, EVENT_SYSTEM_STATUS_CHANGED = 0x07, EVENT_PLAYER_APPLICATION_SETTING_CHANGED = 0x08, EVENT_UNKNOWN }; nsresult SendGetPropertyMessage(const nsAString& aPath, const char* aInterface, void (*aCB)(DBusMessage *, void *), BluetoothReplyRunnable* aRunnable); nsresult SendDiscoveryMessage(const char* aMessageName, BluetoothReplyRunnable* aRunnable); nsresult SendSetPropertyMessage(const char* aInterface, const BluetoothNamedValue& aValue, BluetoothReplyRunnable* aRunnable); void UpdateNotification(ControlEventId aEventId, uint64_t aData); nsresult SendAsyncDBusMessage(const nsAString& aObjectPath, const char* aInterface, const nsAString& aMessage, mozilla::ipc::DBusReplyCallback aCallback); nsRefPtr mConnection; }; END_BLUETOOTH_NAMESPACE #endif