Home | History | Annotate | Download | only in gatt
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2015 Google, Inc.
      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 
     19 #include "gatt/gatt_test.h"
     20 #include "adapter/bluetooth_test.h"
     21 #include "btcore/include/bdaddr.h"
     22 
     23 namespace bttest {
     24 
     25 void GattTest::SetUp() {
     26   gatt_client_interface_ = nullptr;
     27   gatt_server_interface_ = nullptr;
     28 
     29   client_interface_id_ = 0;
     30   server_interface_id_ = 0;
     31   service_handle_ = 0;
     32   characteristic_handle_ = 0;
     33   descriptor_handle_ = 0;
     34   status_ = 0;
     35 
     36   BluetoothTest::SetUp();
     37   ASSERT_EQ(bt_interface()->enable(false), BT_STATUS_SUCCESS);
     38   semaphore_wait(adapter_state_changed_callback_sem_);
     39   EXPECT_TRUE(GetState() == BT_STATE_ON);
     40 
     41   register_client_callback_sem_ = semaphore_new(0);
     42   scan_result_callback_sem_ = semaphore_new(0);
     43 
     44   register_server_callback_sem_ = semaphore_new(0);
     45   service_added_callback_sem_ = semaphore_new(0);
     46   service_stopped_callback_sem_ = semaphore_new(0);
     47   service_deleted_callback_sem_ = semaphore_new(0);
     48 
     49   bluetooth::hal::BluetoothGattInterface::Initialize();
     50   ASSERT_TRUE(bluetooth::hal::BluetoothGattInterface::IsInitialized());
     51   auto gatt_interface = bluetooth::hal::BluetoothGattInterface::Get();
     52   gatt_interface->AddClientObserver(this);
     53   gatt_interface->AddServerObserver(this);
     54 
     55   gatt_client_interface_ = gatt_interface->GetClientHALInterface();
     56   gatt_server_interface_ = gatt_interface->GetServerHALInterface();
     57 
     58   ASSERT_NE(nullptr, gatt_client_interface_);
     59   ASSERT_NE(nullptr, gatt_server_interface_);
     60 }
     61 
     62 void GattTest::TearDown() {
     63   gatt_client_interface_ = nullptr;
     64   gatt_server_interface_ = nullptr;
     65 
     66   semaphore_free(register_client_callback_sem_);
     67   semaphore_free(scan_result_callback_sem_);
     68 
     69   semaphore_free(register_server_callback_sem_);
     70   semaphore_free(service_added_callback_sem_);
     71   semaphore_free(service_stopped_callback_sem_);
     72   semaphore_free(service_deleted_callback_sem_);
     73 
     74   bluetooth::hal::BluetoothGattInterface::CleanUp();
     75 
     76   ASSERT_EQ(bt_interface()->disable(), BT_STATUS_SUCCESS);
     77   semaphore_wait(adapter_state_changed_callback_sem_);
     78   BluetoothTest::TearDown();
     79 }
     80 
     81 const BleScannerInterface* GattTest::gatt_scanner_interface() {
     82   return gatt_scanner_interface_;
     83 }
     84 
     85 const btgatt_client_interface_t* GattTest::gatt_client_interface() {
     86   return gatt_client_interface_;
     87 }
     88 
     89 const btgatt_server_interface_t* GattTest::gatt_server_interface() {
     90   return gatt_server_interface_;
     91 }
     92 
     93 void GattTest::RegisterClientCallback(
     94     bluetooth::hal::BluetoothGattInterface* /* unused */, int status,
     95     int clientIf, const bt_uuid_t& app_uuid) {
     96   status_ = status;
     97   client_interface_id_ = clientIf;
     98   semaphore_post(register_client_callback_sem_);
     99 }
    100 
    101 void GattTest::ScanResultCallback(
    102     bluetooth::hal::BluetoothGattInterface* /* unused */,
    103     const bt_bdaddr_t& bda, int rssi, std::vector<uint8_t> adv_data) {
    104   semaphore_post(scan_result_callback_sem_);
    105 }
    106 
    107 // GATT server callbacks
    108 void GattTest::RegisterServerCallback(
    109     bluetooth::hal::BluetoothGattInterface* /* unused */, int status,
    110     int server_if, const bt_uuid_t& uuid) {
    111   status_ = status;
    112   server_interface_id_ = server_if;
    113   semaphore_post(register_server_callback_sem_);
    114 }
    115 
    116 void GattTest::ServiceAddedCallback(
    117     bluetooth::hal::BluetoothGattInterface* /* unused */, int status,
    118     int server_if, std::vector<btgatt_db_element_t> service) {
    119   status_ = status;
    120   server_interface_id_ = server_if;
    121   service_handle_ = service[0].attribute_handle;
    122   semaphore_post(service_added_callback_sem_);
    123 }
    124 
    125 void GattTest::ServiceStoppedCallback(
    126     bluetooth::hal::BluetoothGattInterface* /* unused */, int status,
    127     int server_if, int srvc_handle) {
    128   status_ = status;
    129   server_interface_id_ = server_if;
    130   service_handle_ = srvc_handle;
    131   semaphore_post(service_stopped_callback_sem_);
    132 }
    133 
    134 void GattTest::ServiceDeletedCallback(
    135     bluetooth::hal::BluetoothGattInterface* /* unused */, int status,
    136     int server_if, int srvc_handle) {
    137   status_ = status;
    138   server_interface_id_ = server_if;
    139   service_handle_ = srvc_handle;
    140   semaphore_post(service_deleted_callback_sem_);
    141 }
    142 
    143 }  // bttest
    144