• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright 2019 The Android Open Source Project
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 #pragma once
19 
20 #include <string>
21 
22 #include "hci/address.h"
23 #include "hci/class_of_device.h"
24 
25 namespace bluetooth::hci {
26 
27 /**
28  * Used to determine device functionality
29  */
30 enum DeviceType { DUAL, CLASSIC, LE };
31 
32 /**
33  * Represents a physical HCI device.
34  *
35  * <p>Contains all of the metadata required to represent a phycial device.
36  *
37  * <p>Devices should only be created and modified by HCI.
38  */
39 class Device {
40  public:
41   virtual ~Device() = default;
42 
GetAddress()43   Address GetAddress() const {
44     return address_;
45   }
46 
47   /**
48    * Returns 1 of 3 enum values for device's type (DUAL, CLASSIC, LE)
49    */
GetDeviceType()50   DeviceType GetDeviceType() const {
51     return device_type_;
52   }
53 
54   /**
55    * Unique identifier for bluetooth devices
56    *
57    * @return string representation of the uuid
58    */
GetUuid()59   std::string /** use UUID when ported */ GetUuid() {
60     return uid_;
61   }
62 
GetName()63   std::string GetName() {
64     return name_;
65   }
66 
GetClassOfDevice()67   ClassOfDevice GetClassOfDevice() {
68     return class_of_device_;
69   }
70 
IsBonded()71   bool IsBonded() {
72     return is_bonded_;
73   }
74 
75   bool operator==(const Device& rhs) const {
76     return this->uid_ == rhs.uid_ && this->address_ == rhs.address_ && this->device_type_ == rhs.device_type_ &&
77            this->is_bonded_ == rhs.is_bonded_;
78   }
79 
80  protected:
81   friend class DeviceDatabase;
82   friend class DualDevice;
83 
84   /**
85    * @param raw_address the address of the device
86    * @param device_type specify the type of device to create
87    */
Device(Address address,DeviceType device_type)88   Device(Address address, DeviceType device_type)
89       : address_(address), device_type_(device_type), uid_(generate_uid()), name_(""), class_of_device_() {}
90 
91   /**
92    * Called only by friend class DeviceDatabase
93    *
94    * @param address
95    */
SetAddress(Address address)96   virtual void SetAddress(Address address) {
97     address_ = address;
98     uid_ = generate_uid();
99   }
100 
101   /**
102    * Set the type of the device.
103    *
104    * <p>Needed by dual mode to arbitrarily set the valure to DUAL for corresponding LE/Classic devices
105    *
106    * @param type of device
107    */
SetDeviceType(DeviceType type)108   void SetDeviceType(DeviceType type) {
109     device_type_ = type;
110   }
111 
SetName(std::string & name)112   void SetName(std::string& name) {
113     name_ = name;
114   }
115 
SetClassOfDevice(ClassOfDevice class_of_device)116   void SetClassOfDevice(ClassOfDevice class_of_device) {
117     class_of_device_ = class_of_device;
118   }
119 
SetIsBonded(bool is_bonded)120   void SetIsBonded(bool is_bonded) {
121     is_bonded_ = is_bonded;
122   }
123 
124  private:
125   Address address_{Address::kEmpty};
126   DeviceType device_type_;
127   std::string uid_;
128   std::string name_;
129   ClassOfDevice class_of_device_;
130   bool is_bonded_ = false;
131 
132   /* Uses specific information about the device to calculate a UID */
133   std::string generate_uid();
134 };
135 
136 }  // namespace bluetooth::hci
137