diff --git a/conf/Makefile.avr b/conf/Makefile.avr
index 08b62d0013..3eed8ed50f 100644
--- a/conf/Makefile.avr
+++ b/conf/Makefile.avr
@@ -56,7 +56,7 @@ UISP_FLAGS = $(ISP_FLAGS)
CFLAGS = \
- -W -Wall \
+ -Werror -W -Wall \
$(ATMEL_INCLUDES) \
$(INCLUDES) \
-Wstrict-prototypes \
diff --git a/conf/airframes/gorrazoptere_esc_3DMG.xml b/conf/airframes/gorrazoptere_esc_3DMG.xml
index a0031e051f..105503b5f0 100644
--- a/conf/airframes/gorrazoptere_esc_3DMG.xml
+++ b/conf/airframes/gorrazoptere_esc_3DMG.xml
@@ -74,6 +74,7 @@
+
diff --git a/conf/airframes/twinstar1.xml b/conf/airframes/twinstar1.xml
index 0c0434f691..b874e6cafd 100644
--- a/conf/airframes/twinstar1.xml
+++ b/conf/airframes/twinstar1.xml
@@ -2,6 +2,7 @@
+
@@ -20,13 +21,15 @@
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/conf/autopilot/twin_avr.makefile b/conf/autopilot/twin_avr.makefile
index c0bb8b0d3e..ca75a5d622 100644
--- a/conf/autopilot/twin_avr.makefile
+++ b/conf/autopilot/twin_avr.makefile
@@ -20,4 +20,4 @@ fbw.HIGH_FUSE = cb
fbw.EXT_FUSE = ff
fbw.LOCK_FUSE = ff
fbw.CFLAGS += -DFBW -DMCU_SPI_LINK -DACTUATORS=\"servos_4017.h\"
-fbw.srcs = $(SRC_ARCH)/ppm_hw.c inter_mcu.c $(SRC_ARCH)/servo.c $(SRC_ARCH)/spi_fbw.c $(SRC_ARCH)/uart_fbw.c $(SRC_ARCH)/adc_fbw.c sys_time.c main_fbw.c main.c
+fbw.srcs = $(SRC_ARCH)/ppm_hw.c inter_mcu.c $(SRC_ARCH)/servos_4017.c $(SRC_ARCH)/spi_fbw.c $(SRC_ARCH)/uart_fbw.c $(SRC_ARCH)/adc_fbw.c sys_time.c main_fbw.c main.c
diff --git a/sw/airborne/avr/servos_4017.c b/sw/airborne/avr/servos_4017.c
index 971eccb4f1..11a5434606 100644
--- a/sw/airborne/avr/servos_4017.c
+++ b/sw/airborne/avr/servos_4017.c
@@ -40,7 +40,6 @@ static const pprz_t failsafe_values[COMMANDS_NB] = COMMANDS_FAILSAFE;
#define ChopServo(x,a,b) Chop(x, a, b)
#define COMMAND(i) servo_widths[i]
-#define SERVOS_TICS_OF_USEC(s) SYS_TICS_OF_USEC(s)
/*
* We use the output compare registers to generate our servo pulses.
* These should be connected to a decade counter that routes the
diff --git a/sw/airborne/avr/spi_fbw.c b/sw/airborne/avr/spi_fbw.c
index 00348a37ce..005131a268 100644
--- a/sw/airborne/avr/spi_fbw.c
+++ b/sw/airborne/avr/spi_fbw.c
@@ -48,8 +48,8 @@ static volatile uint8_t idx_buf = 0;
static volatile uint16_t crc_in, crc_out;
void spi_init(void) {
- from_fbw.status = 0;
- from_fbw.nb_err = 0;
+ from_fbw.from_fbw.status = 0;
+ from_fbw.from_fbw.nb_err = 0;
/* set it pin output */
// IT_DDR |= _BV(IT_PIN);
@@ -67,7 +67,7 @@ void spi_reset(void) {
crc_in = CRC_INIT;
crc_out = CRC_INIT;
- uint8_t first_byte = ((uint8_t*)&from_fbw)[0];
+ uint8_t first_byte = ((uint8_t*)&from_fbw.from_fbw)[0];
crc_out = CrcUpdate(crc_out, first_byte);
SPDR = first_byte;
@@ -93,7 +93,7 @@ SIGNAL(SIG_SPI) {
if (crc_in1 == Crc1(crc_in) && tmp == Crc2(crc_in))
from_ap_receive_valid = TRUE;
else
- from_fbw.nb_err++;
+ from_fbw.from_fbw.nb_err++;
return;
}
@@ -109,7 +109,7 @@ SIGNAL(SIG_SPI) {
/* we are sending/receiving payload */
if (idx_buf < FRAME_LENGTH - 2) {
/* place new payload byte in send register */
- tmp = ((uint8_t*)&from_fbw)[idx_buf];
+ tmp = ((uint8_t*)&from_fbw.from_fbw)[idx_buf];
SPDR = tmp;
crc_out = CrcUpdate(crc_out, tmp);
}
diff --git a/sw/airborne/inter_mcu.h b/sw/airborne/inter_mcu.h
index a01327da84..291c1069fa 100644
--- a/sw/airborne/inter_mcu.h
+++ b/sw/airborne/inter_mcu.h
@@ -95,7 +95,7 @@ typedef union {
#define STATUS_AUTO_OK 0
/** Two bytes for the CRC */
-#define FRAME_LENGTH (sizeof(struct inter_mcu_msg)+2)
+#define FRAME_LENGTH (sizeof(inter_mcu_msg)+2)
#define CRC_INIT 0xffff
#define CrcUpdate(_crc, _data) _crc_ccitt_update(_crc, _data)
diff --git a/sw/airborne/main_fbw.c b/sw/airborne/main_fbw.c
index ce92653d81..482bd43d31 100644
--- a/sw/airborne/main_fbw.c
+++ b/sw/airborne/main_fbw.c
@@ -204,9 +204,9 @@ void event_task_fbw( void) {
ap_ok = TRUE;
if (mode == FBW_MODE_AUTO) {
#if defined IMU_ANALOG || defined IMU_3DMG
- control_set_desired(from_ap.channels);
+ control_set_desired(from_ap.from_ap.channels);
#else
- command_set(from_ap.channels);
+ command_set(from_ap.from_ap.channels);
#endif
}
to_autopilot_from_rc_values();
diff --git a/sw/tools/gen_airframe.ml b/sw/tools/gen_airframe.ml
index 0e0dec6b00..4618ec6513 100644
--- a/sw/tools/gen_airframe.ml
+++ b/sw/tools/gen_airframe.ml
@@ -107,6 +107,24 @@ let parse_command_laws = fun command ->
| _ -> xml_error "set|let"
+let parse_radio_laws = fun rc ->
+ let a = fun s -> ExtXml.attrib rc s in
+ match Xml.tag rc with
+ "set" ->
+ let com = a "command"
+ and value = a "value" in
+ let v = preprocess_command value in
+ printf " values[COMMAND_%s] = %s;\\\n" com v;
+ | "let" ->
+ let var = a "var"
+ and value = a "value" in
+ let v = preprocess_command value in
+ printf " int16_t _var_%s = %s;\\\n" var v
+ | "define" ->
+ parse_element "" rc
+ | _ -> xml_error "set|let"
+
+
let parse_command = fun commands_params command no ->
let command_name = "COMMAND_"^ExtXml.attrib command "name" in
let failsafe_value = int_of_string (ExtXml.attrib command "failsafe_value") in
@@ -136,7 +154,11 @@ let parse_section = fun s ->
let commands_params = Array.to_list commands_params in
define "COMMANDS_FAILSAFE" (sprint_float_array (List.map (fun x -> string_of_int x.failsafe_value) commands_params));
nl (); nl ()
- | "command_laws" ->
+ | "radio_laws" ->
+ printf "#define CommandsOfRC(values) { \\\n";
+ List.iter parse_radio_laws (Xml.children s);
+ printf "}\n\n"
+ | "command_laws" ->
printf "#define CommandsSet(values) { \\\n";
printf " uint16_t servo_value;\\\n";
printf " float command_value;\\\n";