#ifndef TELEOP_TRANSPORT_H #define TELEOP_TRANSPORT_H #include #include #include "protocol.h" #include "peer_kcp_client.h" #ifdef __cplusplus extern "C" { #endif #define DEFAULT_KCP_SERVER_ADDR "127.0.0.1:9002" #define DEFAULT_KCP_KEYBOARD_PEER_ID "ros-keyboard-ctrl" #define DEFAULT_KCP_GAMEPAD_PEER_ID "ros-gamepad-ctrl" #define DEFAULT_KCP_TARGET_PEER_ID "ros-bridge-ctrl" typedef enum teleop_transport_mode { TELEOP_TRANSPORT_MODE_UDP = 0, TELEOP_TRANSPORT_MODE_KCP = 1 } teleop_transport_mode_t; typedef struct teleop_transport_config { teleop_transport_mode_t mode; const char *udp_ip; int udp_port; const char *server_addr; const char *relay_via; const char *peer_id; const char *target_peer; } teleop_transport_config_t; typedef struct teleop_transport { teleop_transport_mode_t mode; int udp_fd; struct sockaddr_in udp_dest; kcp_client_t *kcp_client; pthread_t recv_thread; int recv_thread_started; volatile int stop_requested; char server_addr[OMNI_MAX_ADDR_TEXT]; char relay_via[OMNI_MAX_ADDR_TEXT]; char peer_id[OMNI_MAX_PEER_ID]; char target_peer[OMNI_MAX_PEER_ID]; } teleop_transport_t; int teleop_transport_parse_mode(const char *raw, teleop_transport_mode_t *out_mode); const char *teleop_transport_mode_name(teleop_transport_mode_t mode); int teleop_transport_open(teleop_transport_t *transport, const teleop_transport_config_t *config); int teleop_transport_send_twist(teleop_transport_t *transport, const twist_cmd_t *cmd); void teleop_transport_close(teleop_transport_t *transport); #ifdef __cplusplus } #endif #endif /* TELEOP_TRANSPORT_H */