paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [5962] Add fmi ac.


From: Martin Mueller
Subject: [paparazzi-commits] [5962] Add fmi ac.
Date: Mon, 27 Sep 2010 21:23:53 +0000

Revision: 5962
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=5962
Author:   mmm
Date:     2010-09-27 21:23:52 +0000 (Mon, 27 Sep 2010)
Log Message:
-----------
Add fmi ac.

Modified Paths:
--------------
    paparazzi3/branches/campaign2010/conf/airframes/funjetfmi1.xml
    paparazzi3/branches/campaign2010/conf/airframes/logger_sd.xml
    paparazzi3/branches/campaign2010/conf/flight_plans/grosslobke_demo.xml
    paparazzi3/branches/campaign2010/conf/messages.xml
    paparazzi3/branches/campaign2010/conf/settings/tuning.xml
    paparazzi3/branches/campaign2010/conf/telemetry/default.xml
    paparazzi3/branches/campaign2010/sw/airborne/ap_downlink.h
    paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.c
    paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.h
    paparazzi3/branches/campaign2010/sw/airborne/main_ap.c
    paparazzi3/branches/campaign2010/sw/ground_segment/tmtc/link.ml
    paparazzi3/branches/campaign2010/sw/in_progress/ir_usb_i2c/i2c_usb.c
    paparazzi3/branches/campaign2010/sw/logalizer/ctrlstick.c

Added Paths:
-----------
    paparazzi3/branches/campaign2010/conf/airframes/funjetfmi2.xml
    paparazzi3/branches/campaign2010/conf/airframes/funjetfmi3.xml
    paparazzi3/branches/campaign2010/conf/radios/mc24r.xml
    paparazzi3/branches/campaign2010/conf/radios/t6ex.xml
    paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.c
    paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.h
    paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.c
    paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.h

Modified: paparazzi3/branches/campaign2010/conf/airframes/funjetfmi1.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/airframes/funjetfmi1.xml      
2010-09-27 20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/conf/airframes/funjetfmi1.xml      
2010-09-27 21:23:52 UTC (rev 5962)
@@ -5,11 +5,11 @@
      PerkinElmer TPS334 IR Sensors
      Tilted infrared sensor 
(http://paparazzi.enac.fr/wiki/index.php/Image:Tiny_v2_1_Funjet.jpg)
      XBee modem
-     Payload: Sensirion humidity/temp, VTI pressure/temp
-     K66, LEA 4P
+     Payload: Sensirion humidity/temp, VTI pressure/temp, ETS airspeed
+     LEA 4P
 -->
 
-<airframe name="Funjet FMI 1 K66">
+<airframe name="Funjet FMI 1">
 
 <!-- commands section -->
   <servos>
@@ -180,6 +180,26 @@
     <define name="YAW_RESPONSE_FACTOR" value="0.5"/>
  </section>
 
+  <section name="MICROMAG">
+
+    <define name="MM_SS_PIN" value="20"/>
+    <define name="MM_SS_IODIR" value="IO0DIR"/>
+    <define name="MM_SS_IOSET" value="IO0SET"/>
+    <define name="MM_SS_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_RESET_PIN" value="29"/>
+    <define name="MM_RESET_IODIR" value="IO0DIR"/>
+    <define name="MM_RESET_IOSET" value="IO0SET"/>
+    <define name="MM_RESET_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_DRDY_PINSEL" value="PINSEL1"/>
+    <define name="MM_DRDY_PINSEL_BIT" value="0"/>
+    <define name="MM_DRDY_PINSEL_VAL" value="1"/>
+    <define name="MM_DRDY_EINT" value="0"/>
+    <define name="MM_DRDY_VIC_IT" value="VIC_EINT0"/>
+
+  </section>
+
  <makefile>
 CONFIG = \"tiny_2_1.h\"
 
@@ -226,22 +246,31 @@
 ap.srcs += nav_survey_rectangle.c
 
 ap.srcs += humid_sht.c
-ap.CFLAGS += -DUSE_HUMID_SHT -DDAT_PIN=3  -DSCK_PIN=2
+ap.CFLAGS += -DUSE_HUMID_SHT -DDAT_PIN=30 -DSCK_PIN=4
 
-ap.srcs += baro_scp.c
+ap.CFLAGS += -DUSE_I2C0
+ap.srcs += i2c.c $(SRC_ARCH)/i2c_hw.c
+
+ap.CFLAGS += -DUSE_AIRSPEED_ETS
+ap.srcs += airspeed_ets_o.c
+
+ap.CFLAGS += -DUSE_IR_MLX
+ap.srcs += ir_mlx.c
+
 ap.CFLAGS += -DUSE_BARO_SCP
+ap.srcs += baro_scp_i2c.c
 
-ap.srcs += joystick.c
-ap.CFLAGS += -DUSE_JOYSTICK
+#ap.CFLAGS += -DUSE_MAG_HMC
+#ap.srcs += mag_hmc5843.c
 
+ap.CFLAGS += -DMICROMAG_DRDY_VIC_SLOT=12 -DSSP_VIC_SLOT=11 -DUSE_MICROMAG_FW
+ap.srcs += micromag_fw.c $(SRC_ARCH)/micromag_fw_hw.c
+
 # Config for SITL simulation
 include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
 sim.CFLAGS += -DBOARD_CONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN
 sim.srcs += nav_line.c nav_survey_rectangle.c
 
-sim.srcs += joystick.c
-sim.CFLAGS += -DUSE_JOYSTICK
 
-
   </makefile>
 </airframe>

Added: paparazzi3/branches/campaign2010/conf/airframes/funjetfmi2.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/airframes/funjetfmi2.xml              
                (rev 0)
+++ paparazzi3/branches/campaign2010/conf/airframes/funjetfmi2.xml      
2010-09-27 21:23:52 UTC (rev 5962)
@@ -0,0 +1,272 @@
+<!DOCTYPE airframe SYSTEM "airframe.dtd">
+
+<!-- Funjet Multiplex (http://www.multiplex-rc.de/), Jeti ECO 25
+     Tiny 2.11 board (http://paparazzi.enac.fr/wiki/index.php/Tiny_v2)
+     Tilted infrared sensor 
(http://paparazzi.enac.fr/wiki/index.php/Image:Tiny_v2_1_Funjet.jpg)
+     XBee modem
+     Payload: Sensirion humidity/temp, VTI pressure/temp, ETS airspeed
+     LEA 5H
+-->
+
+<airframe name="Funjet FMI 2">
+
+<!-- commands section -->
+  <servos>
+    <servo name="MOTOR"         no="0" min="1000" neutral="1000" max="2000"/>
+    <servo name="AILEVON_LEFT"  no="2" min="1900" neutral="1500" max="1100"/>
+    <servo name="AILEVON_RIGHT" no="6" min="1100" neutral="1500" max="1900"/>
+  </servos>
+
+  <commands>
+    <axis name="THROTTLE" failsafe_value="0"/>
+    <axis name="ROLL"     failsafe_value="0"/>
+    <axis name="PITCH"    failsafe_value="0"/>
+  </commands>
+
+  <rc_commands>
+    <set command="THROTTLE" value="@THROTTLE"/>
+    <set command="ROLL"     value="@ROLL"/>
+    <set command="PITCH"    value="@PITCH"/>
+  </rc_commands>
+
+  <section name="MIXER">
+    <define name="AILEVON_AILERON_RATE" value="0.45"/>
+    <define name="AILEVON_ELEVATOR_RATE" value="0.8"/>
+  </section>
+
+  <command_laws>
+    <let var="aileron"  value="@ROLL  * AILEVON_AILERON_RATE"/>
+    <let var="elevator" value="@PITCH * AILEVON_ELEVATOR_RATE"/>  
+    <set servo="MOTOR"           value="@THROTTLE"/>
+    <set servo="AILEVON_LEFT"  value="$elevator + $aileron"/>
+    <set servo="AILEVON_RIGHT" value="$elevator - $aileron"/>
+  </command_laws>
+
+  <section name="AUTO1" prefix="AUTO1_">
+    <define name="MAX_ROLL" value="0.85"/>
+    <define name="MAX_PITCH" value="0.6"/>
+  </section>
+
+  <section name="adc" prefix="ADC_CHANNEL_">
+    <define name="IR1" value="ADC_1"/>
+    <define name="IR2" value="ADC_2"/>
+    <define name="IR_TOP" value="ADC_0"/>
+    <define name="IR_NB_SAMPLES" value="16"/>
+  </section>
+
+  <section name="INFRARED" prefix="IR_">
+    <define name="ADC_IR1_NEUTRAL" value="512"/>
+    <define name="ADC_IR2_NEUTRAL" value="512"/>
+    <define name="ADC_TOP_NEUTRAL" value="512"/>
+
+    <define name="CORRECTION_UP" value="1."/>
+    <define name="CORRECTION_DOWN" value="1."/>
+    <define name="CORRECTION_LEFT" value="1."/>
+    <define name="CORRECTION_RIGHT" value="1."/>
+
+    <define name="LATERAL_CORRECTION" value="1"/>
+    <define name="LONGITUDINAL_CORRECTION" value="1"/>
+    <define name="VERTICAL_CORRECTION" value="1.5"/>
+
+    <define name="HORIZ_SENSOR_TILTED" value="1"/>
+    <define name="IR1_SIGN" value="-1"/>
+    <define name="IR2_SIGN" value="-1"/>
+    <define name="TOP_SIGN" value="1"/>
+
+    <define name="ROLL_NEUTRAL_DEFAULT" value="0" unit="deg"/>
+    <define name="PITCH_NEUTRAL_DEFAULT" value="0" unit="deg"/>
+  </section>
+
+  <section name="BAT">
+    <define name="MILLIAMP_AT_FULL_THROTTLE" value="10000."/>
+    <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
+                                        <!-- 0.0247311828 -->
+                                        <!-- 0.02432905 -->
+    <define name="VoltageOfAdc(adc)" value="(0.02454*adc)"/>    
+  </section>
+ 
+  <section name="MISC">
+    <define name="NOMINAL_AIRSPEED" value="15." unit="m/s"/>
+    <define name="CARROT" value="5." unit="s"/>
+    <define name="KILL_MODE_DISTANCE" value="(1.5*MAX_DIST_FROM_HOME)"/>
+    <define name="CONTROL_RATE" value="60" unit="Hz"/>
+<!--    <define name="XBEE_INIT" value="\"ATPL2\rATRN1\rATTT80\r\""/> -->
+<!--    <define name="NO_XBEE_API_INIT" value="TRUE"/> -->
+    <define name="ALT_KALMAN_ENABLED" value="FALSE"/>
+
+    <define name="TRIGGER_DELAY" value="1."/>
+    <define name="DEFAULT_CIRCLE_RADIUS" value="120."/>
+    <define name="MIN_CIRCLE_RADIUS" value="50."/>
+  </section>
+ 
+  <section name="VERTICAL CONTROL" prefix="V_CTL_">
+
+    <define name="POWER_CTL_BAT_NOMINAL" value="11.1" unit="volt"/>
+    <!-- outer loop proportional gain -->
+    <define name="ALTITUDE_PGAIN" value="-0.06"/> <!-- -0.024 -->
+    <!-- outer loop saturation -->
+    <define name="ALTITUDE_MAX_CLIMB" value="2."/>
+
+    <!-- auto throttle inner loop -->
+    <define name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE" value="0.45"/>
+    <define name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value="0.35"/>
+    <define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="0.85"/>
+    <define name="AUTO_THROTTLE_LOITER_TRIM" value="1000"/>
+    <define name="AUTO_THROTTLE_DASH_TRIM" value="-1200"/>
+    <define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.2" 
unit="%/(m/s)"/>
+    <define name="AUTO_THROTTLE_PGAIN" value="-0.023"/> <!-- -0.012 -->
+    <define name="AUTO_THROTTLE_IGAIN" value="0.01"/>
+    <define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.05"/>
+
+    <!-- auto pitch inner loop -->
+    <define name="AUTO_PITCH_PGAIN" value="-0.06"/> <!-- -0.03 -->
+    <define name="AUTO_PITCH_IGAIN" value="0.0"/>
+    <define name="AUTO_PITCH_MAX_PITCH" value="0.35"/>
+    <define name="AUTO_PITCH_MIN_PITCH" value="-0.35"/>
+
+   <define name="THROTTLE_SLEW" value="0.1"/>
+
+  </section>
+
+  <section name="HORIZONTAL CONTROL" prefix="H_CTL_">
+    <define name="COURSE_PGAIN" value="-0.9"/>
+    <define name="ROLL_MAX_SETPOINT" value="0.70" unit="radians"/> <!-- 0.5 -->
+    <define name="PITCH_MAX_SETPOINT" value="0.5" unit="radians"/>
+    <define name="PITCH_MIN_SETPOINT" value="-0.5" unit="radians"/>
+
+    <define name="ROLL_PGAIN" value="6600."/>
+    <define name="AILERON_OF_THROTTLE" value="0.0"/>
+    <define name="PITCH_PGAIN" value="-5500."/>
+    <define name="PITCH_DGAIN" value="0.4"/>
+
+    <define name="ELEVATOR_OF_ROLL" value="2400"/>
+
+    <!--define name="ROLL_ATTITUDE_GAIN" value="-7500"/>
+    <define name="ROLL_RATE_GAIN" value="-1500"/-->
+
+  </section>
+
+  <section name="NAV">
+    <define name="NAV_PITCH" value="0."/>
+    <define name="NAV_GLIDE_PITCH_TRIM" value="0"/>
+  </section>
+
+  <section name="AGGRESSIVE" prefix="AGR_">
+    <define name="BLEND_START" value="50"/><!-- Altitude Error to Initiate 
Aggressive Climb CANNOT BE ZERO!!-->
+    <define name="BLEND_END" value="15"/><!-- Altitude Error to Blend 
Aggressive to Regular Climb Modes  CANNOT BE ZERO!!-->
+    <define name="CLIMB_THROTTLE" value="0.9"/><!-- Gaz for Aggressive Climb 
-->
+    <define name="CLIMB_PITCH" value="0.35"/><!-- Pitch for Aggressive Climb 
-->
+    <define name="DESCENT_THROTTLE" value="0.05"/><!-- Gaz for Aggressive 
Decent -->
+    <define name="DESCENT_PITCH" value="-0.35"/><!-- Pitch for Aggressive 
Decent -->
+    <define name="CLIMB_NAV_RATIO" value="0.8"/><!-- Percent Navigation for 
Altitude Error Equal to Start Altitude -->
+    <define name="DESCENT_NAV_RATIO" value="1.0"/>
+    </section>
+
+  <section name="FAILSAFE" prefix="FAILSAFE_">
+       <define name="DELAY_WITHOUT_GPS" value="2" unit="s"/>
+       <define name="DEFAULT_THROTTLE" value="0.3" unit="%"/>
+       <define name="DEFAULT_ROLL" value="0.3" unit="rad"/>
+       <define name="DEFAULT_PITCH" value="0.5" unit="rad"/>
+       <define name="HOME_RADIUS" value="100" unit="m"/>
+</section>
+
+ <section name="DATALINK" prefix="DATALINK_">
+    <define name="DEVICE_TYPE" value="XBEE"/>
+    <define name="DEVICE_ADDRESS" value="...."/>
+  </section>
+ 
+ <section name="SIMU">
+    <define name="YAW_RESPONSE_FACTOR" value="0.5"/>
+ </section>
+
+  <section name="MICROMAG">
+
+    <define name="MM_SS_PIN" value="20"/>
+    <define name="MM_SS_IODIR" value="IO0DIR"/>
+    <define name="MM_SS_IOSET" value="IO0SET"/>
+    <define name="MM_SS_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_RESET_PIN" value="29"/>
+    <define name="MM_RESET_IODIR" value="IO0DIR"/>
+    <define name="MM_RESET_IOSET" value="IO0SET"/>
+    <define name="MM_RESET_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_DRDY_PINSEL" value="PINSEL1"/>
+    <define name="MM_DRDY_PINSEL_BIT" value="0"/>
+    <define name="MM_DRDY_PINSEL_VAL" value="1"/>
+    <define name="MM_DRDY_EINT" value="0"/>
+    <define name="MM_DRDY_VIC_IT" value="VIC_EINT0"/>
+
+  </section>
+
+ <makefile>
+CONFIG = \"tiny_2_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=XBeeTransport 
-DXBEE_UART=Uart1 -DDATALINK=XBEE -DUART1_BAUD=B57600
+ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.c
+
+#TRANSPARENT
+#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
+ap.srcs += $(SRC_ARCH)/adc_hw.c
+
+ap.CFLAGS += -DGPS -DUBX -DUSE_UART0 -DGPS_LINK=Uart0 -DUART0_BAUD=B38400 
-DGPS_USE_LATLONG
+# -DGPS_LED=2
+ap.srcs += gps_ubx.c gps.c latlong.c
+
+ap.CFLAGS += -DINFRARED -DALT_KALMAN -DWIND_INFO -DWIND_INFO_RET
+ap.srcs += infrared.c estimator.c
+
+ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM
+ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c
+
+ap.srcs += nav_line.c
+ap.srcs += nav_survey_rectangle.c
+
+ap.srcs += humid_sht.c
+ap.CFLAGS += -DUSE_HUMID_SHT -DDAT_PIN=30 -DSCK_PIN=4
+
+ap.CFLAGS += -DUSE_I2C0
+ap.srcs += i2c.c $(SRC_ARCH)/i2c_hw.c
+
+ap.CFLAGS += -DUSE_AIRSPEED_ETS
+ap.srcs += airspeed_ets_o.c
+
+ap.CFLAGS += -DUSE_IR_MLX
+ap.srcs += ir_mlx.c
+
+ap.CFLAGS += -DUSE_BARO_SCP
+ap.srcs += baro_scp_i2c.c
+
+ap.CFLAGS += -DMICROMAG_DRDY_VIC_SLOT=12 -DSSP_VIC_SLOT=11 -DUSE_MICROMAG_FW
+ap.srcs += micromag_fw.c $(SRC_ARCH)/micromag_fw_hw.c
+
+# Config for SITL simulation
+include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
+sim.CFLAGS += -DBOARD_CONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN
+sim.srcs += nav_line.c nav_survey_rectangle.c
+
+
+  </makefile>
+</airframe>

Added: paparazzi3/branches/campaign2010/conf/airframes/funjetfmi3.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/airframes/funjetfmi3.xml              
                (rev 0)
+++ paparazzi3/branches/campaign2010/conf/airframes/funjetfmi3.xml      
2010-09-27 21:23:52 UTC (rev 5962)
@@ -0,0 +1,272 @@
+<!DOCTYPE airframe SYSTEM "airframe.dtd">
+
+<!-- Funjet Multiplex (http://www.multiplex-rc.de/), Jeti ECO 25
+     Tiny 2.11 board (http://paparazzi.enac.fr/wiki/index.php/Tiny_v2)
+     Tilted infrared sensor 
(http://paparazzi.enac.fr/wiki/index.php/Image:Tiny_v2_1_Funjet.jpg)
+     XBee modem
+     Payload: Sensirion humidity/temp, VTI pressure/temp, ETS airspeed
+     LEA 5H
+-->
+
+<airframe name="Funjet FMI 3">
+
+<!-- commands section -->
+  <servos>
+    <servo name="MOTOR"         no="0" min="1000" neutral="1000" max="2000"/>
+    <servo name="AILEVON_LEFT"  no="2" min="1900" neutral="1515" max="1100"/>
+    <servo name="AILEVON_RIGHT" no="6" min="1100" neutral="1502" max="1900"/>
+  </servos>
+
+  <commands>
+    <axis name="THROTTLE" failsafe_value="0"/>
+    <axis name="ROLL"     failsafe_value="0"/>
+    <axis name="PITCH"    failsafe_value="0"/>
+  </commands>
+
+  <rc_commands>
+    <set command="THROTTLE" value="@THROTTLE"/>
+    <set command="ROLL"     value="@ROLL"/>
+    <set command="PITCH"    value="@PITCH"/>
+  </rc_commands>
+
+  <section name="MIXER">
+    <define name="AILEVON_AILERON_RATE" value="0.45"/>
+    <define name="AILEVON_ELEVATOR_RATE" value="0.8"/>
+  </section>
+
+  <command_laws>
+    <let var="aileron"  value="@ROLL  * AILEVON_AILERON_RATE"/>
+    <let var="elevator" value="@PITCH * AILEVON_ELEVATOR_RATE"/>  
+    <set servo="MOTOR"           value="@THROTTLE"/>
+    <set servo="AILEVON_LEFT"  value="$elevator + $aileron"/>
+    <set servo="AILEVON_RIGHT" value="$elevator - $aileron"/>
+  </command_laws>
+
+  <section name="AUTO1" prefix="AUTO1_">
+    <define name="MAX_ROLL" value="0.85"/>
+    <define name="MAX_PITCH" value="0.6"/>
+  </section>
+
+  <section name="adc" prefix="ADC_CHANNEL_">
+    <define name="IR1" value="ADC_1"/>
+    <define name="IR2" value="ADC_2"/>
+    <define name="IR_TOP" value="ADC_0"/>
+    <define name="IR_NB_SAMPLES" value="16"/>
+  </section>
+
+  <section name="INFRARED" prefix="IR_">
+    <define name="ADC_IR1_NEUTRAL" value="512"/>
+    <define name="ADC_IR2_NEUTRAL" value="512"/>
+    <define name="ADC_TOP_NEUTRAL" value="512"/>
+
+    <define name="CORRECTION_UP" value="1."/>
+    <define name="CORRECTION_DOWN" value="1."/>
+    <define name="CORRECTION_LEFT" value="1."/>
+    <define name="CORRECTION_RIGHT" value="1."/>
+
+    <define name="LATERAL_CORRECTION" value="1"/>
+    <define name="LONGITUDINAL_CORRECTION" value="1"/>
+    <define name="VERTICAL_CORRECTION" value="1.5"/>
+
+    <define name="HORIZ_SENSOR_TILTED" value="1"/>
+    <define name="IR1_SIGN" value="-1"/>
+    <define name="IR2_SIGN" value="-1"/>
+    <define name="TOP_SIGN" value="1"/>
+
+    <define name="ROLL_NEUTRAL_DEFAULT" value="0" unit="deg"/>
+    <define name="PITCH_NEUTRAL_DEFAULT" value="0" unit="deg"/>
+  </section>
+
+  <section name="BAT">
+    <define name="MILLIAMP_AT_FULL_THROTTLE" value="10000."/>
+    <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
+                                        <!-- 0.0247311828 -->
+                                        <!-- 0.02432905 -->
+    <define name="VoltageOfAdc(adc)" value="(0.02454*adc)"/>    
+  </section>
+ 
+  <section name="MISC">
+    <define name="NOMINAL_AIRSPEED" value="15." unit="m/s"/>
+    <define name="CARROT" value="5." unit="s"/>
+    <define name="KILL_MODE_DISTANCE" value="(1.5*MAX_DIST_FROM_HOME)"/>
+    <define name="CONTROL_RATE" value="60" unit="Hz"/>
+<!--    <define name="XBEE_INIT" value="\"ATPL2\rATRN1\rATTT80\r\""/> -->
+<!--    <define name="NO_XBEE_API_INIT" value="TRUE"/> -->
+    <define name="ALT_KALMAN_ENABLED" value="FALSE"/>
+
+    <define name="TRIGGER_DELAY" value="1."/>
+    <define name="DEFAULT_CIRCLE_RADIUS" value="120."/>
+    <define name="MIN_CIRCLE_RADIUS" value="50."/>
+  </section>
+ 
+  <section name="VERTICAL CONTROL" prefix="V_CTL_">
+
+    <define name="POWER_CTL_BAT_NOMINAL" value="11.1" unit="volt"/>
+    <!-- outer loop proportional gain -->
+    <define name="ALTITUDE_PGAIN" value="-0.06"/> <!-- -0.024 -->
+    <!-- outer loop saturation -->
+    <define name="ALTITUDE_MAX_CLIMB" value="2."/>
+
+    <!-- auto throttle inner loop -->
+    <define name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE" value="0.45"/>
+    <define name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value="0.35"/>
+    <define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="0.85"/>
+    <define name="AUTO_THROTTLE_LOITER_TRIM" value="1000"/>
+    <define name="AUTO_THROTTLE_DASH_TRIM" value="-1200"/>
+    <define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.2" 
unit="%/(m/s)"/>
+    <define name="AUTO_THROTTLE_PGAIN" value="-0.023"/> <!-- -0.012 -->
+    <define name="AUTO_THROTTLE_IGAIN" value="0.01"/>
+    <define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.05"/>
+
+    <!-- auto pitch inner loop -->
+    <define name="AUTO_PITCH_PGAIN" value="-0.06"/> <!-- -0.03 -->
+    <define name="AUTO_PITCH_IGAIN" value="0.0"/>
+    <define name="AUTO_PITCH_MAX_PITCH" value="0.35"/>
+    <define name="AUTO_PITCH_MIN_PITCH" value="-0.35"/>
+
+   <define name="THROTTLE_SLEW" value="0.1"/>
+
+  </section>
+
+  <section name="HORIZONTAL CONTROL" prefix="H_CTL_">
+    <define name="COURSE_PGAIN" value="-0.9"/>
+    <define name="ROLL_MAX_SETPOINT" value="0.70" unit="radians"/> <!-- 0.5 -->
+    <define name="PITCH_MAX_SETPOINT" value="0.5" unit="radians"/>
+    <define name="PITCH_MIN_SETPOINT" value="-0.5" unit="radians"/>
+
+    <define name="ROLL_PGAIN" value="6600."/>
+    <define name="AILERON_OF_THROTTLE" value="0.0"/>
+    <define name="PITCH_PGAIN" value="-5500."/>
+    <define name="PITCH_DGAIN" value="0.4"/>
+
+    <define name="ELEVATOR_OF_ROLL" value="2400"/>
+
+    <!--define name="ROLL_ATTITUDE_GAIN" value="-7500"/>
+    <define name="ROLL_RATE_GAIN" value="-1500"/-->
+
+  </section>
+
+  <section name="NAV">
+    <define name="NAV_PITCH" value="0."/>
+    <define name="NAV_GLIDE_PITCH_TRIM" value="0"/>
+  </section>
+
+  <section name="AGGRESSIVE" prefix="AGR_">
+    <define name="BLEND_START" value="50"/><!-- Altitude Error to Initiate 
Aggressive Climb CANNOT BE ZERO!!-->
+    <define name="BLEND_END" value="15"/><!-- Altitude Error to Blend 
Aggressive to Regular Climb Modes  CANNOT BE ZERO!!-->
+    <define name="CLIMB_THROTTLE" value="0.9"/><!-- Gaz for Aggressive Climb 
-->
+    <define name="CLIMB_PITCH" value="0.35"/><!-- Pitch for Aggressive Climb 
-->
+    <define name="DESCENT_THROTTLE" value="0.05"/><!-- Gaz for Aggressive 
Decent -->
+    <define name="DESCENT_PITCH" value="-0.35"/><!-- Pitch for Aggressive 
Decent -->
+    <define name="CLIMB_NAV_RATIO" value="0.8"/><!-- Percent Navigation for 
Altitude Error Equal to Start Altitude -->
+    <define name="DESCENT_NAV_RATIO" value="1.0"/>
+    </section>
+
+  <section name="FAILSAFE" prefix="FAILSAFE_">
+       <define name="DELAY_WITHOUT_GPS" value="2" unit="s"/>
+       <define name="DEFAULT_THROTTLE" value="0.3" unit="%"/>
+       <define name="DEFAULT_ROLL" value="0.3" unit="rad"/>
+       <define name="DEFAULT_PITCH" value="0.5" unit="rad"/>
+       <define name="HOME_RADIUS" value="100" unit="m"/>
+</section>
+
+ <section name="DATALINK" prefix="DATALINK_">
+    <define name="DEVICE_TYPE" value="XBEE"/>
+    <define name="DEVICE_ADDRESS" value="...."/>
+  </section>
+ 
+ <section name="SIMU">
+    <define name="YAW_RESPONSE_FACTOR" value="0.5"/>
+ </section>
+
+  <section name="MICROMAG">
+
+    <define name="MM_SS_PIN" value="20"/>
+    <define name="MM_SS_IODIR" value="IO0DIR"/>
+    <define name="MM_SS_IOSET" value="IO0SET"/>
+    <define name="MM_SS_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_RESET_PIN" value="29"/>
+    <define name="MM_RESET_IODIR" value="IO0DIR"/>
+    <define name="MM_RESET_IOSET" value="IO0SET"/>
+    <define name="MM_RESET_IOCLR" value="IO0CLR"/>
+
+    <define name="MM_DRDY_PINSEL" value="PINSEL1"/>
+    <define name="MM_DRDY_PINSEL_BIT" value="0"/>
+    <define name="MM_DRDY_PINSEL_VAL" value="1"/>
+    <define name="MM_DRDY_EINT" value="0"/>
+    <define name="MM_DRDY_VIC_IT" value="VIC_EINT0"/>
+
+  </section>
+
+ <makefile>
+CONFIG = \"tiny_2_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=XBeeTransport 
-DXBEE_UART=Uart1 -DDATALINK=XBEE -DUART1_BAUD=B57600
+ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.c
+
+#TRANSPARENT
+#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
+ap.srcs += $(SRC_ARCH)/adc_hw.c
+
+ap.CFLAGS += -DGPS -DUBX -DUSE_UART0 -DGPS_LINK=Uart0 -DUART0_BAUD=B38400 
-DGPS_USE_LATLONG
+# -DGPS_LED=2
+ap.srcs += gps_ubx.c gps.c latlong.c
+
+ap.CFLAGS += -DINFRARED -DALT_KALMAN -DWIND_INFO -DWIND_INFO_RET
+ap.srcs += infrared.c estimator.c
+
+ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM
+ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c
+
+ap.srcs += nav_line.c
+ap.srcs += nav_survey_rectangle.c
+
+ap.srcs += humid_sht.c
+ap.CFLAGS += -DUSE_HUMID_SHT -DDAT_PIN=30 -DSCK_PIN=4
+
+ap.CFLAGS += -DUSE_I2C0
+ap.srcs += i2c.c $(SRC_ARCH)/i2c_hw.c
+
+ap.CFLAGS += -DUSE_AIRSPEED_ETS
+ap.srcs += airspeed_ets_o.c
+
+ap.CFLAGS += -DUSE_IR_MLX
+ap.srcs += ir_mlx.c
+
+ap.CFLAGS += -DUSE_BARO_SCP
+ap.srcs += baro_scp_i2c.c
+
+ap.CFLAGS += -DMICROMAG_DRDY_VIC_SLOT=12 -DSSP_VIC_SLOT=11 -DUSE_MICROMAG_FW
+ap.srcs += micromag_fw.c $(SRC_ARCH)/micromag_fw_hw.c
+
+# Config for SITL simulation
+include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
+sim.CFLAGS += -DBOARD_CONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN
+sim.srcs += nav_line.c nav_survey_rectangle.c
+
+
+  </makefile>
+</airframe>

Modified: paparazzi3/branches/campaign2010/conf/airframes/logger_sd.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/airframes/logger_sd.xml       
2010-09-27 20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/conf/airframes/logger_sd.xml       
2010-09-27 21:23:52 UTC (rev 5962)
@@ -51,8 +51,8 @@
 #ap.CFLAGS += -DLOG_PPRZ
 
 #set the speed
-ap.CFLAGS += -DUSE_UART0 -DUART0_BAUD=B9600 -DUSE_UART0_RX_ONLY
-ap.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B9600 -DUSE_UART1_RX_ONLY
+ap.CFLAGS += -DUSE_UART0 -DUART0_BAUD=B57600 -DUSE_UART0_RX_ONLY
+ap.CFLAGS += -DUSE_UART1 -DUART1_BAUD=B57600 -DUSE_UART1_RX_ONLY
 ap.srcs += $(SRC_ARCH)/uart_hw.c
 
 #set SPI interface for SD card (0 or 1)

Modified: paparazzi3/branches/campaign2010/conf/flight_plans/grosslobke_demo.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/flight_plans/grosslobke_demo.xml      
2010-09-27 20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/conf/flight_plans/grosslobke_demo.xml      
2010-09-27 21:23:52 UTC (rev 5962)
@@ -1,6 +1,7 @@
 <!DOCTYPE flight_plan SYSTEM "flight_plan.dtd">
 
-<flight_plan alt="170" ground_alt="68" lat0="52.26483" lon0="9.99394" 
max_dist_from_home="1500" name="Gross Lobke Demo" qfu="270" 
security_height="60">
+<flight_plan ALT="130" GROUND_ALT="68" LAT0="52.26483" LON0="9.99394" 
MAX_DIST_FROM_HOME="1500" NAME="Gross Lobke, Demo" QFU="270" 
SECURITY_HEIGHT="60">
+
   <header>
 #include "bomb.h"
 #include "nav_line.h"
@@ -10,13 +11,14 @@
     <waypoint name="HOME" x="15.0" y="5.0"/>
     <waypoint name="1" x="-180." y="35."/>
     <waypoint name="2" x="156.8" y="22.3"/>
-    <waypoint name="CR" x="0.0" y="160.0"/>
+    <waypoint name="CR" x="51.2" y="150.1"/>
     <waypoint name="S1" x="-200" y="-200"/>
     <waypoint name="S2" x="300" y="400"/>
-    <waypoint alt="140.0" name="START" x="-180" y="-0.0"/>
+    <waypoint alt="150.0" name="START" x="-2.2" y="191.7"/>
     <waypoint alt="68.0" name="TARGET" x="-56.9" y="7.8"/>
-    <waypoint alt="68.0" name="TD" x="-2.3" y="18.2"/>
-    <waypoint alt="120.0" name="AF" x="170.0" y="45.0"/>
+    <waypoint alt="68.0" name="TD" x="-45.6" y="9.1"/>
+    <waypoint alt="150.0" name="AF" x="309.7" y="38.4"/>
+    <waypoint alt="120.0" name="AFC" x="126.3" y="26.0"/>
     <waypoint alt="120.0" name="BASELEG" x="40." y="-130."/>
     <waypoint alt="120.0" name="_BASELEG" x="40." y="-130."/>
     <waypoint alt="120.0" name="RELEASE" x="40." y="-110."/>
@@ -24,15 +26,27 @@
   </waypoints>
   <blocks>
     <block name="start">
-      <attitude pitch="20" roll="0" throttle="0.8" 
until="(estimator_flight_time > 3)" vmode="throttle"/>
+      <attitude pitch="20" roll="0" throttle="0.99" 
until="(estimator_flight_time > 3)" vmode="throttle"/>
       <go wp="START"/>
+      <deroute block="Land Right AF-TD"/>
     </block>
     <block name="wait" strip_button="wait">
       <circle radius="nav_radius" wp="CR"/>
     </block>
+    <block name="climb">
+      <circle pitch="50" radius="nav_radius" throttle="0.99" 
until="(estimator_z > ground_alt+300)" vmode="throttle" wp="CR"/>
+      <deroute block="wait"/>
+    </block>
     <block name="survey">
       <survey_rectangle grid="150" wp1="S1" wp2="S2"/>
     </block>
+    <block name="profile_up land" strip_button="Profile Up Land" 
strip_icon="up_profile.png">
+      <circle radius="nav_radius" wp="1"/>
+    </block>
+    <block name="profile_down land" strip_button="Profile Down Land" 
strip_icon="down_profile.png">
+      <circle pitch="RadOfDeg(-10)" radius="nav_radius" throttle="0" 
until="(ground_alt+100 > estimator_z)" vmode="throttle" wp="1"/>
+      <deroute block="wait"/>
+    </block>
     <block name="Line 1-2" strip_button="Line (wp 1-2)" strip_icon="line.png">
       <call fun="nav_line_init()"/>
       <call fun="nav_line(WP_1, WP_2, nav_radius)"/>
@@ -79,45 +93,16 @@
       <circle radius="nav_radius" until="NavCircleCount() > 0.5" 
wp="_BASELEG"/>
       <circle radius="nav_radius" 
until="NavQdrCloseTo(DegOfRad(baseleg_out_qdr)-10) && 20 > fabs(estimator_z - 
WaypointAlt(WP__BASELEG))" wp="_BASELEG"/>
     </block>
+    <block name="gerade">
+      <go from="AF" hmode="route" wp="AFC"/>
+    </block>
     <block name="final">
       <exception cond="ground_alt + 10 > estimator_z" deroute="flare"/>
-      <go from="AF" hmode="route" vmode="glide" wp="TD"/>
+      <go from="AFC" hmode="route" vmode="glide" wp="TD"/>
     </block>
     <block name="flare">
       <go approaching_time="0" from="AF" hmode="route" throttle="0.0" 
vmode="throttle" wp="TD"/>
-      <attitude roll="0.0" throttle="0.0" until="FALSE" vmode="throttle"/>
+      <attitude pitch="20.0" roll="0.0" throttle="0.0" until="FALSE" 
vmode="throttle"/>
     </block>
-
-    <!--block name="Bomb Right">
-      <set value="DEFAULT_CIRCLE_RADIUS" var="nav_radius"/>
-      <deroute block="bomb"/>
-    </block>
-    <block name="bomb" strip_button="Bomb">
-      <set value="BombComputeApproach(WP_TARGET, WP_START, nav_radius)" 
var="unit"/>
-      <circle radius="nav_radius" 
until="NavQdrCloseTo(DegOfRad(bomb_start_qdr)-10)" wp="BASELEG"/>
-    </block>
-    <block name="align">
-      <exception cond="BombUpdateRelease(WP_TARGET)" deroute="wait"/>
-      <go approaching_time="bomb_trigger_delay" from="START" hmode="route" 
wp="RELEASE"/>
-    </block>
-    <block name="shoot">
-      <set value="BombShoot()" var="unit"/>
-      <go from="RELEASE" hmode="route" wp="CLIMB"/>
-      <set value="BombCloseHatch()" var="unit"/>
-      <deroute block="wait"/>
-    </block>
-    <block name="close">
-      <set value="BombCloseHatch()" var="unit"/>
-      <deroute block="wait"/>
-    </block-->
-
-    <!--block NAME="roll" strip_button="Roll">
-     <set value="TRUE" var="h_ctl_disabled"/>
-     <set value="(-0.75*MAX_PPRZ)" var="h_ctl_aileron_setpoint"/>
-     <while cond="3.> stage_time && (estimator_phi > 0 || -M_PI_2 > 
estimator_phi)"/>
-     <set value="FALSE" var="h_ctl_disabled"/>
-     <return/>
-    </block-->
-
   </blocks>
 </flight_plan>

Modified: paparazzi3/branches/campaign2010/conf/messages.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/messages.xml  2010-09-27 20:34:50 UTC 
(rev 5961)
+++ paparazzi3/branches/campaign2010/conf/messages.xml  2010-09-27 21:23:52 UTC 
(rev 5962)
@@ -376,6 +376,11 @@
     <field name="msg" type="uint8[]"/>
   </message>
 
+  <message name="AIRSPEED_ETS" id="57">
+      <field name="adc" type="uint16"/>
+      <field name="airspeed"  type="uint16" unit="cm/s" alt_unit="m/s" 
alt_unit_coef="0.01"></field>
+  </message>
+
   <message name="H_CTL_A" id="60">
     <field name="roll_sum_err" type="float"/>
     <field name="ref_roll_angle" type="float" unit="rad" alt_unit="deg" 
alt_unit_coef="57.3"/>
@@ -527,6 +532,13 @@
       <field name="throttle"   type="uint16"/>
  </message>
 
+  <message name="MLX_STATUS" id="96">
+      <field name="itemp_case" type="uint16"/>
+      <field name="temp_case"  type="int32" unit="100x_deg_celsius"/>
+      <field name="itemp_obj"  type="uint16"/>
+      <field name="temp_obj"   type="int32" unit="100x_deg_celsius"/>
+  </message>
+
   <message name="PPM" id="100">
     <field name="ppm_rate" type="uint8"></field>
     <field name="values" type="uint16[]" unit="ticks"/>

Added: paparazzi3/branches/campaign2010/conf/radios/mc24r.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/radios/mc24r.xml                      
        (rev 0)
+++ paparazzi3/branches/campaign2010/conf/radios/mc24r.xml      2010-09-27 
21:23:52 UTC (rev 5962)
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!-- Graupner/JR MC24 with robbe R6107SP -->
+<!-- $Id: mc24.xml 3610 2009-07-02 16:35:18Z poine $
+--
+-- (c) 2003 Pascal Brisset, Antoine Drouin
+--
+-- This file is part of paparazzi.
+--
+-- paparazzi is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 2, or (at your option)
+-- any later version.
+--
+-- paparazzi is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with paparazzi; see the file COPYING.  If not, write to
+-- the Free Software Foundation, 59 Temple Place - Suite 330,
+-- Boston, MA 02111-1307, USA.  
+-->
+
+<!--
+-- Attributes of root (Radio) tag :
+-- name: name of RC
+-- data_min: min width of a pulse to be considered as a data pulse
+-- data_max: max width of a pulse to be considered as a data pulse
+-- sync_min: min width of a pulse to be considered as a synchro pulse
+-- sync_max: max width of a pulse to be considered as a synchro pulse
+-- min, max and sync are expressed in micro-seconds
+-->
+
+<!-- 
+-- Attributes of channel tag :
+-- ctl: name of the command on the transmitter - only for displaying
+-- no: order in the PPM frame
+-- function: logical command
+-- averaged: channel filtered through several frames (for discrete commands)
+-- min: minimum pulse length (micro-seconds)
+-- max: maximum pulse length (micro-seconds)
+-- neutral: neutral pulse length (micro-seconds)
+-- Note: a command may be reversed by exchanging min and max values
+-->
+
+
+
+<!DOCTYPE radio SYSTEM "radio.dtd">
+<radio name="mc24r" data_min="800" data_max="2200" sync_min="5000" 
sync_max="25000" pulse_type="POSITIVE">
+  <channel ctl="C" function="ROLL"     min="1096" neutral="1500" max="1900" 
average="0"/>
+  <channel ctl="B" function="PITCH"    min="1900" neutral="1500" max="1096" 
average="0"/>
+  <channel ctl="D" function="THROTTLE" min="1096" neutral="1096" max="1900" 
average="0"/>
+  <channel ctl="A" function="YAW"      min="1096" neutral="1500" max="1900" 
average="0"/>
+  <channel ctl="H" function="MODE"     min="966"  neutral="1500" max="2025" 
average="1"/>
+  <channel ctl="E" function="GAIN1"    min="1096" neutral="1500" max="1900" 
average="1"/>
+  <channel ctl="F" function="CALIB"    min="1096" neutral="1500" max="1900" 
average="0"/>
+</radio>
+  

Added: paparazzi3/branches/campaign2010/conf/radios/t6ex.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/radios/t6ex.xml                       
        (rev 0)
+++ paparazzi3/branches/campaign2010/conf/radios/t6ex.xml       2010-09-27 
21:23:52 UTC (rev 5962)
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!-- Futaba T6EX with robbe R6107SP, mode @ yaw -->
+<!-- $Id: t6ex.xml 3610 2009-07-02 16:35:18Z poine $
+--
+-- (c) 2003 Pascal Brisset, Antoine Drouin
+--
+-- This file is part of paparazzi.
+--
+-- paparazzi is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 2, or (at your option)
+-- any later version.
+--
+-- paparazzi is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with paparazzi; see the file COPYING.  If not, write to
+-- the Free Software Foundation, 59 Temple Place - Suite 330,
+-- Boston, MA 02111-1307, USA.  
+-->
+
+<!--
+-- Attributes of root (Radio) tag :
+-- name: name of RC
+-- data_min: min width of a pulse to be considered as a data pulse
+-- data_max: max width of a pulse to be considered as a data pulse
+-- sync_min: min width of a pulse to be considered as a synchro pulse
+-- sync_max: max width of a pulse to be considered as a synchro pulse
+-- min, max and sync are expressed in micro-seconds
+-->
+
+<!-- 
+-- Attributes of channel tag :
+-- ctl: name of the command on the transmitter - only for displaying
+-- no: order in the PPM frame
+-- function: logical command
+-- averaged: channel filtered through several frames (for discrete commands)
+-- min: minimum pulse length (micro-seconds)
+-- max: maximum pulse length (micro-seconds)
+-- neutral: neutral pulse length (micro-seconds)
+-- Note: a command may be reversed by exchanging min and max values
+-->
+
+
+
+<!DOCTYPE radio SYSTEM "radio.dtd">
+<radio name="T6EX_2.4" data_min="800" data_max="2200" sync_min="5000" 
sync_max="25000" pulse_type="POSITIVE">
+  <channel ctl="A" function="ROLL"     min="1900" neutral="1500" max="1096" 
average="0"/>
+  <channel ctl="B" function="PITCH"    min="1096" neutral="1500" max="1900" 
average="0"/>
+  <channel ctl="C" function="THROTTLE" min="1900" neutral="1900" max="1096" 
average="0"/>
+  <channel ctl="D" function="MODE"     min="1096" neutral="1500" max="1900" 
average="1"/>
+  <channel ctl="E" function="GAIN1"    min="1096" neutral="1500" max="1900" 
average="1"/>
+  <channel ctl="F" function="CALIB"    min="1096" neutral="1500" max="1900" 
average="0"/>
+  <channel ctl="G" function="YAW"      min="1096" neutral="1500" max="1900" 
average="0"/>
+</radio>
+  

Modified: paparazzi3/branches/campaign2010/conf/settings/tuning.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/settings/tuning.xml   2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/conf/settings/tuning.xml   2010-09-27 
21:23:52 UTC (rev 5962)
@@ -50,7 +50,7 @@
         <dl_setting MAX="25000" MIN="000" STEP="250" VAR="h_ctl_roll_pgain" 
shortname="roll_pgain" module="fw_h_ctl"/>
         <dl_setting MAX="1" MIN="0" STEP="0.05" VAR="h_ctl_roll_max_setpoint" 
shortname="max_roll" param="H_CTL_ROLL_MAX_SETPOINT"/>
         <dl_setting MAX="000" MIN="-25000" STEP="250" VAR="h_ctl_pitch_pgain" 
shortname="pitch_pgain" param="H_CTL_PITCH_PGAIN"/>
-        <dl_setting MAX="0" MIN="-50000" STEP="10" VAR="h_ctl_pitch_dgain" 
shortname="pitch_dgain" param="H_CTL_PITCH_DGAIN"/>
+        <dl_setting MAX="20" MIN="0" STEP="0.1" VAR="h_ctl_pitch_dgain" 
shortname="pitch_dgain" param="H_CTL_PITCH_DGAIN"/>
         <dl_setting MAX="5000" MIN="0" STEP="100" VAR="h_ctl_elevator_of_roll" 
shortname="elevator_of_roll" param="H_CTL_ELEVATOR_OF_ROLL"/>
         <dl_setting MAX="5000" MIN="0" STEP="100" 
VAR="h_ctl_aileron_of_throttle" shortname="aileron_of_throttle"/>
 

Modified: paparazzi3/branches/campaign2010/conf/telemetry/default.xml
===================================================================
--- paparazzi3/branches/campaign2010/conf/telemetry/default.xml 2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/conf/telemetry/default.xml 2010-09-27 
21:23:52 UTC (rev 5962)
@@ -25,6 +25,7 @@
       <message name="GYRO_RATES"     period="1.1"/>
       <message name="SURVEY"         period="2.1"/>
       <message name="GPS_SOL"        period="2.0"/>
+      <message name="IMU_ACCEL_RAW"  period=".1"/>
     </mode>
     <mode name="minimal">
       <message name="ALIVE"          period="5"/>

Added: paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.c               
                (rev 0)
+++ paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.c       
2010-09-27 21:23:52 UTC (rev 5962)
@@ -0,0 +1,196 @@
+/*
+ * Driver for the EagleTree Systems Airspeed Sensor
+ * Has only been tested with V3 of the sensor hardware
+ *
+ * Notes:
+ * Connect directly to TWOG/Tiny I2C port. Multiple sensors can be chained 
together.
+ * Sensor should be in the proprietary mode (default) and not in 3rd party 
mode.
+ * See conf/airframes/easystar2.xml for a configuration example.
+ *
+ * Sensor module wire assignments:
+ * Red wire: 5V
+ * White wire: Ground
+ * Yellow wire: SDA
+ * Brown wire: SCL
+ *
+ * Copyright (C) 2009 Vassilis Varveropoulos
+ *
+ * This file is part of paparazzi.
+ *
+ * paparazzi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * paparazzi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with paparazzi; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "airspeed_ets_o.h"
+#include "i2c.h"
+#include "nav.h"
+#include <math.h>
+
+
+#include "interrupt_hw.h"
+#include "init_hw.h"
+#include "adc.h"
+#include "fw_h_ctl.h"
+#include "fw_v_ctl.h"
+#include "gps.h"
+#include "infrared.h"
+#include "gyro.h"
+#include "ap_downlink.h"
+#include "nav.h"
+#include "autopilot.h"
+#include "estimator.h"
+#include "settings.h"
+#include "cam.h"
+#include "link_mcu.h"
+#include "sys_time.h"
+#include "flight_plan.h"
+#include "datalink.h"
+#include "xbee.h"
+#include "gpio.h"
+#include "light.h"
+
+
+
+#ifdef SITL
+#include "gps.h"
+#endif
+
+#define AIRSPEED_ETS_ADDR 0xEA
+#define AIRSPEED_ETS_REG 0x07
+#ifndef AIRSPEED_ETS_SCALE
+#define AIRSPEED_ETS_SCALE 1.8
+#endif
+#ifndef AIRSPEED_ETS_OFFSET
+#define AIRSPEED_ETS_OFFSET 0
+#endif
+#define AIRSPEED_ETS_OFFSET_MAX 1750
+#define AIRSPEED_ETS_OFFSET_MIN 1450
+#define AIRSPEED_ETS_OFFSET_NBSAMPLES_INIT 40
+#define AIRSPEED_ETS_OFFSET_NBSAMPLES_AVRG 60
+#define AIRSPEED_ETS_NBSAMPLES_AVRG 10
+
+// Global variables
+uint16_t airspeed_ets_raw;
+uint16_t airspeed_ets_offset;
+bool_t airspeed_ets_valid;
+float airspeed_ets_f;
+uint16_t airspeed_ets_uint;
+int airspeed_ets_buffer_idx;
+float airspeed_ets_buffer[AIRSPEED_ETS_NBSAMPLES_AVRG];
+
+// Local variables
+volatile bool_t airspeed_ets_i2c_done;
+bool_t airspeed_ets_offset_init;
+uint32_t airspeed_ets_offset_tmp;
+uint16_t airspeed_ets_cnt;
+
+int airspeed_ets_available( void ) {
+  int temp = airspeed_ets_valid;
+  airspeed_ets_valid = FALSE;
+  return temp;
+}
+
+void airspeed_ets_init( void ) {
+  int n;
+  airspeed_ets_raw = 0;
+  airspeed_ets_f = 0.0;
+  airspeed_ets_uint = 0;
+  airspeed_ets_offset = 0;
+  airspeed_ets_offset_tmp = 0;
+  airspeed_ets_i2c_done = FALSE;
+  airspeed_ets_valid = TRUE;
+  airspeed_ets_offset_init = FALSE;
+  airspeed_ets_cnt = AIRSPEED_ETS_OFFSET_NBSAMPLES_INIT + 
AIRSPEED_ETS_OFFSET_NBSAMPLES_AVRG;
+  i2c0_buf[0] = 0;
+  i2c0_buf[1] = 0;
+  airspeed_ets_buffer_idx = 0;
+  for (n=0; n < AIRSPEED_ETS_NBSAMPLES_AVRG; ++n)
+    airspeed_ets_buffer[n] = 0.0;
+}
+
+void airspeed_ets_periodic( void ) {
+  // Initiate next read
+  i2c0_buf[0] = 0;
+  i2c0_buf[1] = 0;
+  airspeed_ets_i2c_done = FALSE;
+  i2c0_receive(AIRSPEED_ETS_ADDR, 2, &airspeed_ets_i2c_done); 
+//LED_TOGGLE(3);
+}      
+
+void airspeed_ets_event( void ) {
+  int n;
+  float airspeed_tmp = 0.0;
+
+  // Read raw value
+  if(airspeed_ets_i2c_done ==TRUE)  {
+    airspeed_ets_i2c_done = FALSE;
+//  if (i2c0_status == I2C_IDLE) {
+    // Get raw airspeed from buffer
+    airspeed_ets_raw = ((uint16_t)(i2c0_buf[1]) << 8) | 
(uint16_t)(i2c0_buf[0]);
+    // Check if this is valid airspeed
+    if (airspeed_ets_raw == 0)
+      airspeed_ets_valid = FALSE;
+    else
+      airspeed_ets_valid = TRUE;
+  }
+  else
+  {
+    airspeed_ets_valid = FALSE;
+  }
+  // Continue only if a new airspeed value was received  
+  if (airspeed_ets_valid == TRUE) {  
+    // Calculate offset average if not done already
+    if (!airspeed_ets_offset_init) {
+      --airspeed_ets_cnt;
+      // Check if averaging completed
+      if (airspeed_ets_cnt == 0) {
+        // Calculate average
+        airspeed_ets_offset = (uint16_t)(airspeed_ets_offset_tmp / 
AIRSPEED_ETS_OFFSET_NBSAMPLES_AVRG);
+        // Limit offset
+        if (airspeed_ets_offset < AIRSPEED_ETS_OFFSET_MIN)
+          airspeed_ets_offset = AIRSPEED_ETS_OFFSET_MIN;
+        if (airspeed_ets_offset > AIRSPEED_ETS_OFFSET_MAX)
+          airspeed_ets_offset = AIRSPEED_ETS_OFFSET_MAX;
+        airspeed_ets_offset_init = TRUE;
+      }
+      // Check if averaging needs to continue
+      else if (airspeed_ets_cnt <= AIRSPEED_ETS_OFFSET_NBSAMPLES_AVRG)
+        airspeed_ets_offset_tmp += airspeed_ets_raw;
+    }    
+    // Convert raw to m/s
+    if (airspeed_ets_offset_init && airspeed_ets_raw > airspeed_ets_offset)
+      airspeed_tmp = AIRSPEED_ETS_SCALE * sqrt( 
(float)(airspeed_ets_raw-airspeed_ets_offset) ) - AIRSPEED_ETS_OFFSET;
+    else
+      airspeed_tmp = 0.0;
+    // Airspeed should always be positive
+    if (airspeed_tmp < 0.0)
+      airspeed_tmp = 0.0;
+    // Moving average
+    airspeed_ets_buffer[airspeed_ets_buffer_idx++] = airspeed_tmp;
+    if (airspeed_ets_buffer_idx >= AIRSPEED_ETS_NBSAMPLES_AVRG)
+      airspeed_ets_buffer_idx = 0;
+    airspeed_ets_f = 0.0;
+    for (n = 0; n < AIRSPEED_ETS_NBSAMPLES_AVRG; ++n)
+      airspeed_ets_f += airspeed_ets_buffer[n];
+    airspeed_ets_f = airspeed_ets_f / (float)AIRSPEED_ETS_NBSAMPLES_AVRG;
+    airspeed_ets_uint =  airspeed_ets_f * 100.0;
+    DOWNLINK_SEND_AIRSPEED_ETS(DefaultChannel, &airspeed_ets_raw, 
&airspeed_ets_uint);
+//LED_TOGGLE(2);
+  } else {
+    airspeed_ets_f = 0.0;
+  }  
+}
+

Added: paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.h
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.h               
                (rev 0)
+++ paparazzi3/branches/campaign2010/sw/airborne/airspeed_ets_o.h       
2010-09-27 21:23:52 UTC (rev 5962)
@@ -0,0 +1,19 @@
+/*
+ * Driver for the EagleTree Systems Airspeed Sensor
+ */
+
+#ifndef AIRSPEED_ETS_H
+#define AIRSPEED_ETS_H
+
+#include "std.h"
+
+extern void airspeed_ets_periodic( void );
+extern void airspeed_ets_event( void );
+extern void airspeed_ets_init( void );
+extern int airspeed_ets_available( void );
+extern uint16_t airspeed_ets_raw;
+extern uint16_t airspeed_ets_offset;
+extern bool_t airspeed_ets_valid;
+extern float airspeed_ets;
+
+#endif // AIRSPEED_ETS_H

Modified: paparazzi3/branches/campaign2010/sw/airborne/ap_downlink.h
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/ap_downlink.h  2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/airborne/ap_downlink.h  2010-09-27 
21:23:52 UTC (rev 5962)
@@ -170,11 +170,17 @@
 #define PERIODIC_SEND_BARO_MS5534A(_chan) {}
 #endif
 
-#ifdef USE_BARO_SCP
-#include "baro_scp.h"
-#define PERIODIC_SEND_SCP_STATUS(_chan) DOWNLINK_SEND_SCP_STATUS(_chan, 
&baro_scp_pressure, &baro_scp_temperature)
+//#ifdef USE_BARO_SCP
+//#include "baro_scp.h"
+//#define PERIODIC_SEND_SCP_STATUS(_chan) DOWNLINK_SEND_SCP_STATUS(_chan, 
&baro_scp_pressure, &baro_scp_temperature)
+//#else
+#define PERIODIC_SEND_SCP_STATUS(_chan) {}
+//#endif
+
+#ifdef USE_ACCEL_MEMSIC
+#define PERIODIC_SEND_IMU_ACCEL_RAW(_chan) DOWNLINK_SEND_IMU_ACCEL_RAW(_chan, 
&maccel[0], &maccel[1], &maccel[2])
 #else
-#define PERIODIC_SEND_SCP_STATUS(_chan) {}
+#define PERIODIC_SEND_IMU_ACCEL_RAW(_chan) {}
 #endif
 
 #ifdef USE_AIRSPEED

Modified: paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.c 2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.c 2010-09-27 
21:23:52 UTC (rev 5962)
@@ -33,14 +33,14 @@
 void baro_scp_init( void ) {
   baro_scp_status = BARO_SCP_UNINIT;
   baro_scp_i2c_done = FALSE;
+  baro_scp_available = FALSE;
 }
 
 void baro_scp_periodic( void ) {
   if (baro_scp_status == BARO_SCP_UNINIT && cpu_time_sec > 1) {
     baro_scp_start_high_res_measurement();
-    baro_scp_status =  BARO_SCP_IDLE;
-  } else if (baro_scp_i2c_done) {
-    if (baro_scp_status == BARO_SCP_IDLE) {
+    baro_scp_status = BARO_SCP_IDLE;
+  } else if (baro_scp_status == BARO_SCP_IDLE) {
 
       /* initial measurement */
 
@@ -49,19 +49,10 @@
       baro_scp_status = BARO_SCP_RD_TEMP;
       baro_scp_i2c_done = FALSE;
       i2c0_transceive(SCP1000_SLAVE_ADDR, 1, 2, &baro_scp_i2c_done);
-//LED_ON(2);
     }
 
     else if (baro_scp_status == BARO_SCP_RD_TEMP) {
 
-      /* read two byte temperature */
-      baro_scp_temperature  = i2c0_buf[0] << 8;
-      baro_scp_temperature |= i2c0_buf[1];
-      if (baro_scp_temperature & 0x2000) {
-        baro_scp_temperature |= 0xC000;
-      }
-      baro_scp_temperature *= 5;
-
       /* start one byte msb pressure */
       i2c0_buf[0] = 0x7F;
       baro_scp_status = BARO_SCP_RD_PRESS_0;
@@ -71,9 +62,6 @@
 
     else if (baro_scp_status == BARO_SCP_RD_PRESS_0) {
 
-      /* read one byte pressure */
-      baro_scp_pressure = i2c0_buf[0] << 16;
-
       /* start two byte lsb pressure */
       i2c0_buf[0] = 0x80;
       baro_scp_status = BARO_SCP_RD_PRESS_1;
@@ -83,18 +71,48 @@
 
     else if (baro_scp_status == BARO_SCP_RD_PRESS_1) {
 
+      /* start two byte temperature */
+      i2c0_buf[0] = 0x81;
+      baro_scp_status = BARO_SCP_RD_TEMP;
+      baro_scp_i2c_done = FALSE;
+      i2c0_transceive(SCP1000_SLAVE_ADDR, 1, 2, &baro_scp_i2c_done);
+    }     
+}
+
+void baro_scp_event( void ) {
+  if (baro_scp_i2c_done == TRUE) {
+    baro_scp_i2c_done = FALSE;
+    if (baro_scp_status == BARO_SCP_IDLE) {
+    }
+
+    else if (baro_scp_status == BARO_SCP_RD_TEMP) {
+
+      /* read two byte temperature */
+      baro_scp_temperature  = i2c0_buf[0] << 8;
+      baro_scp_temperature |= i2c0_buf[1];
+      if (baro_scp_temperature & 0x2000) {
+        baro_scp_temperature |= 0xC000;
+      }
+      baro_scp_temperature *= 5;
+    }
+
+    else if (baro_scp_status == BARO_SCP_RD_PRESS_0) {
+
+      /* read one byte pressure */
+      baro_scp_pressure = i2c0_buf[0] << 16;
+    }
+
+    else if (baro_scp_status == BARO_SCP_RD_PRESS_1) {
+
       /* read two byte pressure */
       baro_scp_pressure |= i2c0_buf[0] << 8;
       baro_scp_pressure |= i2c0_buf[1];
       baro_scp_pressure *= 25;
       baro_scp_available = TRUE;
-//LED_TOGGLE(2);
+LED_TOGGLE(3);
 
-      /* start two byte temperature */
-      i2c0_buf[0] = 0x81;
-      baro_scp_status = BARO_SCP_RD_TEMP;
-      baro_scp_i2c_done = FALSE;
-      i2c0_transceive(SCP1000_SLAVE_ADDR, 1, 2, &baro_scp_i2c_done);
+//if ((i2c0_buf[0] == 0) && (i2c0_buf[1] == 0)) LED_TOGGLE(2);
+
     }     
   }
 }

Modified: paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.h
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.h 2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/airborne/baro_scp_i2c.h 2010-09-27 
21:23:52 UTC (rev 5962)
@@ -17,5 +17,6 @@
 
 void baro_scp_init(void);
 void baro_scp_periodic(void);
+void baro_scp_event(void);
 
 #endif

Added: paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.c                       
        (rev 0)
+++ paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.c       2010-09-27 
21:23:52 UTC (rev 5962)
@@ -0,0 +1,93 @@
+
+/** \file ir_mlx.c
+ *  \brief Melexis 90614 I2C
+ *
+ *   This reads the values for temperatures from the Melexis 90614 IR sensor 
through I2C.
+ */
+
+
+#include "ir_mlx.h"
+
+#include "sys_time.h"
+#include "i2c.h"
+#include "led.h"
+#include "ap_downlink.h"
+#include "settings.h"
+#include "cam.h"
+#include "link_mcu.h"
+#include "sys_time.h"
+#include "flight_plan.h"
+#include "datalink.h"
+#include "xbee.h"
+#include "gpio.h"
+#include "light.h"
+
+#include <string.h>
+
+uint8_t  ir_mlx_status;
+uint16_t ir_mlx_itemp_case;
+int32_t  ir_mlx_temp_case;
+uint16_t ir_mlx_itemp_obj;
+int32_t  ir_mlx_temp_obj;
+bool_t   ir_mlx_available;
+volatile bool_t ir_mlx_i2c_done;
+
+#define MLX90614_ADDR 0x06
+#define MLX90614_TA   0x06
+#define MLX90614_TOBJ 0x07
+
+
+//    printf("Ta    = %2.2f°C (0x%04X)\n", (tp*0.02)-273.15, tp);
+//    printf("Tobj1 = %2.2f°C (0x%04X)\n", (tp*0.02)-273.15, tp);
+
+
+void ir_mlx_init( void ) {
+  ir_mlx_status = IR_MLX_UNINIT;
+  ir_mlx_i2c_done = FALSE;
+  ir_mlx_available = FALSE;
+}
+
+void ir_mlx_periodic( void ) {
+  if (ir_mlx_status == IR_MLX_UNINIT && cpu_time_sec > 1) {
+    ir_mlx_status = IR_MLX_RD_CASE_TEMP;
+  } 
+
+  else if (ir_mlx_status == IR_MLX_RD_CASE_TEMP) {
+
+    /* start two byte obj temperature */
+    i2c0_buf[0] = MLX90614_TOBJ;
+    ir_mlx_status = IR_MLX_RD_OBJ_TEMP;
+    i2c0_transceive(MLX90614_ADDR, 1, 2, &ir_mlx_i2c_done);
+  }
+
+  else if (ir_mlx_status == IR_MLX_RD_OBJ_TEMP) {
+
+    /* start two byte case temperature */
+    i2c0_buf[0] = MLX90614_TA;
+    ir_mlx_status = IR_MLX_RD_CASE_TEMP;
+    i2c0_transceive(MLX90614_ADDR, 1, 2, &ir_mlx_i2c_done);
+  }
+}
+
+void ir_mlx_event( void ) {
+  if (ir_mlx_i2c_done == TRUE) {
+    ir_mlx_i2c_done = FALSE;
+    if (ir_mlx_status == IR_MLX_RD_CASE_TEMP) {
+
+      /* read two byte case temperature */
+      ir_mlx_itemp_case  = i2c0_buf[1] << 8;
+      ir_mlx_itemp_case |= i2c0_buf[0];
+      ir_mlx_temp_case = ir_mlx_itemp_case*2 - 27315;
+    }
+
+    else if (ir_mlx_status == IR_MLX_RD_OBJ_TEMP) {
+
+      /* read two byte case temperature */
+      ir_mlx_itemp_obj  = i2c0_buf[1] << 8;
+      ir_mlx_itemp_obj |= i2c0_buf[0];
+      ir_mlx_temp_obj = ir_mlx_itemp_obj*2 - 27315;
+      ir_mlx_available = TRUE;
+    }
+  }
+}
+

Added: paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.h
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.h                       
        (rev 0)
+++ paparazzi3/branches/campaign2010/sw/airborne/ir_mlx.h       2010-09-27 
21:23:52 UTC (rev 5962)
@@ -0,0 +1,23 @@
+#ifndef IR_MLX_H
+#define IR_MLX_H
+
+#include "std.h"
+
+#define IR_MLX_UNINIT         0
+#define IR_MLX_IDLE           1
+#define IR_MLX_RD_CASE_TEMP   2
+#define IR_MLX_RD_OBJ_TEMP    3
+
+extern uint8_t  ir_mlx_status;
+extern uint16_t ir_mlx_itemp_case;
+extern int32_t  ir_mlx_temp_case;
+extern uint16_t ir_mlx_itemp_obj;
+extern int32_t  ir_mlx_temp_obj;
+extern bool_t   ir_mlx_available;
+extern volatile bool_t ir_mlx_i2c_done;
+
+void ir_mlx_init(void);
+void ir_mlx_periodic(void);
+void ir_mlx_event(void);
+
+#endif

Modified: paparazzi3/branches/campaign2010/sw/airborne/main_ap.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/airborne/main_ap.c      2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/airborne/main_ap.c      2010-09-27 
21:23:52 UTC (rev 5962)
@@ -114,6 +114,18 @@
 #include "max11040.h"
 #endif
 
+#ifdef USE_AIRSPEED_ETS
+#include "airspeed_ets_o.h"
+#endif
+
+#ifdef USE_IR_MLX
+#include "ir_mlx.h"
+#endif
+
+#ifdef USE_MAG_HMC
+#include "mag_hmc5843.h"
+#endif
+
 #ifdef TRAFFIC_INFO
 #include "traffic_info.h"
 #endif
@@ -122,6 +134,14 @@
 #include "tcas.h"
 #endif
 
+#ifdef ADC
+#ifdef USE_ACCEL_MEMSIC
+struct adc_buf xaccel_adc_buf;
+struct adc_buf yaccel_adc_buf;
+uint16_t maccel[3] = {512};
+#endif
+#endif
+
 #ifdef USE_USB_SERIAL
 #include "usb_serial.h"
 #endif
@@ -130,10 +150,6 @@
 #include "micromag_fw.h"
 #endif
 
-#ifdef USE_AIRSPEED_ETS
-#include "airspeed_ets.h"
-#endif // USE_AIRSPEED_ETS
-
 #ifdef USE_BARO_ETS
 #include "baro_ets.h"
 #endif // USE_BARO_ETS
@@ -333,6 +349,19 @@
     if (pprz_mode == PPRZ_MODE_AUTO2 && fbw_state->channels[RADIO_THROTTLE] > 
THROTTLE_THRESHOLD_TAKEOFF) {
       launch = TRUE;
     }
+//LED_TOGGLE(3);
+#ifdef USE_ACCEL_MEMSIC
+    if ((pprz_mode == PPRZ_MODE_AUTO2) && (maccel[1] < 510) && (maccel[1] > 
300)) {
+      launch = TRUE;
+      estimator_flight_time = 1;
+      LED_ON(2);
+    }
+    if ((pprz_mode == PPRZ_MODE_AUTO2) && (maccel[1] < 700) && (maccel[1] > 
522)) {
+      launch = TRUE;
+      estimator_flight_time = 1;
+      LED_ON(2);
+    }
+#endif
   }
 #endif
 }
@@ -419,6 +448,13 @@
       v_ctl_throttle_setpoint = 0;
   }
   energy += ((float)current) / 3600.0f * 0.25f;        // mAh = mA * dt (4Hz 
-> hours)
+
+#ifdef ADC
+#ifdef USE_ACCEL_MEMSIC
+  maccel[0] = (((xaccel_adc_buf.sum/xaccel_adc_buf.av_nb_sample)));
+  maccel[1] = (((yaccel_adc_buf.sum/yaccel_adc_buf.av_nb_sample)));
+#endif
+#endif
 }
 
 
@@ -579,6 +615,12 @@
     break;
 #endif
 
+#ifdef USE_AIRSPEED_ETS
+  case 7:
+    airspeed_ets_periodic();
+    break;
+#endif
+
 #ifdef USE_HUMID_SHT
   case 8:
     humid_sht_periodic();
@@ -592,20 +634,28 @@
 #ifdef USE_BARO_SCP
   case 9:
     baro_scp_periodic();
-    if (baro_scp_available == TRUE) {
-      DOWNLINK_SEND_SCP_STATUS(DefaultChannel, &baro_scp_pressure, 
&baro_scp_temperature);
-      baro_scp_available = FALSE;
-    }
     break;
 #endif
 
+#ifdef USE_IR_MLX
+  case 11:
+    ir_mlx_periodic();
+    break;
+#endif
+
 #ifdef TCAS
-  case 14:
+  case 12:
     /** tcas altitude control loop at 4Hz just before navigation task */
     tcas_periodic_task_4Hz();
     break;
 #endif
 
+#ifdef USE_MAG_HMC
+  case 14:
+    hmc5843_periodic();
+    break;
+#endif
+
     /*  default: */
   }
 
@@ -631,9 +681,6 @@
   // I2C0 scheduler
   switch (_20Hz) {
     case 0:
-#ifdef USE_AIRSPEED_ETS
-      airspeed_ets_periodic(); // process airspeed
-#endif // USE_AIRSPEED_ETS
 #ifdef USE_BARO_ETS
       baro_ets_read(); // initiate next i2c read
 #endif // USE_BARO_ETS
@@ -642,9 +689,6 @@
 #ifdef USE_BARO_ETS
       baro_ets_periodic(); // process altitude
 #endif // USE_BARO_ETS
-#ifdef USE_AIRSPEED_ETS
-      airspeed_ets_read(); // initiate next i2c read
-#endif // USE_AIRSPEED_ETS
       break;
     case 2:
       break;
@@ -743,10 +787,6 @@
   i2c1_init();
 #endif
 
-#ifdef USE_AIRSPEED_ETS
-  airspeed_ets_init();
-#endif
-
 #ifdef USE_BARO_ETS
   baro_ets_init();
 #endif
@@ -776,6 +816,23 @@
   baro_scp_init();
 #endif
 
+#ifdef USE_AIRSPEED_ETS
+  airspeed_ets_init();
+#endif
+
+#ifdef USE_IR_MLX
+  ir_mlx_init();
+#endif
+
+#ifdef USE_MAG_HMC
+  hmc5843_init();
+#endif
+
+#ifdef USE_ACCEL_MEMSIC
+  adc_buf_channel(ADC_CHANNEL_ACC_X, &xaccel_adc_buf, 2);
+  adc_buf_channel(ADC_CHANNEL_ACC_Y, &yaccel_adc_buf, 2);
+#endif
+
   /************* Links initialization ***************/
 #if defined USE_SPI
   spi_init();
@@ -1016,6 +1073,42 @@
   }
 #endif
 
+#ifdef USE_AIRSPEED_ETS
+    airspeed_ets_event();
+#endif
+
+#ifdef USE_BARO_SCP
+    baro_scp_event();
+    if (baro_scp_available == TRUE) {
+      DOWNLINK_SEND_SCP_STATUS(DefaultChannel, &baro_scp_pressure, 
&baro_scp_temperature);
+      baro_scp_available = FALSE;
+if (baro_scp_pressure == 393216) LED_TOGGLE(2);
+    }
+#endif
+
+#ifdef USE_IR_MLX
+    ir_mlx_event();
+    if (ir_mlx_available == TRUE) {
+      ir_mlx_available = FALSE;
+      DOWNLINK_SEND_MLX_STATUS(DefaultChannel,
+                              &ir_mlx_itemp_case,
+                              &ir_mlx_temp_case,
+                              &ir_mlx_itemp_obj,
+                              &ir_mlx_temp_obj);
+    }
+#endif
+
+#ifdef USE_MAG_HMC
+    hmc5843_event();
+    if (hmc5843_available == TRUE) {
+      hmc5843_available = FALSE;
+      DOWNLINK_SEND_IMU_MAG_RAW(DefaultChannel,
+                &hmc5843_mag_x,
+                &hmc5843_mag_y,
+                &hmc5843_mag_z );
+    }
+#endif
+
   if (inter_mcu_received_fbw) {
     /* receive radio control task from fbw */
     inter_mcu_received_fbw = FALSE;

Modified: paparazzi3/branches/campaign2010/sw/ground_segment/tmtc/link.ml
===================================================================
--- paparazzi3/branches/campaign2010/sw/ground_segment/tmtc/link.ml     
2010-09-27 20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/ground_segment/tmtc/link.ml     
2010-09-27 21:23:52 UTC (rev 5962)
@@ -508,10 +508,6 @@
     ignore (Glib.Io.add_watch [`HUP] hangup (GMain.Io.channel_of_descr fd));
     ignore (Glib.Io.add_watch [`IN] read_fd (GMain.Io.channel_of_descr fd));
 
-    if !uplink then begin
-      message_uplink device
-    end;
-
     (** Init and Periodic tasks *)
     begin
       ignore (Glib.Timeout.add status_msg_period (fun () -> send_status_msg 
(); true));
@@ -527,6 +523,9 @@
       | _ -> ()
     end;
 
+    if !uplink then begin
+      message_uplink device
+    end;
 
     (* Main Loop *)
     let loop = Glib.Main.create true in

Modified: paparazzi3/branches/campaign2010/sw/in_progress/ir_usb_i2c/i2c_usb.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/in_progress/ir_usb_i2c/i2c_usb.c        
2010-09-27 20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/in_progress/ir_usb_i2c/i2c_usb.c        
2010-09-27 21:23:52 UTC (rev 5962)
@@ -15,7 +15,7 @@
 
 /* mlx90614 chip address (default address) */
 #define MLX90614_ADDR    0x00
-#define MLX90614_ADDR_1  0x02
+#define MLX90614_ADDR_1  0x00
 #define MLX90614_ADDR_2  0x05
 
 #define LOOPS 100
@@ -391,9 +391,9 @@
   /* it to 10us doesn't do anything at all since this already is the default */
   i2c_tiny_usb_set(CMD_SET_DELAY, 10);
 
-  i=i;
+  i=0;
 
-#if 0
+#if 1
   /* -------- begin of mlx90614 client processing --------- */
   printf("Probing for MLX90614 ... ");
 
@@ -425,8 +425,11 @@
     printf("i2c addr = 0x%04X\n", tp);
 
     /* write new i2c address, always set bit0 ! */
-//    i2c_mlx_write_cmd_and_word(MLX90614_ADDR, 0x2E, 1);
-//    usleep(1000000);
+    i2c_mlx_write_cmd_and_word(MLX90614_ADDR, 0x2E, 0);
+    usleep(100000);
+    /* write new i2c address, always set bit0 ! */
+    i2c_mlx_write_cmd_and_word(MLX90614_ADDR, 0x2E, 0x3);
+    usleep(100000);
     
     tp = i2c_mlx_read_word_with_cmd(MLX90614_ADDR, 0x2E);
     printf("i2c addr = 0x%04X\n", tp);
@@ -443,6 +446,7 @@
   /* -------- end of mlx90614 client processing --------- */
 #endif
 
+#if 0
   /* -------- begin of mlx90614 multi client processing --------- */
 
   /* try to access mlx90614 at address MLX90614_ADDR_1 */
@@ -466,12 +470,12 @@
     fprintf(stderr, "USB error: %s\n", usb_strerror());
     goto quit;
   } 
-  
+#if 0  
   if(i2c_tiny_usb_get_status() != STATUS_ADDRESS_ACK) {
     printf("no device at address 0x%02x\n", MLX90614_ADDR_2);
     goto quit;
   }  
-  
+#endif  
   {  
     int tp1, tp2;
     
@@ -480,16 +484,18 @@
     while(1) {
       tp1 = i2c_mlx_read_word_with_cmd(MLX90614_ADDR_1, 0x07);
       if (tp1 == -1) goto quit;
-      tp2 = i2c_mlx_read_word_with_cmd(MLX90614_ADDR_2, 0x07);
+//      tp2 = i2c_mlx_read_word_with_cmd(MLX90614_ADDR_2, 0x07);
       if (tp2 == -1) goto quit;
       if ((tp2 == -2) || (tp2 == -2))
         printf("##########\n");
       else
-        printf("%2.2f°C\n", ((tp1*0.02)-273.15) - ((tp2*0.02)-273.15));
+        printf("%2.2f°C\n", ((tp1*0.02)-273.15));
+//        printf("%2.2f°C\n", ((tp1*0.02)-273.15) - ((tp2*0.02)-273.15));
 //      usleep(20000);
     }
   }
   /* -------- end of mlx90614 client processing --------- */
+#endif
 
  quit:
 #ifndef WIN

Modified: paparazzi3/branches/campaign2010/sw/logalizer/ctrlstick.c
===================================================================
--- paparazzi3/branches/campaign2010/sw/logalizer/ctrlstick.c   2010-09-27 
20:34:50 UTC (rev 5961)
+++ paparazzi3/branches/campaign2010/sw/logalizer/ctrlstick.c   2010-09-27 
21:23:52 UTC (rev 5962)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#define DBG 1
+//#define DBG 1
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -44,7 +44,11 @@
 
 #define Bound(_x, _min, _max) { if (_x > _max) _x = _max; else if (_x < _min) 
_x = _min; }
 
+#ifdef DBG
+#define TIMEOUT_PERIOD 200
+#else
 #define TIMEOUT_PERIOD 20
+#endif
 
 #define MB_ID 1
 
@@ -61,14 +65,35 @@
 #endif
 
 #if 1
+// Jamara RC Flight Simulator 06 5120/06 5121
+#define AXIS_YAW        ABS_X
+#define AXIS_ROLL       ABS_RZ
+#define AXIS_THROTTLE   ABS_Z
+#define AXIS_PITCH      ABS_Y
+
+#define THROTTLE_MIN        (75)
+#define THROTTLE_NEUTRAL    (0)
+#define THROTTLE_MAX        (-77)
+#define ROLL_MIN            (99)
+#define ROLL_NEUTRAL        (0)
+#define ROLL_MAX            (-114)
+#define PITCH_MIN           (-113)
+#define PITCH_NEUTRAL       (-11)
+#define PITCH_MAX           (93)
+#define YAW_MIN             (87)
+#define YAW_NEUTRAL         (-12)
+#define YAW_MAX             (-101)
+#endif
+
+#if 0
 // e-sky 0905A simulator fms
 //#define AXIS_YAW        ABS_X
 //#define AXIS_ROLL       ABS_Z
 //#define AXIS_THROTTLE   ABS_RY
 //#define AXIS_PITCH      ABS_Y
 #define AXIS_YAW        ABS_RY
-#define AXIS_ROLL       ABS_Y
-#define AXIS_THROTTLE   ABS_X
+#define AXIS_ROLL       ABS_X
+#define AXIS_THROTTLE   ABS_Y
 #define AXIS_PITCH      ABS_Z
 
 #define THROTTLE_MIN        (-90)
@@ -107,7 +132,7 @@
 
 /* Global variables about the initialized device */
 int device_handle;
-int axis_code[AXIS_COUNT] = {AXIS_ROLL, AXIS_PITCH, AXIS_THROTTLE, AXIS_YAW};
+int axis_code[AXIS_COUNT] = {AXIS_THROTTLE, AXIS_PITCH, AXIS_ROLL, AXIS_YAW};
 int axis_min[AXIS_COUNT], axis_max[AXIS_COUNT];
 int position[AXIS_COUNT] = {0, 0, 0};
 struct ff_effect effect;
@@ -293,6 +318,21 @@
   struct input_event event;
   static struct timeval time_now;
 
+  static struct timeval time_bef;
+  static struct timeval time_aft;
+
+  static int cp;
+
+gettimeofday(&time_aft, 0);
+
+if (cp++ > 50) 
+{
+cp=0;
+printf("%d\n", time_aft.tv_usec - time_bef.tv_usec);
+}
+
+gettimeofday(&time_bef, 0);
+
   /* Get events */
   do {
     res = read(device_handle,&event,sizeof(event));
@@ -319,16 +359,32 @@
     {
         dbgprintf(stdout, "pos  %d %d %d %d\n", position[0], position[1], 
position[2], position[3]);
 
-        if (position[3] > 125) mode = 2;
+        if (position[3] > 119) mode = 2;
         else if (position[3] < -125) mode = 1;
         else mode = 0;
 
         throttle = ((position[0] - THROTTLE_NEUTRAL -THROTTLE_MIN) * 63) / 
(THROTTLE_MAX-THROTTLE_MIN);
         Bound(throttle, 0, 63)
         roll = position[2] - ROLL_NEUTRAL;
-        Bound(roll, -128, 127)
-        pitch = position[1] - PITCH_NEUTRAL;
-        Bound(pitch, -128, 127)
+        if (roll > 0)
+        {
+            roll = (roll * 127) / (ROLL_MIN+ROLL_NEUTRAL);
+        } 
+        else
+        {
+            roll = (roll * 127) / (-ROLL_MAX-ROLL_NEUTRAL);
+        } 
+        Bound(roll, -127, 127)
+        pitch = -position[1] + PITCH_NEUTRAL;
+        if (pitch > 0)
+        {
+            pitch = (pitch * 127) / (-PITCH_MIN+PITCH_NEUTRAL);
+        } 
+        else
+        {
+            pitch = (pitch * 127) / (PITCH_MAX-PITCH_NEUTRAL);
+        } 
+        Bound(pitch, -127, 127)
 
         throttle_mode = (throttle << 2) | mode;
 
@@ -341,6 +397,7 @@
         }
     }
      
+
        return 1;
 }
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]