Paparazzi UAS  v5.8.2_stable-0-g6260b7c
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
meteo_france_DAQ.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Gautier Hattenberger
3  *
4  * This file is part of paparazzi
5 
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
35 
36 #include "state.h"
37 #include "autopilot.h"
40 #include "subsystems/chibios-libopencm3/sdLog.h"
41 #include "subsystems/chibios-libopencm3/chibios_sdlog.h"
42 
43 #include "subsystems/gps.h"
45 
46 struct MF_DAQ mf_daq;
47 bool_t log_started;
48 
49 #ifndef MF_DAQ_POWER_INIT
50 #define MF_DAQ_POWER_INIT TRUE
51 #endif
52 
53 #if !(defined MF_DAQ_POWER_PORT) && !(defined MF_DAQ_POWER_PIN)
54 INFO("MF_DAQ power pin is not defined")
55 #endif
56 
57 void init_mf_daq(void)
58 {
59  mf_daq.nb = 0;
61 #if (defined MF_DAQ_POWER_PORT) && (defined MF_DAQ_POWER_PIN)
62  gpio_setup_output(MF_DAQ_POWER_PORT, MF_DAQ_POWER_PIN);
63 #endif
66 }
67 
69 {
70  // Send aircraft state to DAQ board
71  DOWNLINK_SEND_MF_DAQ_STATE(extra_pprz_tp, EXTRA_DOWNLINK_DEVICE,
74  &stateGetBodyRates_f()->q,
75  &stateGetBodyRates_f()->r,
77  &stateGetNedToBodyEulers_f()->theta,
79  &stateGetAccelNed_f()->x,
80  &stateGetAccelNed_f()->y,
81  &stateGetAccelNed_f()->z,
82  &stateGetSpeedEnu_f()->x,
83  &stateGetSpeedEnu_f()->y,
84  &stateGetSpeedEnu_f()->z,
85  &stateGetPositionLla_f()->lat,
86  &stateGetPositionLla_f()->lon,
87  &stateGetPositionLla_f()->alt,
90 }
91 
93 {
94  // Send report over normal telemetry
95  if (mf_daq.nb > 0) {
96  DOWNLINK_SEND_PAYLOAD_FLOAT(DefaultChannel, DefaultDevice, 9, mf_daq.values);
97  }
98  // Test if log is started
99  if (pprzLogFile != -1) {
100  if (log_started == FALSE) {
101  // Log MD5SUM once
102  DOWNLINK_SEND_ALIVE(pprzlog_tp, chibios_sdlog, 16, MD5SUM);
103  log_started = TRUE;
104  }
105  // Log GPS for time reference
106  uint8_t foo = 0;
107  int16_t climb = -gps.ned_vel.z;
108  int16_t course = (DegOfRad(gps.course) / ((int32_t)1e6));
109  DOWNLINK_SEND_GPS(pprzlog_tp, chibios_sdlog, &gps.fix,
111  &course, &gps.hmsl, &gps.gspeed, &climb,
112  &gps.week, &gps.tow, &gps.utm_pos.zone, &foo);
113  }
114 }
115 
117 {
118  mf_daq.nb = dl_buffer[2];
119  if (mf_daq.nb > 0) {
120  if (mf_daq.nb > MF_DAQ_SIZE) { mf_daq.nb = MF_DAQ_SIZE; }
121  // Store data struct directly from dl_buffer
122  float *buf = (float*)(dl_buffer+3);
123  memcpy(mf_daq.values, buf, mf_daq.nb * sizeof(float));
124  // Log on SD card
125  if (log_started) {
126  DOWNLINK_SEND_PAYLOAD_FLOAT(pprzlog_tp, chibios_sdlog, mf_daq.nb, mf_daq.values);
127  DOWNLINK_SEND_MF_DAQ_STATE(pprzlog_tp, chibios_sdlog,
130  &stateGetBodyRates_f()->q,
131  &stateGetBodyRates_f()->r,
133  &stateGetNedToBodyEulers_f()->theta,
135  &stateGetAccelNed_f()->x,
136  &stateGetAccelNed_f()->y,
137  &stateGetAccelNed_f()->z,
138  &stateGetSpeedEnu_f()->x,
139  &stateGetSpeedEnu_f()->y,
140  &stateGetSpeedEnu_f()->z,
141  &stateGetPositionLla_f()->lat,
142  &stateGetPositionLla_f()->lon,
143  &stateGetPositionLla_f()->alt,
146  }
147  }
148 }
149 
150 
int32_t north
in centimeters
Extra datalink using PPRZ protocol.
static struct FloatEulers * stateGetNedToBodyEulers_f(void)
Get vehicle body attitude euler angles (float).
Definition: state.h:1114
void mf_daq_send_state(void)
uint16_t autopilot_flight_time
flight time in seconds.
Definition: autopilot.c:48
uint16_t week
GPS week.
Definition: gps.h:83
void init_mf_daq(void)
bool_t log_started
#define MF_DAQ_SIZE
static struct LlaCoor_f * stateGetPositionLla_f(void)
Get position in LLA coordinates (float).
Definition: state.h:711
int32_t east
in centimeters
int32_t z
Down.
struct UtmCoor_i utm_pos
position in UTM (north,east: cm; alt: mm over ellipsoid)
Definition: gps.h:70
#define FALSE
Definition: std.h:5
#define meteo_france_DAQ_SetPower(_x)
uint8_t zone
UTM zone number.
#define TRUE
Definition: std.h:4
int32_t hmsl
height above mean sea level in mm
Definition: gps.h:71
struct pprz_transport extra_pprz_tp
Definition: extra_pprz_dl.c:26
uint32_t tow
GPS time of week in ms.
Definition: gps.h:84
struct MF_DAQ mf_daq
Device independent GPS code (interface)
static struct NedCoor_f * stateGetAccelNed_f(void)
Get acceleration in NED coordinates (float).
Definition: state.h:1009
signed short int16_t
Definition: types.h:17
struct pprzlog_transport pprzlog_tp
uint16_t foo
Definition: main_demo5.c:59
Communication module with the Data Acquisition board from Meteo France.
static struct FloatRates * stateGetBodyRates_f(void)
Get vehicle body angular rate (float).
Definition: state.h:1171
signed long int32_t
Definition: types.h:19
void parse_mf_daq_msg(void)
struct adc_buf * buf
Definition: adc_arch.c:587
unsigned char uint8_t
Definition: types.h:14
API to get/set the generic vehicle states.
int32_t course
GPS course over ground in rad*1e7, [0, 2*Pi]*1e7 (CW/north)
Definition: gps.h:76
#define MF_DAQ_POWER_INIT
static struct EnuCoor_f * stateGetSpeedEnu_f(void)
Get ground speed in local ENU coordinates (float).
Definition: state.h:894
static struct FloatVect2 * stateGetHorizontalWindspeed_f(void)
Get horizontal windspeed (float).
Definition: state.h:1301
uint8_t dl_buffer[MSG_SIZE]
Definition: main_demo5.c:64
void mf_daq_send_report(void)
static float p[2][2]
uint16_t gspeed
norm of 2d ground speed in cm/s
Definition: gps.h:74
float values[MF_DAQ_SIZE]
uint8_t fix
status of fix
Definition: gps.h:82
struct NedCoor_i ned_vel
speed NED in cm/s
Definition: gps.h:73
struct GpsState gps
global GPS state
Definition: gps.c:41
uint8_t nb
void gpio_setup_output(uint32_t port, uint16_t gpios)
Setup one or more pins of the given GPIO port as outputs.
Definition: gpio_ardrone.c:102
uint8_t power