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 */
|