37#include "generated/flight_plan.h"
38#include "generated/airframe.h"
44#if defined(FIXEDWING_FIRMWARE)
47#elif defined(ROTORCRAFT_FIRMWARE)
58#define OSD_STRING_SIZE 31
59#define osd_sprintf _osd_sprintf
61#if !defined(OSD_USE_FLOAT_LOW_PASS_FILTERING)
62#define OSD_USE_FLOAT_LOW_PASS_FILTERING
66#if !defined(AMPS_LOW_PASS_FILTER_STRENGTH) || AMPS_LOW_PASS_FILTER_STRENGTH == 0
67#define AMPS_LOW_PASS_FILTER_STRENGTH 6
70#if !defined(SPEED_LOW_PASS_FILTER_STRENGTH) || SPEED_LOW_PASS_FILTER_STRENGTH == 0
71#define SPEED_LOW_PASS_FILTER_STRENGTH 6
74#if !defined(BAT_CAPACITY)
75#pragma message "BAT_CAPACITY not defined, 5000 mah will be used."
76#define BAT_CAPACITY 5000.0
79#if defined(FIXEDWING_FIRMWARE)
81#if !defined(LOITER_BAT_CURRENT)
82#pragma message "LOITER_BAT_CURRENT not defined, 10 Amps will be used for LOITER current draw."
83#define LOITER_BAT_CURRENT 10.0
86#if !defined(STALL_AIRSPEED)
87#pragma message "STALL_AIRSPEED not defined, 10 m/s will be used."
88#define STALL_AIRSPEED 10.0
91#if !defined(MINIMUM_AIRSPEED)
92#pragma message "MINIMUM_AIRSPEED not defined, 1.3 * STALL_SPEED will be used"
93#define MINIMUM_AIRSPEED (1.3f * STALL_AIRSPEED)
98#if !defined(IMU_MAG_X_SIGN)
99#define IMU_MAG_X_SIGN 1
101#if !defined(IMU_MAG_X_SIGN)
102#define IMU_MAG_Y_SIGN 1
104#if !defined(IMU_MAG_X_SIGN)
105#define IMU_MAG_Z_SIGN 1
116 float fx1;
float fx2;
float fx3;
117 float fy1;
float fy2;
float fy3;
118 float fz1;
float fz2;
float fz3;
121#if defined(FIXEDWING_FIRMWARE)
131static bool _osd_sprintf(
char *buffer,
char *
string,
float value);
178#if defined(FIXEDWING_FIRMWARE)
202#if defined(AHRS_MAG_DECLINATION)
213#if defined(NOMINAL_AIRSPEED)
285#if defined(FIXEDWING_FIRMWARE)
349#if defined USE_MATEK_TYPE_OSD_CHIP && USE_MATEK_TYPE_OSD_CHIP == 1
357 if (c >=
'0' && c <=
'9') {
358 if (c ==
'0') { c -= 38; }
else { c -= 48; }
359 }
else if (c >=
'A' && c <=
'Z') {
361 }
else if (c >=
'a' && c <=
'z') {
366 case (
'('): c = 0x3f;
break;
367 case (
')'): c = 0x40;
break;
368 case (
'.'): c = 0x41;
break;
369 case (
'?'): c = 0x42;
break;
370 case (
';'): c = 0x43;
break;
371 case (
':'): c = 0x44;
break;
372 case (
','): c = 0x45;
break;
374 case (
'/'): c = 0x47;
break;
375 case (
'"'): c = 0x48;
break;
376 case (
'-'): c = 0x49;
break;
377 case (
'<'): c = 0x4A;
break;
378 case (
'>'): c = 0x4B;
break;
379 case (
'@'): c = 0x4C;
break;
380 case (
' '): c = 0x00;
break;
381 case (
'\0'): c = 0xFF;
break;
405#if defined(FIXEDWING_FIRMWARE)
415#if defined(OSD_USE_FLOAT_LOW_PASS_FILTERING)
483 for (x = 0; x < 30; x++) {
osd_buf[x] = 0; }
536 char to_asc[10] = {48, 48, 48, 48, 48, 48, 48, 48, 48, 48};
612 if (value < 0) { y--;
to_asc[y] =
'-'; }
624 while (y <
sizeof(
to_asc)) { *(buffer + x) =
to_asc[y]; x++; y++; }
637 if (*(buffer + x) ==
'\0') {
break; }
650#if defined(BARO_ALTITUDE_VAR)
656#if defined(FIXEDWING_FIRMWARE)
667#if defined(FIXEDWING_FIRMWARE)
679#if defined(FIXEDWING_FIRMWARE)
698#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
722#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
730#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
742#if defined(FIXEDWING_FIRMWARE)
755#if defined(FIXEDWING_FIRMWARE)
765#if defined(FIXEDWING_FIRMWARE)
766#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
786#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
798#if defined(BARO_ALTITUDE_VAR)
808#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
818#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
832#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
845#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
885 }
else {
osd_put_s(
" ",
false, 5, 8, 18); }
899#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
908 default:
step = 0;
break;
1005#if USE_PAL_FOR_OSD_VIDEO
1006#pragma message "Camera and OSD must be both PAL or NTSC otherwise only the camera picture will be visible."
#define ABI_BROADCAST
Broadcast address.
struct pprz_autopilot autopilot
Global autopilot structure.
Core autopilot interface common to all firmwares.
bool launch
request launch
uint8_t mode
current autopilot mode
Hardware independent code for commands handling.
struct point waypoints[NB_WAYPOINT]
size == nb_waypoint, waypoint 0 is a dummy waypoint
struct Electrical electrical
Interface for electrical status: supply voltage, current, battery status, etc.
#define LOW_BAT_LEVEL
low battery level in Volts (for 3S LiPo)
float current
current in A
float vsupply
supply voltage in V
Some architecture independent helper functions for GPIOs.
struct GpsState gps
global GPS state
int32_t course
GPS course over ground in rad*1e7, [0, 2*Pi]*1e7 (CW/north)
uint16_t pdop
position dilution of precision scaled by 100
#define GPS_FIX_3D
3D GPS fix
enum SPIClockPolarity cpol
clock polarity control
enum SPIClockPhase cpha
clock phase control
enum SPISlaveSelect select
slave selection behavior
SPICallback before_cb
NULL or function called before the transaction.
SPICallback after_cb
NULL or function called after the transaction.
enum SPIDataSizeSelect dss
data transfer word size
volatile uint8_t * output_buf
pointer to transmit buffer for DMA
uint16_t input_length
number of data words to read
enum SPIClockDiv cdiv
prescaler of main clock to use as SPI clock
volatile uint8_t * input_buf
pointer to receive buffer for DMA
uint8_t slave_idx
slave id: SPI_SLAVE0 to SPI_SLAVE4
enum SPIBitOrder bitorder
MSB/LSB order.
uint16_t output_length
number of data words to write
enum SPITransactionStatus status
bool spi_submit(struct spi_periph *p, struct spi_transaction *t)
Submit SPI transaction.
@ SPICpolIdleLow
CPOL = 0.
@ SPISelectUnselect
slave is selected before transaction and unselected after
SPI transaction structure.
static struct FloatEulers * stateGetNedToBodyEulers_f(void)
Get vehicle body attitude euler angles (float).
static struct UtmCoor_f * stateGetPositionUtm_f(void)
Get position in UTM coordinates (float).
static struct EnuCoor_f * stateGetPositionEnu_f(void)
Get position in local ENU coordinates (float).
static float stateGetHorizontalSpeedNorm_f(void)
Get norm of horizontal ground speed (float).
static float stateGetHorizontalSpeedDir_f(void)
Get dir of horizontal ground speed (float).
static struct EnuCoor_f * stateGetSpeedEnu_f(void)
Get ground speed in local ENU coordinates (float).
struct imu_mag_t * imu_get_mag(uint8_t sender_id, bool create)
Find or create the mag in the imu structure.
struct Int32Vect3 scaled
Last scaled values in body frame.
PRINT_CONFIG_MSG("USE_INS_NAV_INIT defaulting to TRUE")
static void draw_osd(void)
#define SPEED_LOW_PASS_FILTER_STRENGTH
uint8_t max7456_osd_status
void max7456_periodic(void)
static bool _osd_sprintf(char *buffer, char *string, float value)
static void osd_put_s(char *string, uint8_t attributes, uint8_t char_nb, uint8_t row, uint8_t column)
static void calc_flight_time_left(void)
static void vSubtractVectors(VECTOR *svA, VECTOR svB, VECTOR svC)
static void vMultiplyMatrixByVector(VECTOR *svA, MATRIX smB, VECTOR svC)
struct spi_transaction max7456_trans
char osd_str_buf[OSD_STRING_SIZE]
uint32_t max_flyable_distance_left
static char ascii_to_osd_c(char c)
char osd_string[OSD_STRING_SIZE]
uint16_t osd_char_address
#define AMPS_LOW_PASS_FILTER_STRENGTH
uint8_t osd_spi_rx_buffer[2]
uint8_t osd_spi_tx_buffer[2]
static float home_direction(void)
Maxim MAX7456 single-channel monochrome on-screen display driver.
Maxim MAX7456 single-channel monochrome on-screen display driver.
#define OSD_AUTO_INCREMENT_MODE
#define OSD_NVRAM_BUSY_FLAG
#define OSD_RESET_BUSY_FLAG
#define OSD_INVERT_PIXELS
#define OSD_VIDEO_MODE_PAL
float waypoint_get_x(uint8_t wp_id)
Get X/East coordinate of waypoint in meters.
float waypoint_get_y(uint8_t wp_id)
Get Y/North coordinate of waypoint in meters.
#define GetPosAlt()
Get current altitude above MSL.
#define GetAltRef()
Get current altitude reference for local coordinates.
float alt
in meters (above WGS84 reference ellipsoid or above MSL)
vector in East North Up coordinates Units: meters
Rotorcraft navigation functions.
Architecture independent SPI (Serial Peripheral Interface) API.
struct Stabilization stabilization
int32_t cmd[COMMANDS_NB]
output command vector, range from [-MAX_PPRZ:MAX_PPRZ] (store for messages)
API to get/set the generic vehicle states.
Architecture independent timing functions.
Periodic telemetry system header (includes downlink utility and generated code).
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
short int16_t
Typedef defining 16 bit short type.
unsigned long long uint64_t
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
signed char int8_t
Typedef defining 8 bit char type.