35 data.push_back(value & 0xFFFF);
40 data.push_back((value & 0xFFFF0000) >> 16);
41 data.push_back(value & 0xFFFF);
46 data.push_back(value & 0xFFFF);
47 data.push_back((value & 0xFFFF0000) >> 16);
51 data.push_back((value & 0xFFFF000000000000) >> 48);
52 data.push_back((value & 0xFFFF00000000) >> 32);
53 data.push_back((value & 0xFFFF0000) >> 16);
54 data.push_back(value & 0xFFFF);
58 data.push_back(value & 0xFFFF);
59 data.push_back((value & 0xFFFF0000) >> 16);
60 data.push_back((value & 0xFFFF00000000) >> 32);
61 data.push_back((value & 0xFFFF000000000000) >> 48);
64 ESP_LOGE(TAG,
"Invalid data type for modbus number to payload conversion: %d",
static_cast<uint16_t
>(value_type));
75 if (
static_cast<size_t>(offset) > data.size()) {
76 ESP_LOGE(TAG,
"not enough data for value type=%u offset=%u size=%zu",
static_cast<unsigned int>(sensor_value_type),
77 static_cast<unsigned int>(offset), data.size());
81 const size_t required_size = required_payload_size(sensor_value_type);
82 if (required_size == 0) {
86 if (data.size() - offset < required_size) {
87 ESP_LOGE(TAG,
"not enough data for value type=%u offset=%u size=%zu required=%zu",
88 static_cast<unsigned int>(sensor_value_type),
static_cast<unsigned int>(offset), data.size(),
93 switch (sensor_value_type) {
105 value =
static_cast<uint32_t>(value & 0xFFFF) << 16 | (value & 0xFFFF0000) >> 16;
118 uint32_t sign_bit = (value & 0x8000) << 16;
120 static_cast<int32_t
>(((value & 0x7FFF) << 16 | (value & 0xFFFF0000) >> 16) | sign_bit), bitmask);
131 value = (tmp << 48) | (tmp >> 48) | ((tmp & 0xFFFF0000) << 16) | ((tmp >> 16) & 0xFFFF0000);