Home | History | Annotate | Download | only in bluetooth
      1 // Copyright (c) 2013 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 DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_
      6 #define DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_
      7 
      8 #include <string>
      9 
     10 #include "base/callback.h"
     11 #include "base/memory/ref_counted.h"
     12 
     13 namespace device {
     14 
     15 class BluetoothDevice;
     16 class BluetoothProfileMac;
     17 class BluetoothSocket;
     18 class MockBluetoothProfile;
     19 
     20 // BluetoothProfile represents an implementation of either a client or server
     21 // of a particular specified profile (aka service or protocol in other
     22 // standards).
     23 //
     24 // Profile implementations are created by registering them through the static
     25 // BluetoothProfile::Register() method and are always identified by a UUID
     26 // which in any method may be specified in the short or long form.
     27 //
     28 // The lifecycle of BluetoothProfile instances is managed by the implementation
     29 // but they are guaranteed to exist once provided to a Register() callback until
     30 // the instance's Unregister() method is called, so others may hold on to
     31 // pointers to them.
     32 class BluetoothProfile {
     33  public:
     34   // Options used to register a BluetoothProfile object.
     35   struct Options {
     36     Options();
     37     ~Options();
     38 
     39     // Human readable name of the Profile, e.g. "Health Device".
     40     // Exported in the adapter's SDP or GATT tables where relevant.
     41     std::string name;
     42 
     43     // RFCOMM channel used by the profile.
     44     // Exported in the adapter's SDP or GATT tables where relevant.
     45     uint16 channel;
     46 
     47     // L2CAP PSM number.
     48     // Exported in the adapter's SDP or GATT tables where relevant.
     49     uint16 psm;
     50 
     51     // Specifies whether pairing (and encryption) is required to be able to
     52     // connect. Defaults to false.
     53     bool require_authentication;
     54 
     55     // Specifies whether user authorization is required to be able to connect.
     56     // Defaults to false.
     57     bool require_authorization;
     58 
     59     // Specifies whether this profile will be automatically connected if any
     60     // other profile of a device conects to the host.
     61     // Defaults to false.
     62     bool auto_connect;
     63 
     64     // Implemented version of the profile.
     65     // Exported in the adapter's SDP or GATT tables where relevant.
     66     uint16 version;
     67 
     68     // Implemented feature set of the profile.
     69     // Exported in the adapter's SDP or GATT tables where relevant.
     70     uint16 features;
     71   };
     72 
     73   // Register an implementation of the profile with UUID |uuid| and
     74   // additional details specified in |options|. The corresponding profile
     75   // object will be created and returned by |callback|. If the profile cannot
     76   // be registered, NULL will be passed.
     77   //
     78   // This pointer is not owned by the receiver, but will not be freed unless
     79   // its Unregister() method is called.
     80   typedef base::Callback<void(BluetoothProfile*)> ProfileCallback;
     81   static void Register(const std::string& uuid,
     82                        const Options& options,
     83                        const ProfileCallback& callback);
     84 
     85   // Unregister the profile. This deletes the profile object so, once called,
     86   // any pointers to the profile should be discarded.
     87   virtual void Unregister() = 0;
     88 
     89   // Set the connection callback for the profile to |callback|, any successful
     90   // connection initiated by BluetoothDevice::ConnectToProfile() or incoming
     91   // connections from devices, will have a BluetoothSocket created and passed
     92   // to this callback.
     93   //
     94   // The socket will be closed when all references are released; none of the
     95   // BluetoothProfile, or BluetoothAdapter or BluetoothDevice objects are
     96   // guaranteed to hold a reference so this may outlive all of them.
     97   typedef base::Callback<void(
     98       const BluetoothDevice*,
     99       scoped_refptr<BluetoothSocket>)> ConnectionCallback;
    100   virtual void SetConnectionCallback(const ConnectionCallback& callback) = 0;
    101 
    102  protected:
    103   BluetoothProfile();
    104   virtual ~BluetoothProfile();
    105 };
    106 
    107 }  // namespace device
    108 
    109 #endif  // DEVICE_BLUETOOTH_BLUETOOTH_PROFILE_H_
    110