You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
#include "stdafx.h"
|
|
#include "J2534Connection.h"
|
|
#include "MessageTxTimeout.h"
|
|
|
|
MessageTxTimeoutable::MessageTxTimeoutable(
|
|
std::weak_ptr<J2534Connection> connection,
|
|
PASSTHRU_MSG& to_send
|
|
) : MessageTx(connection, to_send), recvCount(0) { };
|
|
|
|
void MessageTxTimeoutable::scheduleTimeout(std::chrono::microseconds timeoutus) {
|
|
if (auto conn_sp = this->connection.lock()) {
|
|
if (auto panda_dev_sp = conn_sp->getPandaDev()) {
|
|
auto timeoutobj = std::make_shared<MessageTxTimeout>(std::static_pointer_cast<MessageTxTimeoutable>(shared_from_this()), timeoutus);
|
|
panda_dev_sp->scheduleAction(std::static_pointer_cast<Action>(timeoutobj), TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
void MessageTxTimeoutable::scheduleTimeout(unsigned long timeoutus) {
|
|
scheduleTimeout(std::chrono::microseconds(timeoutus));
|
|
}
|
|
|
|
|
|
|
|
MessageTxTimeout::MessageTxTimeout(
|
|
std::shared_ptr<MessageTxTimeoutable> msg,
|
|
std::chrono::microseconds timeout
|
|
) : Action(msg->connection), msg(msg), lastRecvCount(msg->getRecvCount()) {
|
|
delay = timeout;
|
|
};
|
|
|
|
MessageTxTimeout::MessageTxTimeout(
|
|
std::shared_ptr<MessageTxTimeoutable> msg,
|
|
unsigned long timeout
|
|
) : MessageTxTimeout(msg, std::chrono::microseconds(timeout * 1000)) { };
|
|
|
|
void MessageTxTimeout::execute() {
|
|
if (auto msg_sp = this->msg.lock()) {
|
|
if (msg_sp->getRecvCount() == this->lastRecvCount) {
|
|
msg_sp->onTimeout();
|
|
}
|
|
}
|
|
}
|
|
|