aboutsummaryrefslogtreecommitdiff
path: root/apps/gps/mtk.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gps/mtk.h')
-rw-r--r--apps/gps/mtk.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/apps/gps/mtk.h b/apps/gps/mtk.h
new file mode 100644
index 000000000..1c65a5865
--- /dev/null
+++ b/apps/gps/mtk.h
@@ -0,0 +1,98 @@
+/*
+ * mtk.h
+ *
+ * Created on: Mar 6, 2012
+ * Author: thomasgubler
+ */
+
+#ifndef MTK_H_
+#define MTK_H_
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <pthread.h>
+
+//Definition for mtk custom mode
+#define MEDIATEK_REFRESH_RATE_4HZ "$PMTK220,250*29\r\n" //refresh rate - 4Hz - 250 milliseconds
+#define MEDIATEK_REFRESH_RATE_5HZ "$PMTK220,200*2C\r\n"
+#define MEDIATEK_REFRESH_RATE_10HZ "$PMTK220,100*2F\r\n" //refresh rate - 10Hz - 100 milliseconds
+#define MEDIATEK_FACTORY_RESET "$PMTK104*37\r\n" //clear current settings
+#define MEDIATEK_CUSTOM_BINARY_MODE "$PGCMD,16,0,0,0,0,0*6A\r\n"
+#define MEDIATEK_FULL_COLD_RESTART "$PMTK104*37\r\n"
+//#define NMEA_GGA_ENABLE "$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0*27\r\n" //Set GGA messages
+
+//definitions for watchdog
+#define MTK_WATCHDOG_CRITICAL_TIME_MICROSECONDS 2000000
+#define MTK_WATCHDOG_WAIT_TIME_MICROSECONDS 800000
+
+
+
+
+// ************
+// the structure of the binary packet
+
+typedef struct {
+ uint8_t payload; ///< Number of payload bytes
+ int32_t latitude; ///< Latitude in degrees * 10^7
+ int32_t longitude; ///< Longitude in degrees * 10^7
+ uint32_t msl_altitude; ///< MSL altitude in meters * 10^2
+ uint32_t ground_speed; ///< FIXME SPEC UNCLEAR
+ int32_t heading;
+ uint8_t satellites;
+ uint8_t fix_type;
+ uint32_t date;
+ uint32_t utc_time;
+ uint16_t hdop;
+ uint8_t ck_a;
+ uint8_t ck_b;
+} __attribute__((__packed__)) type_gps_bin_mtk_packet;
+
+typedef type_gps_bin_mtk_packet gps_bin_mtk_packet_t;
+
+enum MTK_DECODE_STATES {
+ MTK_DECODE_UNINIT = 0,
+ MTK_DECODE_GOT_CK_A = 1,
+ MTK_DECODE_GOT_CK_B = 2
+};
+
+typedef struct {
+ union {
+ uint16_t ck;
+ struct {
+ uint8_t ck_a;
+ uint8_t ck_b;
+ };
+ };
+ uint8_t decode_state;
+// bool new_data;
+// uint8_t fix;
+ bool print_errors;
+ int16_t rx_count;
+
+ uint64_t last_message_timestamp;
+} __attribute__((__packed__)) type_gps_bin_mtk_state;
+
+typedef type_gps_bin_mtk_state gps_bin_mtk_state_t;
+
+extern pthread_mutex_t *mtk_mutex;
+extern gps_bin_mtk_state_t *mtk_state;
+
+void mtk_decode_init(void);
+
+void mtk_checksum(uint8_t b, uint8_t *ck_a, uint8_t *ck_b);
+
+int mtk_parse(uint8_t b, char *gps_rx_buffer);
+
+int read_gps_mtk(int fd, char *gps_rx_buffer, int buffer_size);
+
+int configure_gps_mtk(int fd);
+
+void *mtk_loop(void *arg);
+
+void *mtk_watchdog_loop(void *arg);
+
+#endif /* MTK_H_ */