7 static const char *
const TAG =
"one_wire";
9 static const uint8_t DALLAS_MODEL_DS18S20 = 0x10;
10 static const uint8_t DALLAS_MODEL_DS1822 = 0x22;
11 static const uint8_t DALLAS_MODEL_DS18B20 = 0x28;
12 static const uint8_t DALLAS_MODEL_DS1825 = 0x3B;
13 static const uint8_t DALLAS_MODEL_DS28EA00 = 0x42;
23 this->
write8(ONE_WIRE_ROM_SELECT);
41 this->
write8(ONE_WIRE_ROM_SEARCH);
46 auto *address8 =
reinterpret_cast<uint8_t *
>(&
address);
47 if (
crc8(address8, 7) != address8[7]) {
48 ESP_LOGW(TAG,
"Dallas device 0x%s has invalid CRC.",
format_hex(address).c_str());
61 case DALLAS_MODEL_DS18S20:
62 return LOG_STR(
"DS18S20");
63 case DALLAS_MODEL_DS1822:
64 return LOG_STR(
"DS1822");
65 case DALLAS_MODEL_DS18B20:
66 return LOG_STR(
"DS18B20");
67 case DALLAS_MODEL_DS1825:
68 return LOG_STR(
"DS1825");
69 case DALLAS_MODEL_DS28EA00:
70 return LOG_STR(
"DS28EA00");
72 return LOG_STR(
"Unknown");
78 ESP_LOGW(tag,
" Found no devices!");
80 ESP_LOGCONFIG(tag,
" Found devices:");
void skip()
Write a command to the bus that addresses all devices by skipping the ROM.
virtual void write64(uint64_t val)=0
Write a 64 bit unsigned integer to the bus. LSB first.
std::string format_hex(const uint8_t *data, size_t length)
Format the byte array data of length len in lowercased hex.
const uint8_t ONE_WIRE_ROM_SEARCH
virtual void reset_search()=0
Reset the device search.
virtual bool reset()=0
Reset the bus, should be done before all write operations.
bool select(uint64_t address)
Select a specific address on the bus for the following command.
void search()
Search for 1-Wire devices on the bus.
void dump_devices_(const char *tag)
log the found devices
const uint8_t ONE_WIRE_ROM_SELECT
const LogString * get_model_str(uint8_t model)
Get the description string for this model.
uint8_t crc8(const uint8_t *data, uint8_t len)
Calculate a CRC-8 checksum of data with size len.
const std::vector< uint64_t > & get_devices()
Return the list of found devices.
virtual void write8(uint8_t val)=0
Write a word to the bus. LSB first.
Helper class to disable interrupts.
virtual uint64_t search_int()=0
Search for a 1-Wire device on the bus. Returns 0 if all devices have been found.
Implementation of SPI Controller mode.
std::vector< uint64_t > devices_