gecko-dev/dom/bluetooth2/bluedroid/BluetoothA2dpManager.h
Thomas Zimmermann bdd661ae16 Bug 1061124: Implement Bluetooth A2DP notifications (under bluetooth2/), r=btian
This patch adds Bluetooth A2DP and AVRCP notifications to Gecko's
A2DP manager. The code has been taken from taken from the callback
implementations, and adapted to run on the main thread. No further
cleanups have been applied.
2014-09-05 10:00:40 +02:00

158 lines
5.1 KiB
C++

/* -*- 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_bluetootha2dpmanager_h__
#define mozilla_dom_bluetooth_bluetootha2dpmanager_h__
#include "BluetoothCommon.h"
#include "BluetoothInterface.h"
#include "BluetoothProfileController.h"
#include "BluetoothProfileManagerBase.h"
BEGIN_BLUETOOTH_NAMESPACE
class BluetoothA2dpManager : public BluetoothProfileManagerBase
, public BluetoothA2dpNotificationHandler
, public BluetoothAvrcpNotificationHandler
{
public:
BT_DECL_PROFILE_MGR_BASE
virtual void GetName(nsACString& aName)
{
aName.AssignLiteral("A2DP");
}
enum SinkState {
SINK_UNKNOWN,
SINK_DISCONNECTED,
SINK_CONNECTING,
SINK_CONNECTED,
SINK_PLAYING,
};
static BluetoothA2dpManager* Get();
static void InitA2dpInterface(BluetoothProfileResultHandler* aRes);
static void DeinitA2dpInterface(BluetoothProfileResultHandler* aRes);
virtual ~BluetoothA2dpManager();
void OnConnectError();
void OnDisconnectError();
// A2DP-specific functions
void HandleSinkPropertyChanged(const BluetoothSignal& aSignal);
// AVRCP-specific functions
void SetAvrcpConnected(bool aConnected);
bool IsAvrcpConnected();
void UpdateMetaData(const nsAString& aTitle,
const nsAString& aArtist,
const nsAString& aAlbum,
uint64_t aMediaNumber,
uint64_t aTotalMediaCount,
uint32_t aDuration);
void UpdatePlayStatus(uint32_t aDuration,
uint32_t aPosition,
ControlPlayStatus aPlayStatus);
void UpdateRegisterNotification(BluetoothAvrcpEvent aEvent, uint32_t aParam);
void GetAlbum(nsAString& aAlbum);
uint32_t GetDuration();
ControlPlayStatus GetPlayStatus();
uint32_t GetPosition();
uint64_t GetMediaNumber();
uint64_t GetTotalMediaNumber();
void GetTitle(nsAString& aTitle);
void GetArtist(nsAString& aArtist);
private:
BluetoothA2dpManager();
void ResetA2dp();
void ResetAvrcp();
void HandleShutdown();
void NotifyConnectionStatusChanged();
void ConnectionStateNotification(BluetoothA2dpConnectionState aState,
const nsAString& aBdAddr) MOZ_OVERRIDE;
void AudioStateNotification(BluetoothA2dpAudioState aState,
const nsAString& aBdAddr) MOZ_OVERRIDE;
void GetPlayStatusNotification() MOZ_OVERRIDE;
void ListPlayerAppAttrNotification() MOZ_OVERRIDE;
void ListPlayerAppValuesNotification(
BluetoothAvrcpPlayerAttribute aAttrId) MOZ_OVERRIDE;
void GetPlayerAppValueNotification(
uint8_t aNumAttrs,
const BluetoothAvrcpPlayerAttribute* aAttrs) MOZ_OVERRIDE;
void GetPlayerAppAttrsTextNotification(
uint8_t aNumAttrs,
const BluetoothAvrcpPlayerAttribute* aAttrs) MOZ_OVERRIDE;
void GetPlayerAppValuesTextNotification(
uint8_t aAttrId, uint8_t aNumVals, const uint8_t* aValues) MOZ_OVERRIDE;
void SetPlayerAppValueNotification(
const BluetoothAvrcpPlayerSettings& aSettings) MOZ_OVERRIDE;
void GetElementAttrNotification(
uint8_t aNumAttrs,
const BluetoothAvrcpMediaAttribute* aAttrs) MOZ_OVERRIDE;
void RegisterNotificationNotification(
BluetoothAvrcpEvent aEvent, uint32_t aParam) MOZ_OVERRIDE;
void RemoteFeatureNotification(
const nsAString& aBdAddr, unsigned long aFeatures) MOZ_OVERRIDE;
void VolumeChangeNotification(uint8_t aVolume, uint8_t aCType) MOZ_OVERRIDE;
void PassthroughCmdNotification(int aId, int aKeyState) MOZ_OVERRIDE;
nsString mDeviceAddress;
nsRefPtr<BluetoothProfileController> mController;
// A2DP data member
bool mA2dpConnected;
SinkState mSinkState;
// AVRCP data member
bool mAvrcpConnected;
nsString mAlbum;
nsString mArtist;
nsString mTitle;
uint32_t mDuration;
uint64_t mMediaNumber;
uint64_t mTotalMediaCount;
uint32_t mPosition;
/*
* mPlaybackInterval specifies the time interval (in seconds) at which
* the change in playback position will be notified. If the song is being
* forwarded / rewound, a notification will be received whenever the playback
* position will change by this value.
*/
uint32_t mPlaybackInterval;
ControlPlayStatus mPlayStatus;
/*
* Notification types: 1. INTERIM 2. CHANGED
* 1. The initial response to this Notify command shall be an INTERIM
* response with current status.
* 2. The following response shall be a CHANGED response with the updated
* status.
* mPlayStatusChangedNotifType, mTrackChangedNotifType,
* mPlayPosChangedNotifType represents current RegisterNotification
* notification type.
*/
BluetoothAvrcpNotification mPlayStatusChangedNotifyType;
BluetoothAvrcpNotification mTrackChangedNotifyType;
BluetoothAvrcpNotification mPlayPosChangedNotifyType;
};
END_BLUETOOTH_NAMESPACE
#endif