mirror of
https://github.com/esphome/esphome.git
synced 2025-11-14 05:45:48 +00:00
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
#include "bluetooth_proxy.h"
|
|
|
|
#ifdef USE_API
|
|
#include "esphome/components/api/api_pb2.h"
|
|
#include "esphome/components/api/api_server.h"
|
|
#endif // USE_API
|
|
#include "esphome/core/log.h"
|
|
|
|
#ifdef USE_ESP32
|
|
|
|
namespace esphome {
|
|
namespace bluetooth_proxy {
|
|
|
|
static const char *const TAG = "bluetooth_proxy";
|
|
|
|
bool BluetoothProxy::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
|
|
ESP_LOGV(TAG, "Proxying packet from %s - %s. RSSI: %d dB", device.get_name().c_str(), device.address_str().c_str(),
|
|
device.get_rssi());
|
|
this->send_api_packet_(device);
|
|
return true;
|
|
}
|
|
|
|
void BluetoothProxy::send_api_packet_(const esp32_ble_tracker::ESPBTDevice &device) {
|
|
#ifndef USE_API
|
|
return;
|
|
#else
|
|
api::BluetoothLEAdvertisementResponse resp;
|
|
resp.address = device.address_uint64();
|
|
if (!device.get_name().empty())
|
|
resp.name = device.get_name();
|
|
resp.rssi = device.get_rssi();
|
|
for (auto uuid : device.get_service_uuids()) {
|
|
resp.service_uuids.push_back(uuid.to_string());
|
|
}
|
|
for (auto &data : device.get_service_datas()) {
|
|
api::BluetoothServiceData service_data;
|
|
service_data.uuid = data.uuid.to_string();
|
|
for (auto d : data.data)
|
|
service_data.data.push_back(d);
|
|
resp.service_data.push_back(service_data);
|
|
}
|
|
for (auto &data : device.get_manufacturer_datas()) {
|
|
api::BluetoothServiceData manufacturer_data;
|
|
manufacturer_data.uuid = data.uuid.to_string();
|
|
for (auto d : data.data)
|
|
manufacturer_data.data.push_back(d);
|
|
resp.manufacturer_data.push_back(manufacturer_data);
|
|
}
|
|
api::global_api_server->send_bluetooth_le_advertisement(resp);
|
|
#endif
|
|
}
|
|
|
|
void BluetoothProxy::dump_config() { ESP_LOGCONFIG(TAG, "Bluetooth Proxy:"); }
|
|
|
|
} // namespace bluetooth_proxy
|
|
} // namespace esphome
|
|
|
|
#endif // USE_ESP32
|