diff --git a/Makefile.ac b/Makefile.ac
index 2bf66e0694..c8004b0fb1 100644
--- a/Makefile.ac
+++ b/Makefile.ac
@@ -66,6 +66,9 @@ demo:
$(SUPERVISION)
all_ac_h: $(AIRFRAME_H) $(MODULES_H) $(SETTINGS_H) $(TUNING_H) $(MAKEFILE_AC) $(PERIODIC_H)
+ @echo -e "TARGET: $(TARGET)\n" > $(ACINCLUDE)/$(TARGET)_srcs.list
+ @echo -e "CFLAGS: $($(TARGET).CFLAGS)\n\n" >> $(ACINCLUDE)/$(TARGET)_srcs.list
+ @echo "srcs: $($(TARGET).srcs)" >> $(ACINCLUDE)/$(TARGET)_srcs.list
radio_ac_h : $(RADIO_H) $(CONF_RADIO_CONTROL_PPM_H)
diff --git a/conf/airframes/AirborneCodeReorg/TinyFw.xml b/conf/airframes/AirborneCodeReorg/TinyFw.xml
index c2cb3c1c8c..d8b34339da 100644
--- a/conf/airframes/AirborneCodeReorg/TinyFw.xml
+++ b/conf/airframes/AirborneCodeReorg/TinyFw.xml
@@ -160,6 +160,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/conf/autopilot/fixedwing.makefile b/conf/autopilot/fixedwing.makefile
index 339f442db0..0059cae212 100644
--- a/conf/autopilot/fixedwing.makefile
+++ b/conf/autopilot/fixedwing.makefile
@@ -20,24 +20,28 @@ FIXEDWING_INC = -I$(SRC_FIXEDWING) -I$(SRC_FIXEDWING_ARCH)
include $(CFG_FIXEDWING)/autopilot.makefile
-ifeq ($(BOARD),tiny)
- ifeq ($(BOARD_VERSION),1.1)
- include $(CFG_FIXEDWING)/actuators_4015.makefile
- else
- ifeq ($(BOARD_VERSION),0.99)
+ifeq ($(ACTUATORS),)
+ ifeq ($(BOARD),tiny)
+ ifeq ($(BOARD_VERSION),1.1)
include $(CFG_FIXEDWING)/actuators_4015.makefile
else
- include $(CFG_FIXEDWING)/actuators_4017.makefile
+ ifeq ($(BOARD_VERSION),0.99)
+ include $(CFG_FIXEDWING)/actuators_4015.makefile
+ else
+ include $(CFG_FIXEDWING)/actuators_4017.makefile
+ endif
endif
endif
-endif
-
-ifeq ($(BOARD),twog)
+ ifeq ($(BOARD),twog)
include $(CFG_FIXEDWING)/actuators_4017.makefile
-endif
+ endif
-ifeq ($(BOARD),lisa_l)
+ ifeq ($(BOARD),lisa_l)
include $(CFG_FIXEDWING)/actuators_direct.makefile
+ endif
+
+else
+ include $(CFG_FIXEDWING)/$(ACTUATORS).makefile
endif
diff --git a/conf/autopilot/subsystems/fixedwing/autopilot.makefile b/conf/autopilot/subsystems/fixedwing/autopilot.makefile
index a9c08f7b0c..520f3aa6d1 100644
--- a/conf/autopilot/subsystems/fixedwing/autopilot.makefile
+++ b/conf/autopilot/subsystems/fixedwing/autopilot.makefile
@@ -22,90 +22,177 @@
#
#
-# All targets need the board config
-$(TARGET).CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG)
+######################################################################
+##
+## COMMON FIXEDWING ALL TARGETS (SIM + AP + FBW ...)
+##
+
+#
+# Board config + Include paths
+#
+
+$(TARGET).CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG)
+$(TARGET).CFLAGS += $(FIXEDWING_INC)
+
+#
+# Common Options
+#
ifeq ($(OPTIONS), minimal)
else
- $(TARGET).CFLAGS += -DWIND_INFO
+ $(TARGET).CFLAGS += -DWIND_INFO
endif
-$(TARGET).CFLAGS += -DTRAFFIC_INFO
-
-sim.CFLAGS += -DSITL -DAP -DFBW -DRADIO_CONTROL -DINTER_MCU -DDOWNLINK -DDOWNLINK_TRANSPORT=IvyTransport -DLED
-sim.srcs += latlong.c radio_control.c downlink.c commands.c gps.c inter_mcu.c estimator.c sys_time.c main_fbw.c main_ap.c datalink.c $(SRC_ARCH)/sim_ap.c $(SRC_ARCH)/ppm_hw.c $(SRC_ARCH)/sim_gps.c $(SRC_ARCH)/ivy_transport.c $(SRC_ARCH)/sim_adc_generic.c $(SRC_ARCH)/led_hw.c
-
-
-
-ap.CFLAGS += $(FIXEDWING_INC)
-ap.srcs = $(SRC_FIXEDWING)/main.c
-
-ifeq ($(ARCHI), stm32)
-ap.srcs += lisa/plug_sys.c
-endif
-
-#
-# Interrupts
-#
-ifeq ($(ARCHI), arm7)
-ap.srcs += $(SRC_ARCH)/armVIC.c
-else ifeq ($(ARCHI), stm32)
-ap.srcs += $(SRC_ARCH)/stm32_exceptions.c
-ap.srcs += $(SRC_ARCH)/stm32_vector_table.c
-endif
+$(TARGET).CFLAGS += -DTRAFFIC_INFO
#
# LEDs
#
-ap.CFLAGS += -DUSE_LED -DLED -DTIME_LED=1
-ifeq ($(ARCHI), stm32)
-ap.srcs += $(SRC_ARCH)/led_hw.c
+
+$(TARGET).CFLAGS += -DLED
+ifneq ($(ARCHI), arm7)
+ $(TARGET).srcs += $(SRC_ARCH)/led_hw.c
endif
#
-# Systime
+# Sys-time
#
-ap.CFLAGS += -DUSE_SYS_TIME
-ap.srcs += sys_time.c $(SRC_ARCH)/sys_time_hw.c
-#ap.CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC(1./512.)'
-ap.CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC((1./60.))'
-ifeq ($(ARCHI), stm32)
-ap.CFLAGS += -DSYS_TIME_LED=1 -DPERIPHERALS_AUTO_INIT
-endif
-
-#
-# FlyByWire Main
-#
-ap.CFLAGS += -DFBW
-ap.srcs += $(SRC_FIXEDWING)/main_fbw.c
-
-#
-# AutoPilot Main
-#
-ap.CFLAGS += -DAP
-ap.srcs += $(SRC_FIXEDWING)/main_ap.c
-ap.srcs += $(SRC_FIXEDWING)/estimator.c
+$(TARGET).srcs += sys_time.c
#
# InterMCU & Commands
#
-ap.CFLAGS += -DINTER_MCU
-ap.srcs += $(SRC_FIXEDWING)/inter_mcu.c
-ap.srcs += $(SRC_FIXEDWING)/commands.c
+$(TARGET).CFLAGS += -DINTER_MCU
+$(TARGET).srcs += $(SRC_FIXEDWING)/inter_mcu.c
+
+######################################################################
+##
+## COMMON FOR ALL NON-SIMULATION TARGETS
+##
+
+#
+# Interrupt Vectors
+#
+
+ifeq ($(ARCHI), arm7)
+ ns_srcs += $(SRC_ARCH)/armVIC.c
+else ifeq ($(ARCHI), stm32)
+ ns_srcs += $(SRC_ARCH)/stm32_exceptions.c
+ ns_srcs += $(SRC_ARCH)/stm32_vector_table.c
+ ns_CFLAGS += -DPERIPHERALS_AUTO_INIT
+endif
+
+ifeq ($(ARCHI), stm32)
+ ns_srcs += lisa/plug_sys.c
+endif
+
+
+#
+# Main
+#
+
+ns_srcs += $(SRC_FIXEDWING)/main.c
+
+#
+# LEDs
+#
+
+ns_CFLAGS += -DUSE_LED
+ifeq ($(ARCHI), stm32)
+ ns_CFLAGS += -DSYS_TIME_LED=1
+else
+ ns_CFLAGS += -DTIME_LED=1
+endif
+
+#
+# Sys-time
+#
+
+ns_CFLAGS += -DUSE_SYS_TIME
+ns_CFLAGS += -DPERIODIC_TASK_PERIOD='SYS_TICS_OF_SEC((1./60.))'
+ns_srcs += $(SRC_ARCH)/sys_time_hw.c
+
#
# UARTS
#
-ap.srcs += $(SRC_ARCH)/uart_hw.c
+ns_srcs += $(SRC_ARCH)/uart_hw.c
+
+#
+# ANALOG
+#
ifeq ($(ARCHI), arm7)
-ap.CFLAGS += -DADC
-ap.srcs += $(SRC_ARCH)/adc_hw.c
+ ns_CFLAGS += -DADC
+ ns_srcs += $(SRC_ARCH)/adc_hw.c
else ifeq ($(ARCHI), stm32)
-ap.srcs += lisa/lisa_analog_plug.c
+ ns_srcs += lisa/lisa_analog_plug.c
endif
+######################################################################
+##
+## FLY BY WIRE THREAD SPECIFIC
+##
+
+fbw_CFLAGS += -DFBW
+fbw_srcs += $(SRC_FIXEDWING)/main_fbw.c
+fbw_srcs += $(SRC_FIXEDWING)/commands.c
+
+######################################################################
+##
+## AUTOPILOT THREAD SPECIFIC
+##
+
+ap_CFLAGS += -DAP
+ap_srcs += $(SRC_FIXEDWING)/main_ap.c
+ap_srcs += $(SRC_FIXEDWING)/estimator.c
+
+
+######################################################################
+##
+## SIMULATOR THREAD SPECIFIC
+##
+
+sim.CFLAGS += $(fbw_CFLAGS) $(ap_CFLAGS)
+sim.srcs += $(fbw_srcs) $(ap_srcs)
+
+sim.CFLAGS += -DSITL
+sim.srcs += $(SRC_ARCH)/sim_ap.c
+
+sim.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=IvyTransport
+sim.srcs += downlink.c datalink.c $(SRC_ARCH)/sim_gps.c $(SRC_ARCH)/ivy_transport.c $(SRC_ARCH)/sim_adc_generic.c
+
+######################################################################
+##
+## Final Target Allocations
+##
+
+#
+# SINGLE MCU / DUAL MCU
+#
+
+ifeq ($(BOARD),classix)
+ fbw.CFLAGS += -DMCU_SPI_LINK -DUSE_SPI -DSPI_SLAVE
+ fbw.srcs += $(SRC_FIXEDWING)/link_mcu.c $(SRC_FIXEDWING)/spi.c $(SRC_ARCH)/spi_hw.c
+ ap.CFLAGS += -DMCU_SPI_LINK -DUSE_SPI -DSPI_MASTER -DUSE_SPI_SLAVE0
+ ap.srcs += $(SRC_FIXEDWING)/link_mcu.c $(SRC_FIXEDWING)/spi.c $(SRC_ARCH)/spi_hw.c
+else
+ # Single MCU's run both
+ ap.CFLAGS += $(fbw_CFLAGS)
+ ap.srcs += $(fbw_srcs)
+endif
+
+#
+# No-Sim parameters
+#
+
+fbw.CFLAGS += $(fbw_CFLAGS) $(ns_CFLAGS)
+fbw.srcs += $(fbw_srcs) $(ns_srcs)
+
+ap.CFLAGS += $(ap_CFLAGS) $(ns_CFLAGS)
+ap.srcs += $(ap_srcs) $(ns_srcs)
+
diff --git a/conf/autopilot/subsystems/fixedwing/gps_ublox_lea4p.makefile b/conf/autopilot/subsystems/fixedwing/gps_ublox_lea4p.makefile
index 714c28f6c0..1dfa187565 100644
--- a/conf/autopilot/subsystems/fixedwing/gps_ublox_lea4p.makefile
+++ b/conf/autopilot/subsystems/fixedwing/gps_ublox_lea4p.makefile
@@ -7,3 +7,5 @@ ap.CFLAGS += -DUSE_UART$(GPS_UART_NR)
ap.CFLAGS += -DUART$(GPS_UART_NR)_BAUD=$(GPS_BAUD)
ap.srcs += $(SRC_FIXEDWING)/gps_ubx.c $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
+
+sim.srcs += $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
diff --git a/conf/autopilot/subsystems/fixedwing/gps_ublox_lea5h.makefile b/conf/autopilot/subsystems/fixedwing/gps_ublox_lea5h.makefile
index bb8e17ae39..480a7ddc8c 100644
--- a/conf/autopilot/subsystems/fixedwing/gps_ublox_lea5h.makefile
+++ b/conf/autopilot/subsystems/fixedwing/gps_ublox_lea5h.makefile
@@ -7,3 +7,5 @@ ap.CFLAGS += -DUSE_UART$(GPS_UART_NR)
ap.CFLAGS += -DUART$(GPS_UART_NR)_BAUD=$(GPS_BAUD)
ap.srcs += $(SRC_FIXEDWING)/gps_ubx.c $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
+
+sim.srcs += $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
diff --git a/conf/autopilot/subsystems/fixedwing/gps_xsens.makefile b/conf/autopilot/subsystems/fixedwing/gps_xsens.makefile
new file mode 100644
index 0000000000..5042fbd81e
--- /dev/null
+++ b/conf/autopilot/subsystems/fixedwing/gps_xsens.makefile
@@ -0,0 +1,8 @@
+# XSens Mti-G
+
+
+# ap.CFLAGS += -DGPS
+
+ap.srcs += $(SRC_FIXEDWING)/gps_xsens.c $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
+
+sim.srcs += $(SRC_FIXEDWING)/gps.c $(SRC_FIXEDWING)/latlong.c
diff --git a/conf/autopilot/subsystems/fixedwing/radio_control_ppm.makefile b/conf/autopilot/subsystems/fixedwing/radio_control_ppm.makefile
index def5d7562b..59509d3b53 100644
--- a/conf/autopilot/subsystems/fixedwing/radio_control_ppm.makefile
+++ b/conf/autopilot/subsystems/fixedwing/radio_control_ppm.makefile
@@ -1,4 +1,17 @@
+NORADIO = False
+
+ifeq ($(BOARD),classix)
+ ifeq ($(TARGET),ap)
+ NODRADIO = True
+ endif
+endif
+
+
+
+ifeq ($(NORADIO), False)
+ $(TARGET).CFLAGS += -DRADIO_CONTROL
+ $(TARGET).srcs += $(SRC_FIXEDWING)/radio_control.c $(SRC_ARCH)/ppm_hw.c
+endif
+
-ap.CFLAGS += -DRADIO_CONTROL
-ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c
diff --git a/conf/boards/classix.makefile b/conf/boards/classix.makefile
new file mode 100644
index 0000000000..52631bb52c
--- /dev/null
+++ b/conf/boards/classix.makefile
@@ -0,0 +1,40 @@
+#
+# classix.makefile
+#
+# http://paparazzi.enac.fr/wiki/Classix
+#
+# TODO: move all to new directories
+# ARCH=lpc21
+ARCH=arm7
+ARCHI=arm7
+
+
+BOARD=classix
+BOARD_VERSION=1.0
+
+#BOARD_CFG=\"boards/$(BOARD)_$(BOARD_VERSION).h\"
+
+# TODO: update syntax
+BOARD_CFG = \"classix.h\"
+
+ifndef FLASH_MODE
+FLASH_MODE = IAP
+endif
+
+
+LPC21ISP_BAUD = 38400
+LPC21ISP_XTAL = 12000
+
+
+### default settings for classix
+GPS_BAUD = B38400
+
+# All targets on the TINY board run on the same processor achitecture
+$(TARGET).ARCHDIR = $(ARCHI)
+$(TARGET).ARCH = arm7tdmi
+$(TARGET).TARGET = $(TARGET)
+$(TARGET).TARGETDIR = $(TARGET)
+
+# Battery Voltage
+fbw.CFLAGS += -DUSE_AD0
+
diff --git a/conf/modules/ins_xsens_MTiG_fixedwing.xml b/conf/modules/ins_xsens_MTiG_fixedwing.xml
new file mode 100644
index 0000000000..8890f859c9
--- /dev/null
+++ b/conf/modules/ins_xsens_MTiG_fixedwing.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sw/airborne/ap_downlink.h b/sw/airborne/ap_downlink.h
index 061f8aa7ba..0bba0727d3 100644
--- a/sw/airborne/ap_downlink.h
+++ b/sw/airborne/ap_downlink.h
@@ -57,7 +57,7 @@
#define PERIODIC_SEND_ALIVE(_chan) DOWNLINK_SEND_ALIVE(_chan, 16, MD5SUM);
#define PERIODIC_SEND_BAT(_chan) { \
- uint16_t zero; \
+ uint16_t zero = 0; \
Downlink({ int16_t e = energy; \
DOWNLINK_SEND_BAT(_chan, \
&v_ctl_throttle_slewed, \