1*4d7e907cSAndroid Build Coastguard Worker // 2*4d7e907cSAndroid Build Coastguard Worker // Copyright 2016 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker // 4*4d7e907cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 5*4d7e907cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 6*4d7e907cSAndroid Build Coastguard Worker // You may obtain a copy of the License at 7*4d7e907cSAndroid Build Coastguard Worker // 8*4d7e907cSAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 9*4d7e907cSAndroid Build Coastguard Worker // 10*4d7e907cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 11*4d7e907cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 12*4d7e907cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4d7e907cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 14*4d7e907cSAndroid Build Coastguard Worker // limitations under the License. 15*4d7e907cSAndroid Build Coastguard Worker // 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard Worker #pragma once 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Worker #include <fcntl.h> 20*4d7e907cSAndroid Build Coastguard Worker 21*4d7e907cSAndroid Build Coastguard Worker #include <cstdint> 22*4d7e907cSAndroid Build Coastguard Worker #include <string> 23*4d7e907cSAndroid Build Coastguard Worker #include <vector> 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard Worker namespace android { 26*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 27*4d7e907cSAndroid Build Coastguard Worker namespace bluetooth { 28*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 { 29*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 30*4d7e907cSAndroid Build Coastguard Worker 31*4d7e907cSAndroid Build Coastguard Worker // The property key stores the storage location of Bluetooth Device Address 32*4d7e907cSAndroid Build Coastguard Worker static constexpr char PROPERTY_BT_BDADDR_PATH[] = "ro.bt.bdaddr_path"; 33*4d7e907cSAndroid Build Coastguard Worker 34*4d7e907cSAndroid Build Coastguard Worker // Check for a legacy address stored as a property. 35*4d7e907cSAndroid Build Coastguard Worker static constexpr char PERSIST_BDADDR_PROPERTY[] = 36*4d7e907cSAndroid Build Coastguard Worker "persist.service.bdroid.bdaddr"; 37*4d7e907cSAndroid Build Coastguard Worker 38*4d7e907cSAndroid Build Coastguard Worker // If there is no valid bdaddr available from PROPERTY_BT_BDADDR_PATH and there 39*4d7e907cSAndroid Build Coastguard Worker // is no available persistent bdaddr available from PERSIST_BDADDR_PROPERTY, 40*4d7e907cSAndroid Build Coastguard Worker // use a factory set address. 41*4d7e907cSAndroid Build Coastguard Worker static constexpr char FACTORY_BDADDR_PROPERTY[] = "ro.boot.btmacaddr"; 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Worker // Encapsulate handling for Bluetooth Addresses: 44*4d7e907cSAndroid Build Coastguard Worker class BluetoothAddress { 45*4d7e907cSAndroid Build Coastguard Worker public: 46*4d7e907cSAndroid Build Coastguard Worker // Conversion constants 47*4d7e907cSAndroid Build Coastguard Worker static constexpr size_t kStringLength = sizeof("XX:XX:XX:XX:XX:XX") - 1; 48*4d7e907cSAndroid Build Coastguard Worker static constexpr size_t kBytes = (kStringLength + 1) / 3; 49*4d7e907cSAndroid Build Coastguard Worker 50*4d7e907cSAndroid Build Coastguard Worker static void bytes_to_string(const uint8_t* addr, char* addr_str); 51*4d7e907cSAndroid Build Coastguard Worker 52*4d7e907cSAndroid Build Coastguard Worker static bool string_to_bytes(const char* addr_str, uint8_t* addr); 53*4d7e907cSAndroid Build Coastguard Worker 54*4d7e907cSAndroid Build Coastguard Worker static bool get_local_address(uint8_t* addr); 55*4d7e907cSAndroid Build Coastguard Worker }; 56*4d7e907cSAndroid Build Coastguard Worker 57*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 58*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0 59*4d7e907cSAndroid Build Coastguard Worker } // namespace bluetooth 60*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 61*4d7e907cSAndroid Build Coastguard Worker } // namespace android 62