1 // 2 // Copyright 2015 Google, Inc. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at: 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #include "service/hal/fake_bluetooth_interface.h" 18 19 namespace bluetooth { 20 namespace hal { 21 22 namespace { 23 24 FakeBluetoothInterface::Manager g_hal_manager; 25 26 int FakeHALEnable(bool start_restricted) { 27 return g_hal_manager.enable_succeed ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 28 } 29 30 int FakeHALDisable() { 31 return g_hal_manager.disable_succeed ? BT_STATUS_SUCCESS : BT_STATUS_FAIL; 32 } 33 34 int FakeHALGetAdapterProperties() { return BT_STATUS_SUCCESS; } 35 36 int FakeHALSetAdapterProperty(const bt_property_t* /* property */) { 37 LOG(INFO) << __func__; 38 return (g_hal_manager.set_property_succeed ? BT_STATUS_SUCCESS 39 : BT_STATUS_FAIL); 40 } 41 42 bt_interface_t fake_bt_iface = { 43 sizeof(bt_interface_t), 44 nullptr, /* init */ 45 FakeHALEnable, 46 FakeHALDisable, 47 nullptr, /* cleanup */ 48 FakeHALGetAdapterProperties, 49 nullptr, /* get_adapter_property */ 50 FakeHALSetAdapterProperty, 51 nullptr, /* get_remote_device_properties */ 52 nullptr, /* get_remote_device_property */ 53 nullptr, /* set_remote_device_property */ 54 nullptr, /* get_remote_service_record */ 55 nullptr, /* get_remote_services */ 56 nullptr, /* start_discovery */ 57 nullptr, /* cancel_discovery */ 58 nullptr, /* create_bond */ 59 nullptr, /* create_bond_out_of_band */ 60 nullptr, /* remove_bond */ 61 nullptr, /* cancel_bond */ 62 nullptr, /* get_connection_state */ 63 nullptr, /* pin_reply */ 64 nullptr, /* ssp_reply */ 65 nullptr, /* get_profile_interface */ 66 nullptr, /* dut_mode_configure */ 67 nullptr, /* dut_more_send */ 68 nullptr, /* le_test_mode */ 69 nullptr, /* set_os_callouts */ 70 nullptr, /* read_energy_info */ 71 nullptr, /* dump */ 72 nullptr, /* dumpMetrics */ 73 nullptr, /* config clear */ 74 nullptr, /* interop_database_clear */ 75 nullptr, /* interop_database_add */ 76 nullptr, /* get_avrcp_service */ 77 }; 78 79 } // namespace 80 81 // static 82 FakeBluetoothInterface::Manager* FakeBluetoothInterface::GetManager() { 83 return &g_hal_manager; 84 } 85 86 FakeBluetoothInterface::Manager::Manager() 87 : enable_succeed(false), 88 disable_succeed(false), 89 set_property_succeed(false) {} 90 91 void FakeBluetoothInterface::NotifyAdapterStateChanged(bt_state_t state) { 92 for (auto& observer : observers_) { 93 observer.AdapterStateChangedCallback(state); 94 } 95 } 96 97 void FakeBluetoothInterface::NotifyAdapterPropertiesChanged( 98 int num_properties, bt_property_t* properties) { 99 for (auto& observer : observers_) { 100 observer.AdapterPropertiesCallback(BT_STATUS_SUCCESS, num_properties, 101 properties); 102 } 103 } 104 105 void FakeBluetoothInterface::NotifyAdapterNamePropertyChanged( 106 const std::string& name) { 107 bt_bdname_t hal_name; 108 strncpy(reinterpret_cast<char*>(hal_name.name), name.c_str(), 109 std::min(sizeof(hal_name) - 1, name.length())); 110 reinterpret_cast<char*>(hal_name.name)[name.length()] = '\0'; 111 112 bt_property_t property; 113 property.len = sizeof(hal_name); 114 property.val = &hal_name; 115 property.type = BT_PROPERTY_BDNAME; 116 117 NotifyAdapterPropertiesChanged(1, &property); 118 } 119 120 void FakeBluetoothInterface::NotifyAdapterAddressPropertyChanged( 121 const RawAddress* address) { 122 bt_property_t property; 123 property.len = RawAddress::kLength; 124 property.val = (void*)address->address; 125 property.type = BT_PROPERTY_BDADDR; 126 127 NotifyAdapterPropertiesChanged(1, &property); 128 } 129 130 void FakeBluetoothInterface::NotifyAdapterLocalLeFeaturesPropertyChanged( 131 const bt_local_le_features_t* features) { 132 bt_property_t property; 133 property.len = sizeof(*features); 134 property.val = (void*)features; 135 property.type = BT_PROPERTY_LOCAL_LE_FEATURES; 136 137 NotifyAdapterPropertiesChanged(1, &property); 138 } 139 140 void FakeBluetoothInterface::NotifyAclStateChangedCallback( 141 bt_status_t status, const RawAddress& remote_bdaddr, bt_acl_state_t state) { 142 for (auto& observer : observers_) { 143 observer.AclStateChangedCallback(status, remote_bdaddr, state); 144 } 145 } 146 147 void FakeBluetoothInterface::AddObserver(Observer* observer) { 148 observers_.AddObserver(observer); 149 } 150 151 void FakeBluetoothInterface::RemoveObserver(Observer* observer) { 152 observers_.RemoveObserver(observer); 153 } 154 155 const bt_interface_t* FakeBluetoothInterface::GetHALInterface() const { 156 return &fake_bt_iface; 157 } 158 159 bt_callbacks_t* FakeBluetoothInterface::GetHALCallbacks() const { 160 return nullptr; 161 } 162 163 } // namespace hal 164 } // namespace bluetooth 165