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