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();
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 |