Firmware
Classes | Macros | Functions | Variables
px4io.h File Reference

General defines and structures for the PX4IO module firmware. More...

#include <px4_config.h>
#include <stdbool.h>
#include <stdint.h>
#include <board_config.h>
#include "protocol.h"
#include <pwm_limit/pwm_limit.h>
#include <debug.h>

Go to the source code of this file.

Classes

struct  sys_state_s
 

Macros

#define perf_alloc(a, b)   NULL
 
#define PX4IO_BL_VERSION   3
 
#define PX4IO_SERVO_COUNT   8
 
#define PX4IO_CONTROL_CHANNELS   8
 
#define PX4IO_CONTROL_GROUPS   4
 
#define PX4IO_RC_INPUT_CHANNELS   18
 
#define PX4IO_RC_MAPPED_CONTROL_CHANNELS   8
 This is the maximum number of channels mapped/used.
 
#define debug(fmt, args...)   do {} while(0)
 
#define r_status_flags   r_page_status[PX4IO_P_STATUS_FLAGS]
 
#define r_status_alarms   r_page_status[PX4IO_P_STATUS_ALARMS]
 
#define r_raw_rc_count   r_page_raw_rc_input[PX4IO_P_RAW_RC_COUNT]
 
#define r_raw_rc_values   (&r_page_raw_rc_input[PX4IO_P_RAW_RC_BASE])
 
#define r_raw_rc_flags   r_page_raw_rc_input[PX4IO_P_RAW_RC_FLAGS]
 
#define r_rc_valid   r_page_rc_input[PX4IO_P_RC_VALID]
 
#define r_rc_values   (&r_page_rc_input[PX4IO_P_RC_BASE])
 
#define r_mixer_limits   r_page_status[PX4IO_P_STATUS_MIXER]
 
#define r_setup_features   r_page_setup[PX4IO_P_SETUP_FEATURES]
 
#define r_setup_arming   r_page_setup[PX4IO_P_SETUP_ARMING]
 
#define r_setup_pwm_rates   r_page_setup[PX4IO_P_SETUP_PWM_RATES]
 
#define r_setup_pwm_defaultrate   r_page_setup[PX4IO_P_SETUP_PWM_DEFAULTRATE]
 
#define r_setup_pwm_altrate   r_page_setup[PX4IO_P_SETUP_PWM_ALTRATE]
 
#define r_setup_rc_thr_failsafe   r_page_setup[PX4IO_P_SETUP_RC_THR_FAILSAFE_US]
 
#define r_setup_pwm_reverse   r_page_setup[PX4IO_P_SETUP_PWM_REVERSE]
 
#define r_setup_trim_roll   r_page_setup[PX4IO_P_SETUP_TRIM_ROLL]
 
#define r_setup_trim_pitch   r_page_setup[PX4IO_P_SETUP_TRIM_PITCH]
 
#define r_setup_trim_yaw   r_page_setup[PX4IO_P_SETUP_TRIM_YAW]
 
#define r_setup_scale_roll   r_page_setup[PX4IO_P_SETUP_SCALE_ROLL]
 
#define r_setup_scale_pitch   r_page_setup[PX4IO_P_SETUP_SCALE_PITCH]
 
#define r_setup_scale_yaw   r_page_setup[PX4IO_P_SETUP_SCALE_YAW]
 
#define r_setup_sbus_rate   r_page_setup[PX4IO_P_SETUP_SBUS_RATE]
 
#define r_setup_thr_fac   r_page_setup[PX4IO_P_SETUP_THR_MDL_FAC]
 
#define r_setup_slew_max   r_page_setup[PX4IO_P_SETUP_MOTOR_SLEW_MAX]
 
#define r_setup_airmode   r_page_setup[PX4IO_P_SETUP_AIRMODE]
 
#define r_control_values   (&r_page_controls[0])
 
#define LED_BLUE(_s)   px4_arch_gpiowrite(GPIO_LED1, !(_s))
 
#define LED_AMBER(_s)   px4_arch_gpiowrite(GPIO_LED2, !(_s))
 
#define LED_SAFETY(_s)   px4_arch_gpiowrite(GPIO_LED3, !(_s))
 
#define LED_RING(_s)   px4_arch_gpiowrite(GPIO_LED4, (_s))
 
#define PX4IO_RELAY_CHANNELS   0
 
#define ENABLE_SBUS_OUT(_s)   px4_arch_gpiowrite(GPIO_SBUS_OENABLE, !(_s))
 
#define VDD_SERVO_FAULT   (!px4_arch_gpioread(GPIO_SERVO_FAULT_DETECT))
 
#define PX4IO_ADC_CHANNEL_COUNT   2
 
#define ADC_VSERVO   4
 
#define ADC_RSSI   5
 
#define BUTTON_SAFETY   px4_arch_gpioread(GPIO_BTN_SAFETY)
 
#define CONTROL_PAGE_INDEX(_group, _channel)   (_group * PX4IO_CONTROL_CHANNELS + _channel)
 
#define PX4_CRITICAL_SECTION(cmd)   { irqstate_t flags = px4_enter_critical_section(); cmd; px4_leave_critical_section(flags); }
 
#define PX4_ATOMIC_MODIFY_OR(target, modification)   { if ((target | (modification)) != target) { PX4_CRITICAL_SECTION(target |= (modification)); } }
 
#define PX4_ATOMIC_MODIFY_CLEAR(target, modification)   { if ((target & ~(modification)) != target) { PX4_CRITICAL_SECTION(target &= ~(modification)); } }
 
#define PX4_ATOMIC_MODIFY_AND(target, modification)   { if ((target & (modification)) != target) { PX4_CRITICAL_SECTION(target &= (modification)); } }
 

Functions

void mixer_tick (void)
 
int mixer_handle_text_create_mixer (void)
 
int mixer_handle_text (const void *buffer, size_t length)
 
void mixer_set_failsafe (void)
 
void safety_init (void)
 Safety switch/LED.
 
void failsafe_led_init (void)
 
void interface_init (void)
 FMU communications.
 
void interface_tick (void)
 
int registers_set (uint8_t page, uint8_t offset, const uint16_t *values, unsigned num_values)
 Register space.
 
int registers_get (uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_values)
 
int adc_init (void)
 Sensors/misc inputs.
 
uint16_t adc_measure (unsigned channel)
 
void controls_init (void)
 R/C receiver handling. More...
 
void controls_tick (void)
 
void isr_debug (uint8_t level, const char *fmt,...)
 send a debug message to the console
 
void schedule_reboot (uint32_t time_delta_usec)
 schedule a reboot More...
 

Variables

volatile uint16_t r_page_status []
 PAGE 1. More...
 
uint16_t r_page_actuators []
 PAGE 2. More...
 
uint16_t r_page_servos []
 PAGE 3. More...
 
uint16_t r_page_direct_pwm []
 PAGE 8. More...
 
uint16_t r_page_raw_rc_input []
 PAGE 4. More...
 
uint16_t r_page_rc_input []
 PAGE 5. More...
 
uint16_t r_page_adc []
 
volatile uint16_t r_page_setup []
 PAGE 100. More...
 
uint16_t r_page_controls []
 PAGE 101. More...
 
uint16_t r_page_rc_input_config []
 PAGE 103. More...
 
uint16_t r_page_servo_failsafe []
 PAGE 105. More...
 
uint16_t r_page_servo_control_min []
 PAGE 106. More...
 
uint16_t r_page_servo_control_max []
 PAGE 107. More...
 
int16_t r_page_servo_control_trim []
 PAGE 108. More...
 
uint16_t r_page_servo_disarmed []
 PAGE 109. More...
 
struct sys_state_s system_state
 
float dt
 
bool update_mc_thrust_param
 
bool update_trims
 
pwm_limit_t pwm_limit
 
volatile uint8_t debug_level
 global debug level for isr_debug()
 

Detailed Description

General defines and structures for the PX4IO module firmware.

Author
Lorenz Meier loren.nosp@m.z@px.nosp@m.4.io

Function Documentation

§ controls_init()

void controls_init ( void  )

R/C receiver handling.

Input functions return true when they receive an update from the RC controller.

§ schedule_reboot()

void schedule_reboot ( uint32_t  time_delta_usec)

schedule a reboot

schedule a reboot

Variable Documentation

§ r_page_actuators

uint16_t r_page_actuators[]

PAGE 2.

Post-mixed actuator values.

§ r_page_controls

uint16_t r_page_controls[]

PAGE 101.

Control values from the FMU.

§ r_page_direct_pwm

uint16_t r_page_direct_pwm[]

PAGE 8.

RAW PWM values

§ r_page_raw_rc_input

uint16_t r_page_raw_rc_input[]

PAGE 4.

Raw RC input

§ r_page_rc_input

uint16_t r_page_rc_input[]

PAGE 5.

Scaled/routed RC input

§ r_page_rc_input_config

uint16_t r_page_rc_input_config[]

PAGE 103.

R/C channel input configuration.

§ r_page_servo_control_max

uint16_t r_page_servo_control_max[]

PAGE 107.

maximum PWM values when armed

§ r_page_servo_control_min

uint16_t r_page_servo_control_min[]

PAGE 106.

minimum PWM values when armed

§ r_page_servo_control_trim

int16_t r_page_servo_control_trim[]

PAGE 108.

trim values for center position

§ r_page_servo_disarmed

uint16_t r_page_servo_disarmed[]

PAGE 109.

disarmed PWM values for difficult ESCs

§ r_page_servo_failsafe

uint16_t r_page_servo_failsafe[]

PAGE 105.

Failsafe servo PWM values

Disable pulses as default.

§ r_page_servos

uint16_t r_page_servos[]

PAGE 3.

Servo PWM values

§ r_page_setup

volatile uint16_t r_page_setup[]

PAGE 100.

Setup registers

§ r_page_status

volatile uint16_t r_page_status[]

PAGE 1.

Status values.