/* -*- 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_bluetoothhfpmanager_h__ #define mozilla_dom_bluetooth_bluetoothhfpmanager_h__ #include "BluetoothCommon.h" #include "BluetoothRilListener.h" #include "mozilla/ipc/UnixSocket.h" #include "nsIObserver.h" BEGIN_BLUETOOTH_NAMESPACE class BluetoothReplyRunnable; class BluetoothHfpManagerObserver; class Call; /** * These costants are defined in 4.33.2 "AT Capabilities Re-Used from GSM 07.07 * and 3GPP 27.007" in Bluetooth hands-free profile 1.6 */ enum BluetoothCmeError { AG_FAILURE = 0, NO_CONNECTION_TO_PHONE = 1, OPERATION_NOT_ALLOWED = 3, OPERATION_NOT_SUPPORTED = 4, PIN_REQUIRED = 5, SIM_NOT_INSERTED = 10, SIM_PIN_REQUIRED = 11, SIM_PUK_REQUIRED = 12, SIM_FAILURE = 13, SIM_BUSY = 14, INCORRECT_PASSWORD = 16, SIM_PIN2_REQUIRED = 17, SIM_PUK2_REQUIRED = 18, MEMORY_FULL = 20, INVALID_INDEX = 21, MEMORY_FAILURE = 23, TEXT_STRING_TOO_LONG = 24, INVALID_CHARACTERS_IN_TEXT_STRING = 25, DIAL_STRING_TOO_LONG = 26, INVALID_CHARACTERS_IN_DIAL_STRING = 27, NO_NETWORK_SERVICE = 30, NETWORK_TIMEOUT = 31, NETWORK_NOT_ALLOWED = 32 }; class BluetoothHfpManager : public mozilla::ipc::UnixSocketConsumer { public: static BluetoothHfpManager* Get(); virtual void ReceiveSocketData(mozilla::ipc::UnixSocketRawData* aMessage) MOZ_OVERRIDE; bool Connect(const nsAString& aDeviceObjectPath, const bool aIsHandsfree, BluetoothReplyRunnable* aRunnable); void Disconnect(); bool Listen(); /** * @param aSend A boolean indicates whether we need to notify headset or not */ void HandleCallStateChanged(uint32_t aCallIndex, uint16_t aCallState, const nsAString& aNumber, bool aSend); private: class GetVolumeTask; friend class GetVolumeTask; friend class BluetoothHfpManagerObserver; BluetoothHfpManager(); ~BluetoothHfpManager(); nsresult HandleIccInfoChanged(); nsresult HandleShutdown(); nsresult HandleVolumeChanged(const nsAString& aData); nsresult HandleVoiceConnectionChanged(); bool Init(); void Cleanup(); void Reset(); void ResetCallArray(); void NotifyDialer(const nsAString& aCommand); void NotifySettings(); bool SendCommand(const char* aCommand, uint8_t aValue = 0); bool SendLine(const char* aMessage); void UpdateCIND(uint8_t aType, uint8_t aValue, bool aSend); virtual void OnConnectSuccess() MOZ_OVERRIDE; virtual void OnConnectError() MOZ_OVERRIDE; virtual void OnDisconnect() MOZ_OVERRIDE; int mCurrentVgs; int mCurrentVgm; uint32_t mCurrentCallIndex; bool mCCWA; bool mCLIP; bool mCMEE; bool mCMER; int mNetworkSelectionMode; bool mReceiveVgsFlag; nsString mDevicePath; nsString mMsisdn; nsString mOperatorName; enum mozilla::ipc::SocketConnectionStatus mSocketStatus; nsTArray mCurrentCallArray; nsAutoPtr mListener; nsRefPtr mRunnable; }; END_BLUETOOTH_NAMESPACE #endif