13cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati/****************************************************************************** 23cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * 33cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * Copyright (C) 2014 Google, Inc. 43cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * 53cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * Licensed under the Apache License, Version 2.0 (the "License"); 63cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * you may not use this file except in compliance with the License. 73cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * You may obtain a copy of the License at: 83cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * 93cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * http://www.apache.org/licenses/LICENSE-2.0 103cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * 113cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * Unless required by applicable law or agreed to in writing, software 123cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * distributed under the License is distributed on an "AS IS" BASIS, 133cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 143cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * See the License for the specific language governing permissions and 153cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * limitations under the License. 163cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati * 173cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati ******************************************************************************/ 183cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 193cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati#include "base.h" 203cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati#include "support/adapter.h" 213cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati#include "support/callbacks.h" 223cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati#include "support/property.h" 233cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 243cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_enable_disable() { 253cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati int error; 263cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 273cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->enable(), adapter_state_changed); 283cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error enabling Bluetooth: %d", error); 293cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_state() == BT_STATE_ON, "Adapter did not turn on."); 303cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 313cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->disable(), adapter_state_changed); 323cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error disabling Bluetooth: %d", error); 333cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_state() == BT_STATE_OFF, "Adapter did not turn off."); 343cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 353cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 363cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 373cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 383cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_repeated_enable_disable() { 393cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati for (int i = 0; i < 10; ++i) { 403cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati if (!adapter_enable_disable()) { 413cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return false; 423cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati } 433cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati } 443cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 453cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 463cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 473cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_set_name() { 483cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati int error; 493cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati bt_property_t *name = property_new_name("set_name"); 503cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 513cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->set_adapter_property(name), adapter_properties); 523cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error setting device name."); 533cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_property_count() == 1, "Expected 1 adapter property change, found %d instead.", adapter_get_property_count()); 543cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_property(BT_PROPERTY_BDNAME), "The Bluetooth name property did not change."); 553cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(property_equals(adapter_get_property(BT_PROPERTY_BDNAME), name), "Bluetooth name '%s' does not match test value", property_extract_name(adapter_get_property(BT_PROPERTY_BDNAME))); 563cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 573cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati property_free(name); 583cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 593cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 603cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 613cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 623cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_get_name() { 633cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati int error; 643cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati bt_property_t *name = property_new_name("get_name"); 653cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 663cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(bt_interface->set_adapter_property(name), adapter_properties); 673cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->get_adapter_property(BT_PROPERTY_BDNAME), adapter_properties); 683cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error getting device name."); 693cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_property_count() == 1, "Expected 1 adapter property change, found %d instead.", adapter_get_property_count()); 703cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_property(BT_PROPERTY_BDNAME), "The Bluetooth name property did not change."); 713cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(property_equals(adapter_get_property(BT_PROPERTY_BDNAME), name), "Bluetooth name '%s' does not match test value", property_extract_name(adapter_get_property(BT_PROPERTY_BDNAME))); 723cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 733cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati property_free(name); 743cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 753cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 763cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 773cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_start_discovery() { 783cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati int error; 793cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 803cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->start_discovery(), discovery_state_changed); 813cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error calling start_discovery: %d", error); 823cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_discovery_state() == BT_DISCOVERY_STARTED, "Unable to start discovery."); 833cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 843cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 853cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 863cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 873cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavatibool adapter_cancel_discovery() { 883cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati int error; 893cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 903cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(bt_interface->start_discovery(), discovery_state_changed); 913cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati CALL_AND_WAIT(error = bt_interface->cancel_discovery(), discovery_state_changed); 923cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(error == BT_STATUS_SUCCESS, "Error calling cancel_discovery: %d", error); 933cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati TASSERT(adapter_get_discovery_state() == BT_DISCOVERY_STOPPED, "Unable to stop discovery."); 943cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati 953cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati return true; 963cf59ef3b216adffbe7e49297e6e3e8c56c4e9a0Sharvil Nanavati} 97