mirror of
https://github.com/esphome/esphome.git
synced 2025-04-15 07:10:33 +01:00
Co-authored-by: Samuel Sieb <samuel@sieb.net> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
41 lines
1020 B
C++
41 lines
1020 B
C++
#include "one_wire.h"
|
|
|
|
namespace esphome {
|
|
namespace one_wire {
|
|
|
|
static const char *const TAG = "one_wire";
|
|
|
|
const std::string &OneWireDevice::get_address_name() {
|
|
if (this->address_name_.empty())
|
|
this->address_name_ = std::string("0x") + format_hex(this->address_);
|
|
return this->address_name_;
|
|
}
|
|
|
|
std::string OneWireDevice::unique_id() { return "dallas-" + str_lower_case(format_hex(this->address_)); }
|
|
|
|
bool OneWireDevice::send_command_(uint8_t cmd) {
|
|
if (!this->bus_->select(this->address_))
|
|
return false;
|
|
this->bus_->write8(cmd);
|
|
return true;
|
|
}
|
|
|
|
bool OneWireDevice::check_address_() {
|
|
if (this->address_ != 0)
|
|
return true;
|
|
auto devices = this->bus_->get_devices();
|
|
if (devices.empty()) {
|
|
ESP_LOGE(TAG, "No devices, can't auto-select address");
|
|
return false;
|
|
}
|
|
if (devices.size() > 1) {
|
|
ESP_LOGE(TAG, "More than one device, can't auto-select address");
|
|
return false;
|
|
}
|
|
this->address_ = devices[0];
|
|
return true;
|
|
}
|
|
|
|
} // namespace one_wire
|
|
} // namespace esphome
|