| #ifndef MPACT_SIM_UTIL_RENODE_SOCKET_CLI_H_ |
| #define MPACT_SIM_UTIL_RENODE_SOCKET_CLI_H_ |
| |
| #include <netinet/in.h> |
| #include <sys/socket.h> |
| #include <sys/types.h> |
| |
| #include <thread> // NOLINT |
| |
| #include "absl/functional/any_invocable.h" |
| #include "mpact/sim/generic/debug_command_shell_interface.h" |
| #include "mpact/sim/util/program_loader/elf_program_loader.h" |
| |
| // This file defines a class that instantiates a command line interface for |
| // the simulator connected to a bidirectional socket. This is used to provide |
| // a cli to the simulator when the simulator is being run within a library |
| // from ReNode. |
| |
| namespace mpact { |
| namespace sim { |
| namespace util { |
| namespace renode { |
| |
| using ::mpact::sim::generic::DebugCommandShellInterface; |
| using ::mpact::sim::util::ElfProgramLoader; |
| |
| class SocketCLI { |
| public: |
| // Constructor takes the port number to listen to, the top level CherIoT |
| // simulator interface, and a callback to notify when the connection status |
| // of the port/cli changes. |
| SocketCLI(int port, DebugCommandShellInterface& dbg_shell, |
| absl::AnyInvocable<void(bool)> is_connected_cb); |
| ~SocketCLI(); |
| |
| bool good() const { return good_; } |
| |
| private: |
| DebugCommandShellInterface& dbg_shell_; |
| std::thread cli_thread_; |
| bool good_ = false; |
| int server_socket_ = -1; |
| int cli_fd_ = -1; |
| absl::AnyInvocable<void(bool)> is_connected_cb_; |
| }; |
| |
| } // namespace renode |
| } // namespace util |
| } // namespace sim |
| } // namespace mpact |
| |
| #endif // MPACT_SIM_UTIL_RENODE_SOCKET_CLI_H_ |