-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathgps_interface.h
More file actions
67 lines (52 loc) · 1.96 KB
/
gps_interface.h
File metadata and controls
67 lines (52 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <sys/types.h>
#include <termios.h>
#include "gps.h"
#define MAX_CLIENTS 5
#define MAX_FAILS 10
enum SERIAL_MODE { USB, LOG_FILE, UDP_PORT, SERVER, CLIENT };
typedef struct gps_server_ctx gps_server_ctx;
typedef struct gps_serial_port {
enum SERIAL_MODE type;
char *port;
int open;
int fd;
uint64_t timestamp;
uint64_t first_log_timestamp;
uint64_t first_real_timestamp;
off_t read_offset;
gps_server_ctx *ctx;
} gps_serial_port;
typedef struct gps_server_ctx {
gps_serial_port serial_port;
int server_socket_fd;
int client_sockets[MAX_CLIENTS];
int client_fails[MAX_CLIENTS];
int client_count;
volatile sig_atomic_t should_exit;
pthread_mutex_t clients_mutex;
pthread_t acceptThread;
} gps_server_ctx;
void gps_interface_initialize(gps_serial_port *);
int gps_interface_read(gps_serial_port *port, void *__buf, size_t __nbytes);
int gps_interface_open_serial_port(gps_serial_port *new_serial_port,
const char *port, speed_t speed);
int gps_interface_open_log_file(gps_serial_port *new_serial_port,
const char *filename);
int gps_interface_open_udp(gps_serial_port *new_serial_port,
const char *ip_and_port);
int gps_interface_open_server(gps_serial_port *new_serial_port,
const char *tcp_port, const char *port,
speed_t speed);
int gps_interface_open_client(gps_serial_port *new_serial_port,
const char *ip_address, const char *tcp_port);
void gps_interface_close(gps_serial_port *serial_port);
void gps_interface_shutdown_server(gps_serial_port *serial_port);
gps_protocol_type gps_interface_get_line(
gps_serial_port *port,
unsigned char start_sequence[GPS_MAX_START_SEQUENCE_SIZE],
int *start_sequence_size, char line[GPS_MAX_LINE_SIZE], int *line_size,
bool sleep);