60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
#ifndef TELEOP_TRANSPORT_H
|
|
#define TELEOP_TRANSPORT_H
|
|
|
|
#include <netinet/in.h>
|
|
#include <pthread.h>
|
|
|
|
#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 */
|