Merge pull request #123 from paparazzi/fw_systime

cleanup of fixedwing main using new sys_time timers
This commit is contained in:
Felix Ruess
2012-02-08 13:30:06 -08:00
14 changed files with 336 additions and 319 deletions
+6
View File
@@ -1,3 +1,6 @@
#ifndef LED_HW_H
#define LED_HW_H
#include <stdio.h>
#include <caml/mlvalues.h>
#include <caml/memory.h>
@@ -10,3 +13,6 @@ extern value * leds_closure;
#define LED_OFF(i) { if (leds_closure) callback2(*leds_closure, Val_int(i), Val_int(0)); }
#define LED_TOGGLE(i) { if (leds_closure) callback2(*leds_closure, Val_int(i), Val_int(2)); }
#define LED_PERIODIC() {}
#endif /* LED_HW_H */
+18 -1
View File
@@ -1,6 +1,8 @@
/* Definitions and declarations required to compile autopilot code on a
i386 architecture. Bindings for OCaml. */
#define MODULES_C
#include <stdio.h>
#include <assert.h>
#include <sys/time.h>
@@ -24,6 +26,8 @@
#include "subsystems/datalink/datalink.h"
#include "generated/flight_plan.h"
#include "generated/modules.h"
#include <caml/mlvalues.h>
#include <caml/memory.h>
@@ -46,13 +50,26 @@ uint16_t datalink_time = 0;
uint8_t ac_id;
value sim_periodic_task(value unit) {
periodic_task_ap();
sensors_task();
attitude_loop();
reporting_task();
modules_periodic_task();
periodic_task_fbw();
event_task_ap();
event_task_fbw();
return unit;
}
value sim_monitor_task(value unit) {
monitor_task();
return unit;
}
value sim_nav_task(value unit) {
navigation_task();
return unit;
}
float ftimeofday(void) {
struct timeval t;
-5
View File
@@ -113,11 +113,6 @@ void estimator_init( void ) {
}
void estimator_propagate_state( void ) {
}
bool_t alt_kalman_enabled;
#ifdef ALT_KALMAN
-1
View File
@@ -74,7 +74,6 @@ extern float estimator_airspeed; /* m/s */
extern float estimator_AOA; /* radians */
void estimator_init( void );
void estimator_propagate_state( void );
void estimator_update_state_gps( void );
@@ -96,7 +96,7 @@ extern uint8_t telemetry_mode_Ap_DefaultChannel;
DOWNLINK_SEND_ATTITUDE(_trans, _dev, &estimator_phi, &estimator_psi, &estimator_theta); \
})
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode, &mcu1_status);
#define PERIODIC_SEND_DESIRED(_trans, _dev) DOWNLINK_SEND_DESIRED(_trans, _dev, &h_ctl_roll_setpoint, &h_ctl_pitch_loop_setpoint, &h_ctl_course_setpoint, &desired_x, &desired_y, &v_ctl_altitude_setpoint, &v_ctl_climb_setpoint);
#if USE_INFRARED
@@ -123,9 +123,15 @@ extern uint8_t telemetry_mode_Ap_DefaultChannel;
DownlinkSendWp(_trans, _dev, i); \
}
#ifdef RADIO_CONTROL_SETTINGS
#if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
#include "rc_settings.h"
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode, &mcu1_status);
#define PERIODIC_SEND_SETTINGS(_trans, _dev) if (!RcSettingsOff()) DOWNLINK_SEND_SETTINGS(_trans, _dev, &slider_1_val, &slider_2_val);
#else
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) { \
uint8_t rc_settings_mode_none = 0; \
DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode_none, &mcu1_status); \
}
#define PERIODIC_SEND_SETTINGS(_trans, _dev) {}
#endif
@@ -67,16 +67,12 @@ extern bool_t kill_throttle;
#define FLOAT_OF_PPRZ(pprz, center, travel) ((float)pprz / (float)MAX_PPRZ * travel + center)
extern uint8_t fatal_error_nb;
#define THROTTLE_THRESHOLD_TAKEOFF (pprz_t)(MAX_PPRZ * 0.9)
extern uint8_t lateral_mode;
extern uint8_t vsupply;
extern float energy;
extern float slider_1_val, slider_2_val;
extern bool_t launch;
extern uint8_t light_mode;
@@ -91,8 +87,6 @@ extern bool_t sum_err_reset;
(_mode != new_mode ? _mode = new_mode, TRUE : FALSE); \
})
void periodic_task( void );
//void telecommand_task(void);
#ifdef RADIO_CONTROL
#include "subsystems/radio_control.h"
+6 -9
View File
@@ -21,12 +21,12 @@
* Boston, MA 02111-1307, USA.
*
*/
/** \file main.c
* \brief main loop used both on single and dual MCU configuration */
/**
* @file main.c
* Main loop used both on single and dual MCU configuration.
*/
#include "mcu_periph/sys_time.h"
#include "led.h"
#ifdef FBW
#include "firmwares/fixedwing/main_fbw.h"
@@ -46,11 +46,8 @@ int main( void ) {
Fbw(init);
Ap(init);
while (1) {
if (sys_time_check_and_ack_timer(0)) {
Fbw(periodic_task);
Ap(periodic_task);
LED_PERIODIC();
}
Fbw(handle_periodic_tasks);
Ap(handle_periodic_tasks);
Fbw(event_task);
Ap(event_task);
}
File diff suppressed because it is too large Load Diff
+7 -1
View File
@@ -31,7 +31,13 @@
#define AP_H
extern void init_ap( void );
extern void periodic_task_ap( void );
extern void handle_periodic_tasks_ap( void );
extern void event_task_ap( void );
extern void sensors_task( void );
extern void navigation_task( void );
extern void monitor_task( void );
extern void reporting_task( void );
extern void attitude_loop( void );
#endif
+14 -9
View File
@@ -55,14 +55,14 @@ uint8_t fbw_mode;
volatile uint8_t fbw_new_actuators = 0;
tid_t fbw_periodic_tid; ///< id for periodic_task_fbw() timer
tid_t electrical_tid; ///< id for electrical_periodic() timer
/********** INIT *************************************************************/
void init_fbw( void ) {
mcu_init();
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
electrical_init();
#ifdef ACTUATORS
@@ -83,6 +83,10 @@ void init_fbw( void ) {
fbw_mode = FBW_MODE_FAILSAFE;
/**** start timers for periodic functions *****/
fbw_periodic_tid = sys_time_register_timer((1./60.), NULL);
electrical_tid = sys_time_register_timer(0.1, NULL);
#ifndef SINGLE_MCU
mcu_int_enable();
#endif
@@ -164,8 +168,6 @@ void event_task_fbw( void) {
#endif
#ifdef MCU_SPI_LINK
if (link_mcu_received) {
link_mcu_received = FALSE;
@@ -180,9 +182,6 @@ void event_task_fbw( void) {
/************* PERIODIC ******************************************************/
void periodic_task_fbw( void ) {
static uint8_t _10Hz; /* FIXME : sys_time should provide it */
_10Hz++;
if (_10Hz >= 6) _10Hz = 0;
#ifdef RADIO_CONTROL
radio_control_periodic_task();
@@ -203,8 +202,14 @@ void periodic_task_fbw( void ) {
fbw_downlink_periodic_task();
#endif
if (!_10Hz) {
}
void handle_periodic_tasks_fbw(void) {
if (sys_time_check_and_ack_timer(fbw_periodic_tid))
periodic_task_fbw();
if (sys_time_check_and_ack_timer(electrical_tid))
electrical_periodic();
}
}
@@ -42,6 +42,7 @@ extern uint8_t fbw_mode;
extern bool_t failsafe_mode;
void init_fbw( void );
void handle_periodic_tasks_fbw( void );
void periodic_task_fbw( void );
void event_task_fbw( void );
+2
View File
@@ -34,6 +34,8 @@
#include "inter_mcu.h"
#include "firmwares/fixedwing/stabilization/stabilization_attitude.h"
uint8_t rc_settings_mode = 0;
float slider_1_val, slider_2_val;
#define ParamValInt16(param_init_val, param_travel, cur_pulse, init_pulse) \
(param_init_val + (int16_t)(((float)(cur_pulse - init_pulse)) * param_travel / (float)MAX_PPRZ))
+12 -2
View File
@@ -23,8 +23,9 @@
*/
/** \file rc_settings.h
* \brief Variable setting though the radio control
/**
* @file rc_settings.h
* Variable setting though the radio control
*
* The 'rc_control' section of a XML flight plan allows the user to change the
* value of an autopilot internal variable through the rc transmitter.
@@ -33,6 +34,7 @@
*/
#ifndef RC_SETTINGS_H
#define RC_SETTINGS_H
#if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
@@ -43,8 +45,16 @@
#define RC_SETTINGS_MODE_DOWN 1
#define RC_SETTINGS_MODE_UP 2
/** rc settings mode
* can be either
* - #RC_SETTINGS_MODE_NONE
* - #RC_SETTINGS_MODE_DOWN
* - #RC_SETTINGS_MODE_UP
*/
extern uint8_t rc_settings_mode;
extern float slider_1_val, slider_2_val;
void rc_settings(bool_t mode_changed);
#define RcSettingsOff() (rc_settings_mode==RC_SETTINGS_MODE_NONE)
+6
View File
@@ -43,6 +43,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
let servos_period = 1./.40. (* s *)
let periodic_period = 1./.60. (* s *)
let nav_period = 1./.4. (* s *)
let monitor_period = 1. (* s *)
let rc_period = 1./.40. (* s *)
let msg = fun name ->
@@ -125,6 +127,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
window#show ()
external periodic_task : unit -> unit = "sim_periodic_task"
external nav_task : unit -> unit = "sim_nav_task"
external monitor_task : unit -> unit = "sim_monitor_task"
external sim_init : unit -> unit = "sim_init"
external update_bat : int -> unit = "update_bat"
external update_adc1 : int -> unit = "update_adc1"
@@ -177,6 +181,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
let boot = fun time_scale ->
Stdlib.timer ~scale:time_scale servos_period (update_servos bat_button);
Stdlib.timer ~scale:time_scale periodic_period periodic_task;
Stdlib.timer ~scale:time_scale nav_period nav_task;
Stdlib.timer ~scale:time_scale monitor_period monitor_task;
(* Forward or broacast messages according to "link" mode *)
Hashtbl.iter