chromium/chromecast/device/bluetooth/bluetooth_util.h

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_DEVICE_BLUETOOTH_BLUETOOTH_UTIL_H_
#define CHROMECAST_DEVICE_BLUETOOTH_BLUETOOTH_UTIL_H_

#include <string>

#include "chromecast/public/bluetooth/bluetooth_types.h"

namespace chromecast {
namespace bluetooth {
namespace util {

// https://www.bluetooth.com/specifications/assigned-numbers/service-discovery
// BASE_UUID 00000000-0000-1000-8000-00805F9B34FB
extern const bluetooth_v2_shlib::Uuid kUuidBase;

// Format |addr| into the canonical text representation of a 48 bit mac address
// (1a:2b:3c:4e:5f:60). Hex digits are lower case.
std::string AddrToString(const bluetooth_v2_shlib::Addr& addr);

// Get the last byte of |addr| as a hex string. This is used for logging since
// full address is PII.
std::string AddrLastByteString(const bluetooth_v2_shlib::Addr& addr);

// Parse |str| as the canonical text representation of a 48 bit mac
// address (1a:2b:3c:4e:5f:60). Hex digits may be either upper or lower case.
//
// Returns true iff |str| is a valid mac address.
bool ParseAddr(const std::string& str, bluetooth_v2_shlib::Addr* addr);

// Format |uuid| as the canonical big endian text format (with lowercase hex
// digits).
// 123e4567-e89b-12d3-a456-426655440000
std::string UuidToString(const bluetooth_v2_shlib::Uuid& uuid);

// Parses UUIDs of the following formats:
// Canonical big endian: 123e4567-e89b-12d3-a456-426655440000
// Bluetooth SIG 16-bit UUID: FEA0
// Big endian no dashes: 123e4567e89b12d3a456426655440000
//
// Hex digits may be either upper or lower case.
// Returns true iff |str| is a UUID.
bool ParseUuid(const std::string& str, bluetooth_v2_shlib::Uuid* uuid);

// Return full UUID object corresponding to 16 bit uuid.
bluetooth_v2_shlib::Uuid UuidFromInt16(uint16_t uuid);

// Return full UUID object corresponding to 32 bit uuid.
bluetooth_v2_shlib::Uuid UuidFromInt32(uint32_t uuid);

}  // namespace util
}  // namespace bluetooth
}  // namespace chromecast

#endif  // CHROMECAST_DEVICE_BLUETOOTH_BLUETOOTH_UTIL_H_