diff --git a/conf/firmwares/subsystems/fixedwing/gps_ublox_hitl.makefile b/conf/firmwares/subsystems/fixedwing/gps_ublox_hitl.makefile
deleted file mode 100644
index 7f5c495896..0000000000
--- a/conf/firmwares/subsystems/fixedwing/gps_ublox_hitl.makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# UBlox Hardware In The Loop
-
-
-ap.CFLAGS += -DUSE_GPS -DUBX
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_ubx.h\"
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_ubx.c $(SRC_SUBSYSTEMS)/gps.c
diff --git a/conf/firmwares/subsystems/rotorcraft/gps_ardrone2.makefile b/conf/firmwares/subsystems/rotorcraft/gps_ardrone2.makefile
deleted file mode 100644
index e95dc52874..0000000000
--- a/conf/firmwares/subsystems/rotorcraft/gps_ardrone2.makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# ARDrone 2 Flightrecorder GPS unit
-
-GPS_LED ?= none
-
-ap.CFLAGS += -DUSE_GPS -DUSE_GPS_ARDRONE2
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_ardrone2.h\"
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_ardrone2.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
diff --git a/conf/firmwares/subsystems/rotorcraft/gps_sim_hitl.makefile b/conf/firmwares/subsystems/rotorcraft/gps_sim_hitl.makefile
index c49b7239c6..f0146d2901 100644
--- a/conf/firmwares/subsystems/rotorcraft/gps_sim_hitl.makefile
+++ b/conf/firmwares/subsystems/rotorcraft/gps_sim_hitl.makefile
@@ -1,16 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-ap.CFLAGS += -DUSE_GPS -DHITL
-ap.CFLAGS += -DGPS_TYPE=\"subsystems/gps/gps_sim_hitl.h\"
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_hitl.c
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-nps.CFLAGS += -DUSE_GPS
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
-nps.CFLAGS += -DGPS_TYPE=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
+$(error Error: replace by )
diff --git a/conf/firmwares/subsystems/rotorcraft/gps_sirf.makefile b/conf/firmwares/subsystems/rotorcraft/gps_sirf.makefile
index 238c74afca..b48a3d6eec 100644
--- a/conf/firmwares/subsystems/rotorcraft/gps_sirf.makefile
+++ b/conf/firmwares/subsystems/rotorcraft/gps_sirf.makefile
@@ -1,40 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# Sirf GPS unit
-
-GPS_LED ?= none
-SIRF_GPS_PORT ?= $(GPS_PORT)
-SIRF_GPS_BAUD ?= $(GPS_BAUD)
-
-SIRF_GPS_PORT_LOWER=$(shell echo $(SIRF_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS
-ap.CFLAGS += -DSIRF_GPS_LINK=$(SIRF_GPS_PORT_LOWER)
-ap.CFLAGS += -DUSE_$(SIRF_GPS_PORT)
-ap.CFLAGS += -D$(SIRF_GPS_PORT)_BAUD=$(SIRF_GPS_BAUD)
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), sirf))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_sirf.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_sirf
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sirf.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_sirf
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sirf.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sirf.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps sirf subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/rotorcraft/gps_ublox_utm.makefile b/conf/firmwares/subsystems/rotorcraft/gps_ublox_utm.makefile
deleted file mode 100644
index cf640ed0d8..0000000000
--- a/conf/firmwares/subsystems/rotorcraft/gps_ublox_utm.makefile
+++ /dev/null
@@ -1 +0,0 @@
-$(error The gps_ublox_utm subsystem does not exist for the rotorcraft firmware, please replace with in your airframe file.)
diff --git a/conf/firmwares/subsystems/rotorcraft/gps_udp.makefile b/conf/firmwares/subsystems/rotorcraft/gps_udp.makefile
index 0714dce4b1..be8db05458 100644
--- a/conf/firmwares/subsystems/rotorcraft/gps_udp.makefile
+++ b/conf/firmwares/subsystems/rotorcraft/gps_udp.makefile
@@ -1,30 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-GPS_LED ?= none
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), udp))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_udp.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_udp
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_udp.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_udp
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_udp.h\"
-endif
-
-ap.CFLAGS += -DUSE_GPS
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_udp.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
+$(error Error: The gps udp subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/shared/gps_furuno.makefile b/conf/firmwares/subsystems/shared/gps_furuno.makefile
index 0545d34208..b161586dd0 100644
--- a/conf/firmwares/subsystems/shared/gps_furuno.makefile
+++ b/conf/firmwares/subsystems/shared/gps_furuno.makefile
@@ -1,47 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# Furuno NMEA GPS unit
-
-GPS_LED ?= none
-FURUNO_GPS_PORT ?= $(GPS_PORT)
-FURUNO_GPS_BAUD ?= $(GPS_BAUD)
-
-FURUNO_GPS_PORT_LOWER=$(shell echo $(FURUNO_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS
-ap.CFLAGS += -DNMEA_GPS_LINK=$(FURUNO_GPS_PORT_LOWER)
-ap.CFLAGS += -DUSE_$(FURUNO_GPS_PORT)
-ap.CFLAGS += -D$(FURUNO_GPS_PORT)_BAUD=$(FURUNO_GPS_BAUD)
-ap.CFLAGS += -DNMEA_PARSE_PROP
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), nmea furuno))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_nmea
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_nmea
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_nmea.c $(SRC_SUBSYSTEMS)/gps/gps_furuno.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-sim.CFLAGS += -DUSE_GPS
-sim.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim.h\"
-sim.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim.c
-sim.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps furuno subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/shared/gps_mediatek_diy.makefile b/conf/firmwares/subsystems/shared/gps_mediatek_diy.makefile
index d3df31cd5e..161c8a363c 100644
--- a/conf/firmwares/subsystems/shared/gps_mediatek_diy.makefile
+++ b/conf/firmwares/subsystems/shared/gps_mediatek_diy.makefile
@@ -1,45 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# Mediatek MT3329, DIYDrones V1.4/1.6 protocol
-
-GPS_LED ?= none
-MTK_GPS_PORT ?= $(GPS_PORT)
-MTK_GPS_BAUD ?= $(GPS_BAUD)
-
-MTK_GPS_PORT_LOWER=$(shell echo $(MTK_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS -DGPS_CONFIGURE
-ap.CFLAGS += -DMTK_GPS_LINK=$(MTK_GPS_PORT_LOWER)
-ap.CFLAGS += -DUSE_$(MTK_GPS_PORT)
-ap.CFLAGS += -D$(MTK_GPS_PORT)_BAUD=$(MTK_GPS_BAUD)
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), mtk mediatek))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_mtk.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_mtk
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_mtk.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_mtk
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_mtk.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_mtk.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-sim.CFLAGS += -DUSE_GPS
-sim.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim.h\"
-sim.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim.c
-sim.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps mediatek subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/shared/gps_nmea.makefile b/conf/firmwares/subsystems/shared/gps_nmea.makefile
index 235260b62e..e7744d5c32 100644
--- a/conf/firmwares/subsystems/shared/gps_nmea.makefile
+++ b/conf/firmwares/subsystems/shared/gps_nmea.makefile
@@ -1,45 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# NMEA GPS unit
-
-GPS_LED ?= none
-NMEA_GPS_PORT ?= $(GPS_PORT)
-NMEA_GPS_BAUD ?= $(GPS_BAUD)
-
-NMEA_GPS_PORT_LOWER=$(shell echo $(NMEA_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS
-ap.CFLAGS += -DNMEA_GPS_LINK=$(NMEA_GPS_PORT_LOWER)
-ap.CFLAGS += -DUSE_$(NMEA_GPS_PORT)
-ap.CFLAGS += -D$(NMEA_GPS_PORT)_BAUD=$(NMEA_GPS_BAUD)
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), nmea))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_nmea
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_nmea
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_nmea.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-sim.CFLAGS += -DUSE_GPS
-sim.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim.h\"
-sim.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim.c
-sim.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps nmea subsystem has been converted to a module, replace with )
diff --git a/conf/firmwares/subsystems/shared/gps_piksi.makefile b/conf/firmwares/subsystems/shared/gps_piksi.makefile
index 2ec494afb2..4d1356025d 100644
--- a/conf/firmwares/subsystems/shared/gps_piksi.makefile
+++ b/conf/firmwares/subsystems/shared/gps_piksi.makefile
@@ -1,48 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-# Swift-Nav Piksi RTK module
-
-GPS_LED ?= none
-PIKSI_GPS_PORT ?= $(GPS_PORT)
-PIKSI_GPS_BAUD ?= $(GPS_BAUD)
-
-PIKSI_GPS_PORT_LOWER=$(shell echo $(PIKSI_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS
-ap.CFLAGS += -DUSE_$(PIKSI_GPS_PORT) -D$(PIKSI_GPS_PORT)_BAUD=B115200
-ap.CFLAGS += -DPIKSI_GPS_LINK=$(PIKSI_GPS_PORT_LOWER)
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), piksi))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_piksi.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_piksi
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_piksi.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_piksi
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_piksi.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_piksi.c
-
-# libsbp
-ap.CFLAGS += -I$(PAPARAZZI_SRC)/sw/ext/libsbp/c/include
-ap.srcs += $(PAPARAZZI_SRC)/sw/ext/libsbp/c/src/sbp.c $(PAPARAZZI_SRC)/sw/ext/libsbp/c/src/edc.c
-
-sim.CFLAGS += -DUSE_GPS
-sim.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim.h\"
-sim.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim.c
-sim.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps piksi subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/shared/gps_skytraq.makefile b/conf/firmwares/subsystems/shared/gps_skytraq.makefile
index 2c5bb00884..8cc0c8abd6 100644
--- a/conf/firmwares/subsystems/shared/gps_skytraq.makefile
+++ b/conf/firmwares/subsystems/shared/gps_skytraq.makefile
@@ -1,43 +1 @@
-# Hey Emacs, this is a -*- makefile -*-
-
-GPS_LED ?= none
-SKYTRAQ_GPS_PORT ?= $(GPS_PORT)
-SKYTRAQ_GPS_BAUD ?= $(GPS_BAUD)
-
-SKYTRAQ_GPS_PORT_LOWER=$(shell echo $(SKYTRAQ_GPS_PORT) | tr A-Z a-z)
-
-ap.CFLAGS += -DUSE_GPS
-ap.CFLAGS += -DSKYTRAQ_GPS_LINK=$(SKYTRAQ_SKYTRAQ_GPS_PORT_LOWER)
-ap.CFLAGS += -DUSE_$(SKYTRAQ_GPS_PORT)
-ap.CFLAGS += -D$(SKYTRAQ_GPS_PORT)_BAUD=$(SKYTRAQ_GPS_BAUD)
-
-ifneq ($(GPS_LED),none)
- ap.CFLAGS += -DGPS_LED=$(GPS_LED)
-endif
-
-ifdef SECONDARY_GPS
-ifneq (,$(findstring $(SECONDARY_GPS), skytraq))
-# this is the secondary GPS
-ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
-ap.CFLAGS += -DSECONDARY_GPS=gps_skytraq
-else
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
-ap.CFLAGS += -DPRIMARY_GPS=gps_skytraq
-endif
-else
-# plain old single GPS usage
-ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
-endif
-
-ap.srcs += $(SRC_SUBSYSTEMS)/gps/gps_skytraq.c
-ap.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-sim.CFLAGS += -DUSE_GPS
-sim.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim.h\"
-sim.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim.c
-sim.srcs += $(SRC_SUBSYSTEMS)/gps.c
-
-nps.CFLAGS += -DUSE_GPS
-nps.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sim_nps.h\"
-nps.srcs += $(SRC_SUBSYSTEMS)/gps/gps_sim_nps.c
-nps.srcs += $(SRC_SUBSYSTEMS)/gps.c
+$(error Error: The gps skytraq subsystem has been converted to a module, replace by )
diff --git a/conf/firmwares/subsystems/fixedwing/gps_ublox_utm.makefile b/conf/firmwares/subsystems/shared/gps_ublox_utm.makefile
similarity index 100%
rename from conf/firmwares/subsystems/fixedwing/gps_ublox_utm.makefile
rename to conf/firmwares/subsystems/shared/gps_ublox_utm.makefile
diff --git a/conf/modules/gps_furuno.xml b/conf/modules/gps_furuno.xml
new file mode 100644
index 0000000000..5592a9802a
--- /dev/null
+++ b/conf/modules/gps_furuno.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ Furuno GPS (UART)
+ Driver for Furuno GPS modules parsing the NMEA protocol with Furuno extensions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), nmea furuno))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_nmea
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_nmea
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_mediatek_diy.xml b/conf/modules/gps_mediatek_diy.xml
new file mode 100644
index 0000000000..52f3188998
--- /dev/null
+++ b/conf/modules/gps_mediatek_diy.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Mediatek MT3329 GPS (UART)
+ Driver for Mediatek MT3329 GPS, DIYDrones V1.4/1.6 protocol
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), mtk mediatek))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_mtk.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_mtk
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_mtk.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_mtk
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_mtk.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_nmea.xml b/conf/modules/gps_nmea.xml
new file mode 100644
index 0000000000..ca4a48275d
--- /dev/null
+++ b/conf/modules/gps_nmea.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ NMEA GPS (UART)
+ Driver for GPS modules using the NMEA protocol.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), nmea))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_nmea
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_nmea
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_nmea.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_piksi.xml b/conf/modules/gps_piksi.xml
new file mode 100644
index 0000000000..1be2b2393d
--- /dev/null
+++ b/conf/modules/gps_piksi.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ Swift-Nav Piksi RTK GPS.
+ Driver for Swift-Nav Piksi RTK GPS connected via UART.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), piksi))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_piksi.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_piksi
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_piksi.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_piksi
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_piksi.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_sirf.xml b/conf/modules/gps_sirf.xml
new file mode 100644
index 0000000000..8984e986d4
--- /dev/null
+++ b/conf/modules/gps_sirf.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Sirf GPS (UART)
+ Driver for GPS modules using the Sirf binary protocol.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), sirf))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_sirf.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_sirf
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sirf.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_sirf
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_sirf.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_skytraq.xml b/conf/modules/gps_skytraq.xml
new file mode 100644
index 0000000000..f9fc54bcc1
--- /dev/null
+++ b/conf/modules/gps_skytraq.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Skytraq GPS (UART)
+ Driver for GPS modules using the Skytraq binary protocol.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), skytraq))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_skytraq
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_skytraq
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_skytraq.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conf/modules/gps_ublox.xml b/conf/modules/gps_ublox.xml
index 887f886b29..81214a6d97 100644
--- a/conf/modules/gps_ublox.xml
+++ b/conf/modules/gps_ublox.xml
@@ -6,8 +6,8 @@
U-blox GPS (UART)
Driver for u-blox GPS modules parsing the binary UBX protocol.
-
-
+
+
@@ -16,18 +16,19 @@
-
+
+
+
+
-
-
ifdef SECONDARY_GPS
diff --git a/conf/modules/gps_udp.xml b/conf/modules/gps_udp.xml
new file mode 100644
index 0000000000..ae019deab9
--- /dev/null
+++ b/conf/modules/gps_udp.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+ GPS via UDP.
+ Read GPS messages from UDP port 7000.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ifdef SECONDARY_GPS
+ ifneq (,$(findstring $(SECONDARY_GPS), udp))
+ # this is the secondary GPS
+ ap.CFLAGS += -DGPS_SECONDARY_TYPE_H=\"subsystems/gps/gps_udp.h\"
+ ap.CFLAGS += -DSECONDARY_GPS=gps_udp
+ else
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_udp.h\"
+ ap.CFLAGS += -DPRIMARY_GPS=gps_udp
+ endif
+ else
+ # plain old single GPS usage
+ ap.CFLAGS += -DGPS_TYPE_H=\"subsystems/gps/gps_udp.h\"
+ endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+