bluetooth_input_client.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROMEOS_DBUS_BLUETOOTH_INPUT_CLIENT_H_ 6#define CHROMEOS_DBUS_BLUETOOTH_INPUT_CLIENT_H_ 7 8#include <string> 9 10#include "base/callback.h" 11#include "base/observer_list.h" 12#include "base/values.h" 13#include "chromeos/chromeos_export.h" 14#include "chromeos/dbus/bluetooth_property.h" 15#include "chromeos/dbus/dbus_client_implementation_type.h" 16#include "dbus/object_path.h" 17 18namespace dbus { 19class Bus; 20} // namespace dbus 21 22namespace chromeos { 23 24class BluetoothAdapterClient; 25 26// BluetoothInputClient is used to communicate with the Input interface 27// of a bluetooth device, rather than the generic device interface. Input 28// devices are those conforming to the Bluetooth SIG HID (Human Interface 29// Device) Profile such as keyboards, mice, trackpads and joysticks. 30class CHROMEOS_EXPORT BluetoothInputClient { 31 public: 32 // Structure of properties associated with bluetooth input devices. 33 struct Properties : public BluetoothPropertySet { 34 // Indicates that the device is currently connected. Read-only. 35 dbus::Property<bool> connected; 36 37 Properties(dbus::ObjectProxy* object_proxy, 38 const PropertyChangedCallback& callback); 39 virtual ~Properties(); 40 }; 41 42 // Interface for observing changes from a bluetooth input device. 43 class Observer { 44 public: 45 virtual ~Observer() {} 46 47 // Called when the device with object path |object_path| has a 48 // change in value of the input property named |property_name|. 49 virtual void InputPropertyChanged(const dbus::ObjectPath& object_path, 50 const std::string& property_name) {} 51 }; 52 53 virtual ~BluetoothInputClient(); 54 55 // Adds and removes observers for events on all bluetooth input 56 // devices. Check the |object_path| parameter of observer methods to 57 // determine which device is issuing the event. 58 virtual void AddObserver(Observer* observer) = 0; 59 virtual void RemoveObserver(Observer* observer) = 0; 60 61 // Obtain the input properties for the device with object path |object_path|, 62 // any values should be copied if needed. 63 virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0; 64 65 // The InputCallback is used for input device methods that only return to 66 // indicate success. It receives two arguments, the |object_path| of the 67 // input device the call was made on and |success| which indicates whether 68 // or not the request succeeded. 69 typedef base::Callback<void(const dbus::ObjectPath&, bool)> InputCallback; 70 71 // The ConnectCallback is used for the Connect input device method to 72 // indicate success. It receives a single argument, the |object_path| of 73 // the input device the call was made on. 74 typedef base::Callback<void(const dbus::ObjectPath&)> ConnectCallback; 75 76 // The ConnectErrorCallback is used for the Connect input device method 77 // to indicate failure. It receives three arguments, the |object_path| of 78 // the input device the call was made on, the name of the error in 79 // |error_name| and an optional message in |error_message|. 80 typedef base::Callback<void(const dbus::ObjectPath& object_path, 81 const std::string& error_name, 82 const std::string& error_message)> 83 ConnectErrorCallback; 84 85 // Connects the input subsystem to the device with object path 86 // |object_path|, which should already be a known device on the adapter. 87 virtual void Connect(const dbus::ObjectPath& object_path, 88 const ConnectCallback& callback, 89 const ConnectErrorCallback& error_callback) = 0; 90 91 // Disconnects the input subsystem from the device with object path 92 // |object_path| without terminating the low-level ACL connection, 93 virtual void Disconnect(const dbus::ObjectPath& object_path, 94 const InputCallback& callback) = 0; 95 96 // Creates the instance. 97 static BluetoothInputClient* Create(DBusClientImplementationType type, 98 dbus::Bus* bus, 99 BluetoothAdapterClient* adapter_client); 100 101 // Constants used to indicate exceptional error conditions. 102 static const char kNoResponseError[]; 103 104 protected: 105 BluetoothInputClient(); 106 107 private: 108 DISALLOW_COPY_AND_ASSIGN(BluetoothInputClient); 109}; 110 111} // namespace chromeos 112 113#endif // CHROMEOS_DBUS_BLUETOOTH_INPUT_CLIENT_H_ 114