User/AirborneCodeReorg
This page summarizes the changes needed to switch from the "raw makefile in airframes" to a new "xml only aiframes" syntax
Why
- Because of its growth, paparazzi needs significant reorganization. To make this possible without breaking airframe files, the 'subsystem' idea introduced in booz is now generalized to all airframes using a nicer looking XML structure.
- users are not required to understand Makefile's anymore in order to choose what to compile.
FixedWing
In Brief
The idea is to replace the <makefile> section with a <target> section
Typicaly, replace:
<makefile> CONFIG=\"tiny_2_1_1.h\" include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile FLASH_MODE=IAP ap.CFLAGS += -DFBW -DAP -DBOARD_CONFIG=$(CONFIG) -DLED -DTIME_LED=1 ap.srcs = sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c main_fbw.c main_ap.c main.c ap.srcs += commands.c ap.CFLAGS += -DACTUATORS=\"servos_4017_hw.h\" -DSERVOS_4017 ap.srcs += $(SRC_ARCH)/servos_4017_hw.c actuators.c ap.CFLAGS += -DRADIO_CONTROL ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c ap.CFLAGS += -DDOWNLINK -DUSE_UART1 -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_FBW_DEVICE=Uart1 -DDOWNLINK_AP_DEVICE=Uart1 -DPPRZ_UART=Uart1 -DDATALINK=PPRZ -DUART1_BAUD=B9600 ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c pprz_transport.c ap.CFLAGS += -DINTER_MCU ap.srcs += inter_mcu.c ap.CFLAGS += -DADC -DUSE_ADC_0 -DUSE_ADC_1 -DUSE_ADC_2 -DUSE_ADC_3 ap.srcs += $(SRC_ARCH)/adc_hw.c ap.CFLAGS += -DGPS -DUBX -DUSE_UART1 -DGPS_LINK=Uart1 -DUART1_BAUD=B38400 ap.CFLAGS += -DGPS_CONFIGURE -DGPS_BAUD=38400 ap.srcs += gps_ubx.c gps.c latlong.c ap.CFLAGS += -DINFRARED ap.srcs += infrared.c estimator.c ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN -DWIND_INFO ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c ap.srcs += nav_line.c nav_survey_rectangle.c </makefile>
with
<target name="fixedwing" board="tiny_2.11"> <param name="FLASH_MODE" value="IAP"/> <subsystem name="autopilot"/> <subsystem name="radio_control" type="ppm"/> <subsystem name="telemetry" type="transparent"> <param name="MODEM_BAUD" value="9600"/> </subsystem> <subsystem name="actuators" type="4017"/> <subsystem name="gyro"/> <subsystem name="attitude" type="infrared"/> <subsystem name="gps" type="ublox_lea4p"/> <subsystem name="navigation"> <define name="AGR_CLIMB" value="1" /> <define name="LOITER_TRIM" value="1" /> <define name="WIND_INFO" value="1" /> <subsystem name="testing"/> </subsystem> </target>
In details
Let's look in more detail how this is done
The first two lines of the makefile
CONFIG=\"tiny_2_1_1.h\" include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile FLASH_MODE=IAP
correspond to this
<target name="fixed_wings" board="tiny_2.11"> <param name="FLASH_MODE" value="IAP"/>
The only field you might want to adapt depending on your configuration is the board one. The list of supported boards is
- "twog_1"
- "tiny_2.11"
- "tiny_2.1"
- "tiny_1.1"
- "tiny_0.99"
- "booz"
- "lisa_l_1.0"
The second line of the target section
<subsystem name="autopilot"/>
brings you most of the autopilot, ie
The third line defines what kind of radio control you'll be using. Fox now fixedwing doesn't have a choice and uses ppm
<subsystem name="radio_control" type="ppm"/>
replaces
ap.CFLAGS += -DRADIO_CONTROL ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c