#pragma once #include #include #include #include "selfdrive/boardd/panda.h" enum sos_restore_response : int { unknown = 0, failed = 1, restored = 2, no_backup = 3, error = -1 }; class Pigeon { public: static Pigeon* connect(Panda * p); static Pigeon* connect(const char * tty); virtual ~Pigeon(){}; void init(); void stop(); bool wait_for_ack(); bool wait_for_ack(const std::string &ack, const std::string &nack, int timeout_ms = 1000); bool send_with_ack(const std::string &cmd); sos_restore_response wait_for_backup_restore_status(int timeout_ms = 1000); virtual void set_baud(int baud) = 0; virtual void send(const std::string &s) = 0; virtual std::string receive() = 0; virtual void set_power(bool power) = 0; }; class PandaPigeon : public Pigeon { Panda * panda = NULL; public: ~PandaPigeon(); void connect(Panda * p); void set_baud(int baud); void send(const std::string &s); std::string receive(); void set_power(bool power); }; class TTYPigeon : public Pigeon { int pigeon_tty_fd = -1; struct termios pigeon_tty; public: ~TTYPigeon(); void connect(const char* tty); void set_baud(int baud); void send(const std::string &s); std::string receive(); void set_power(bool power); };