Skip to content

Commit 9771ea8

Browse files
committed
allow read commands with length
1 parent 5cf41bd commit 9771ea8

7 files changed

+24
-21
lines changed

src/console.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,16 @@ void EMSESPShell::add_console_commands() {
222222
[=](Shell & shell __attribute__((unused)), const std::vector<std::string> & arguments) {
223223
uint8_t device_id = Helpers::hextoint(arguments.front().c_str());
224224
uint16_t type_id = Helpers::hextoint(arguments[1].c_str());
225-
EMSESP::set_read_id(type_id);
226-
if (arguments.size() == 3) {
225+
if (arguments.size() == 4) {
226+
uint16_t offset = Helpers::hextoint(arguments[2].c_str());
227+
uint8_t length = Helpers::hextoint(arguments.back().c_str());
228+
EMSESP::send_read_request(type_id, device_id, offset, length);
229+
} else if (arguments.size() == 3) {
227230
uint16_t offset = Helpers::hextoint(arguments.back().c_str());
228-
EMSESP::send_read_request(type_id, device_id, offset);
231+
EMSESP::send_read_request(type_id, device_id, offset, EMS_MAX_TELEGRAM_LENGTH);
229232
} else {
230-
EMSESP::send_read_request(type_id, device_id);
233+
// send with length to send immediatly and trigger publish read_id
234+
EMSESP::send_read_request(type_id, device_id, 0, EMS_MAX_TELEGRAM_LENGTH);
231235
}
232236
});
233237

src/emsdevice.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -800,8 +800,8 @@ void EMSdevice::write_command(const uint16_t type_id, const uint8_t offset, cons
800800
}
801801

802802
// send Tx read command to the device
803-
void EMSdevice::read_command(const uint16_t type_id) {
804-
EMSESP::send_read_request(type_id, device_id());
803+
void EMSdevice::read_command(const uint16_t type_id, const uint8_t offset, const uint8_t length) {
804+
EMSESP::send_read_request(type_id, device_id(), offset, length);
805805
}
806806

807807
} // namespace emsesp

src/emsdevice.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ class EMSdevice {
279279
void write_command(const uint16_t type_id, const uint8_t offset, uint8_t * message_data, const uint8_t message_length, const uint16_t validate_typeid);
280280
void write_command(const uint16_t type_id, const uint8_t offset, const uint8_t value, const uint16_t validate_typeid);
281281
void write_command(const uint16_t type_id, const uint8_t offset, const uint8_t value);
282-
void read_command(const uint16_t type_id);
282+
void read_command(const uint16_t type_id, uint8_t offset = 0, uint8_t length = 0);
283283

284284
void register_mqtt_topic(const std::string & topic, mqtt_subfunction_p f);
285285
void register_mqtt_cmd(const __FlashStringHelper * cmd, cmdfunction_p f, uint8_t flag = 0);

src/emsesp.cpp

+3-8
Original file line numberDiff line numberDiff line change
@@ -949,14 +949,9 @@ bool EMSESP::command_info(uint8_t device_type, JsonObject & json, const int8_t i
949949
return has_value;
950950
}
951951

952-
// send a read request, passing it into to the Tx Service, with offset
953-
void EMSESP::send_read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset) {
954-
txservice_.read_request(type_id, dest, offset);
955-
}
956-
957-
// send a read request, passing it into to the Tx Service, with no offset
958-
void EMSESP::send_read_request(const uint16_t type_id, const uint8_t dest) {
959-
txservice_.read_request(type_id, dest, 0); // 0 = no offset
952+
// send a read request, passing it into to the Tx Service, with optional offset and length
953+
void EMSESP::send_read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset, const uint8_t length) {
954+
txservice_.read_request(type_id, dest, offset, length);
960955
}
961956

962957
// sends write request

src/emsesp.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ class EMSESP {
9292
static bool process_telegram(std::shared_ptr<const Telegram> telegram);
9393
static std::string pretty_telegram(std::shared_ptr<const Telegram> telegram);
9494

95-
static void send_read_request(const uint16_t type_id, const uint8_t dest);
96-
static void send_read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset);
95+
static void send_read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset = 0, const uint8_t length = 0);
9796
static void send_write_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset, uint8_t * message_data, const uint8_t message_length, const uint16_t validate_typeid);
9897
static void send_write_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset, const uint8_t value);
9998
static void send_write_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset, const uint8_t value, const uint16_t validate_typeid);

src/telegram.cpp

+8-3
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ void TxService::add(uint8_t operation, const uint8_t * data, const uint8_t lengt
419419
}
420420

421421
// build header. src, dest and offset have fixed positions
422-
uint8_t src = data[0];
422+
uint8_t src = ems_bus_id(); // data[0]; we can only send data with own bus_id.
423423
uint8_t dest = data[1];
424424
uint8_t offset = data[3];
425425

@@ -485,11 +485,16 @@ void TxService::add(uint8_t operation, const uint8_t * data, const uint8_t lengt
485485
}
486486

487487
// send a Tx telegram to request data from an EMS device
488-
void TxService::read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset) {
488+
void TxService::read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset, const uint8_t length) {
489489
LOG_DEBUG(F("Tx read request to device 0x%02X for type ID 0x%02X"), dest, type_id);
490490

491491
uint8_t message_data[1] = {EMS_MAX_TELEGRAM_LENGTH}; // request all data, 32 bytes
492-
add(Telegram::Operation::TX_READ, dest, type_id, offset, message_data, 1, 0);
492+
// if length set, publish result and set telegram to front
493+
if (length) {
494+
message_data[0] = length;
495+
EMSESP::set_read_id(type_id);
496+
}
497+
add(Telegram::Operation::TX_READ, dest, type_id, offset, message_data, 1, 0, length != 0);
493498
}
494499

495500
// Send a raw telegram to the bus, telegram is a text string of hex values

src/telegram.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ class TxService : public EMSbus {
264264
void send();
265265
void add(const uint8_t operation, const uint8_t dest, const uint16_t type_id, const uint8_t offset, uint8_t * message_data, const uint8_t message_length, const uint16_t validateid, const bool front = false);
266266
void add(const uint8_t operation, const uint8_t * data, const uint8_t length, const uint16_t validateid, const bool front = false);
267-
void read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset = 0);
267+
void read_request(const uint16_t type_id, const uint8_t dest, const uint8_t offset = 0, const uint8_t length = 0);
268268
void send_raw(const char * telegram_data);
269269
void send_poll();
270270
void retry_tx(const uint8_t operation, const uint8_t * data, const uint8_t length);

0 commit comments

Comments
 (0)