summaryrefslogtreecommitdiff
path: root/src/venus_api.h
blob: 75acc7ae08d44e83bc9c35385c0230dcbf629a3e (plain)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

#include <termios.h>

#ifndef __VENUS_API_H
#define __VENUS_API_H

#define NMEA_SENTENCE_MAX 82

enum venus_message_id {
	ID_NONE                = 0x00,
	ID_SYSTEM_RESTART      = 0x01,
	ID_QUERY_SW_VERSION    = 0x02,
	ID_QUERY_SW_CRC        = 0x03,
	ID_FACTORY_DEFAULTS    = 0x04,
	ID_CONF_SERIAL         = 0x05,
	ID_CONF_NMEA           = 0x08,
	ID_CONF_FORMAT         = 0x09,
	ID_GET_EPHEMERIS       = 0x30,
	ID_SET_EPHEMERIS       = 0x31,
	ID_SW_VERSION          = 0x80,
	ID_SW_CRC              = 0x81,
	ID_ACK                 = 0x83,
	ID_NACK                = 0x84,
	ID_EPHEMERIS_DATA      = 0xB1,
};

enum venus_message_type {
	MSG_TYPE_NONE    = 0,
	MSG_TYPE_NMEA    = 1,
	MSG_TYPE_BINARY  = 2,
};

enum venus_sw_type {
	SW_TYPE_RESERVED    = 0,
	SW_TYPE_SYSTEM      = 1,
};

enum venus_update_attr {
	UPDATE_ATTR_SRAM          = 0,
	UPDATE_ATTR_SRAM_FLASH    = 1,
};

enum venus_start_mode {
	SYSTEM_RESET_NO_CHANGE    = 0,
	SYSTEM_RESET_HOT          = 1,
	SYSTEM_RESET_WARM         = 2,
	SYSTEM_RESET_COLD         = 3,
	SYSTEM_RESET_TEST_MODE    = 4,
};

enum venus_com_port {
	VENUS_COM1 = 0,
};

enum venus_baud_rate {
	VENUS_4800    = 0,
	VENUS_9600    = 1,
	VENUS_19200   = 2,
	VENUS_38400   = 3,
	VENUS_57600   = 4,
	VENUS_115200  = 5,
};

enum venus_factory_defaults_type {
	FACTORY_DEFAULTS_RESERVED   = 0,
	FACTORY_DEFAULTS_REBOOT     = 1,
};

struct baud_map {
	speed_t baud;
	speed_t value;
};

struct venus_msg {
	uint8_t *data;
	uint16_t len;
};

speed_t value_to_baud(speed_t value);
speed_t baud_to_venus(speed_t baud);
void venus_msg_data_free(struct venus_msg *msg);
void venus_msg_free(struct venus_msg *msg);

uint8_t venus_checksum(void *data, uint16_t len);
int venus_write_msg(int fd, struct venus_msg *msg);
int venus_read_msg(int fd, struct venus_msg *msg);
int venus_read_ack(int fd);
int venus_write_msg_read_ack(int fd, struct venus_msg *msg);

ssize_t venus_read_nmea_sentence(int fd, void *buf, size_t count);
int venus_system_restart(int fd, uint8_t mode, time_t utc, int16_t latitude,
			int16_t longitude, int16_t altitude);
int venus_factory_defaults(int fd, uint8_t type);
int venus_conf_serial(int fd, uint8_t com, uint8_t baud, uint8_t attr);
int venus_conf_format(int fd, uint8_t type, uint8_t attr);
int venus_query_sw_version(int fd, uint8_t type, struct venus_msg *msg);
int venus_conf_nmea(int fd, uint8_t gga, uint8_t gsa, uint8_t gsv, uint8_t gll,
			uint8_t rmc, uint8_t vtg, uint8_t zda, uint8_t attr);
int venus_tty_configure(int fd, speed_t baud_rate);

int venus_close(int fd);
int venus_open(const char *dev, speed_t baud_rate);

#endif /* ~__VENUS_API_H */