// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_ #define DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_ #include #include "base/callback.h" #include "base/memory/ref_counted.h" namespace device { class BluetoothDevice; class BluetoothProfileMac; class BluetoothSocket; class MockBluetoothProfile; // BluetoothProfile represents an implementation of either a client or server // of a particular specified profile (aka service or protocol in other // standards). // // Profile implementations are created by registering them through the static // BluetoothProfile::Register() method and are always identified by a UUID // which in any method may be specified in the short or long form. // // The lifecycle of BluetoothProfile instances is managed by the implementation // but they are guaranteed to exist once provided to a Register() callback until // the instance's Unregister() method is called, so others may hold on to // pointers to them. class BluetoothProfile { public: // Options used to register a BluetoothProfile object. struct Options { Options(); ~Options(); // Human readable name of the Profile, e.g. "Health Device". // Exported in the adapter's SDP or GATT tables where relevant. std::string name; // RFCOMM channel used by the profile. // Exported in the adapter's SDP or GATT tables where relevant. uint16 channel; // L2CAP PSM number. // Exported in the adapter's SDP or GATT tables where relevant. uint16 psm; // Specifies whether pairing (and encryption) is required to be able to // connect. Defaults to false. bool require_authentication; // Specifies whether user authorization is required to be able to connect. // Defaults to false. bool require_authorization; // Specifies whether this profile will be automatically connected if any // other profile of a device conects to the host. // Defaults to false. bool auto_connect; // Implemented version of the profile. // Exported in the adapter's SDP or GATT tables where relevant. uint16 version; // Implemented feature set of the profile. // Exported in the adapter's SDP or GATT tables where relevant. uint16 features; }; // Register an implementation of the profile with UUID |uuid| and // additional details specified in |options|. The corresponding profile // object will be created and returned by |callback|. If the profile cannot // be registered, NULL will be passed. // // This pointer is not owned by the receiver, but will not be freed unless // its Unregister() method is called. typedef base::Callback ProfileCallback; static void Register(const std::string& uuid, const Options& options, const ProfileCallback& callback); // Unregister the profile. This deletes the profile object so, once called, // any pointers to the profile should be discarded. virtual void Unregister() = 0; // Set the connection callback for the profile to |callback|, any successful // connection initiated by BluetoothDevice::ConnectToProfile() or incoming // connections from devices, will have a BluetoothSocket created and passed // to this callback. // // The socket will be closed when all references are released; none of the // BluetoothProfile, or BluetoothAdapter or BluetoothDevice objects are // guaranteed to hold a reference so this may outlive all of them. typedef base::Callback)> ConnectionCallback; virtual void SetConnectionCallback(const ConnectionCallback& callback) = 0; protected: BluetoothProfile(); virtual ~BluetoothProfile(); }; } // namespace device #endif // DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_