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)
132static bool _osd_sprintf(
char *buffer,
char *
string,
float value);
179#if defined(FIXEDWING_FIRMWARE)
203#if defined(AHRS_MAG_DECLINATION)
214#if defined(NOMINAL_AIRSPEED)
297#if defined(FIXEDWING_FIRMWARE)
361#if defined USE_MATEK_TYPE_OSD_CHIP && USE_MATEK_TYPE_OSD_CHIP == 1
369 if (c >=
'0' && c <=
'9') {
370 if (c ==
'0') { c -= 38; }
else { c -= 48; }
371 }
else if (c >=
'A' && c <=
'Z') {
373 }
else if (c >=
'a' && c <=
'z') {
378 case (
'('): c = 0x3f;
break;
379 case (
')'): c = 0x40;
break;
380 case (
'.'): c = 0x41;
break;
381 case (
'?'): c = 0x42;
break;
382 case (
';'): c = 0x43;
break;
383 case (
':'): c = 0x44;
break;
384 case (
','): c = 0x45;
break;
386 case (
'/'): c = 0x47;
break;
387 case (
'"'): c = 0x48;
break;
388 case (
'-'): c = 0x49;
break;
389 case (
'<'): c = 0x4A;
break;
390 case (
'>'): c = 0x4B;
break;
391 case (
'@'): c = 0x4C;
break;
392 case (
' '): c = 0x00;
break;
393 case (
'\0'): c = 0xFF;
break;
417#if defined(FIXEDWING_FIRMWARE)
427#if defined(OSD_USE_FLOAT_LOW_PASS_FILTERING)
495 for (x = 0; x < 30; x++) {
osd_buf[x] = 0; }
548 char to_asc[10] = {48, 48, 48, 48, 48, 48, 48, 48, 48, 48};
624 if (value < 0) { y--;
to_asc[y] =
'-'; }
636 while (y <
sizeof(
to_asc)) { *(buffer + x) =
to_asc[y]; x++; y++; }
649 if (*(buffer + x) ==
'\0') {
break; }
662#if defined(BARO_ALTITUDE_VAR)
668#if defined(FIXEDWING_FIRMWARE)
679#if defined(FIXEDWING_FIRMWARE)
691#if defined(FIXEDWING_FIRMWARE)
710#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
734#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
742#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
754#if defined(FIXEDWING_FIRMWARE)
767#if defined(FIXEDWING_FIRMWARE)
777#if defined(FIXEDWING_FIRMWARE)
778#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
798#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
810#if defined(BARO_ALTITUDE_VAR)
820#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
830#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
844#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
857#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
897 }
else {
osd_put_s(
" ",
false, 5, 8, 18); }
911#if defined(USE_MATEK_TYPE_OSD_CHIP) && USE_MATEK_TYPE_OSD_CHIP == 1
920 default:
step = 0;
break;
1020#if USE_PAL_FOR_OSD_VIDEO
1021#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.
uint8_t abi_id
ABI sensor ID.
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)
static void send_mag_heading(struct transport_tx *trans, struct link_device *dev)
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.
static const struct usb_device_descriptor dev
Architecture independent timing functions.
int8_t register_periodic_telemetry(struct periodic_telemetry *_pt, uint8_t _id, telemetry_cb _cb)
Register a telemetry callback function.
Periodic telemetry system header (includes downlink utility and generated code).
#define DefaultPeriodic
Set default periodic telemetry.
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.