Firmware
Macros | Functions | Variables
registers.c File Reference

Implementation of the PX4IO register space. More...

#include <px4_config.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <drivers/drv_hrt.h>
#include <drivers/drv_pwm_output.h>
#include <stm32_pwr.h>
#include <rc/dsm.h>
#include <rc/sbus.h>
#include "px4io.h"
#include "protocol.h"

Macros

#define PX4IO_P_SETUP_FEATURES_VALID
 
#define PX4IO_P_SETUP_ARMING_VALID
 
#define PX4IO_P_SETUP_RATES_VALID   ((1 << PX4IO_SERVO_COUNT) - 1)
 
#define PX4IO_P_SETUP_RELAYS_VALID   ((1 << PX4IO_RELAY_CHANNELS) - 1)
 
#define PX4IO_P_RC_CONFIG_OPTIONS_VALID   (PX4IO_P_RC_CONFIG_OPTIONS_REVERSE | PX4IO_P_RC_CONFIG_OPTIONS_ENABLED)
 
#define SELECT_PAGE(_page_name)
 

Functions

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)
 

Variables

bool update_mc_thrust_param
 
bool update_trims
 
volatile uint16_t r_page_status []
 PAGE 1. More...
 
uint16_t r_page_actuators [PX4IO_SERVO_COUNT]
 PAGE 2. More...
 
uint16_t r_page_servos [PX4IO_SERVO_COUNT]
 PAGE 3. More...
 
uint16_t r_page_raw_rc_input []
 PAGE 4. More...
 
uint16_t r_page_rc_input []
 PAGE 5. More...
 
uint16_t r_page_scratch [32]
 Scratch page; used for registers that are constructed as-read. More...
 
uint16_t r_page_direct_pwm [PX4IO_SERVO_COUNT]
 PAGE 8. More...
 
volatile uint16_t r_page_setup []
 PAGE 100. More...
 
uint16_t r_page_controls [PX4IO_CONTROL_GROUPS *PX4IO_CONTROL_CHANNELS]
 PAGE 101. More...
 
uint16_t r_page_rc_input_config [PX4IO_RC_INPUT_CHANNELS *PX4IO_P_RC_CONFIG_STRIDE]
 PAGE 103. More...
 
uint16_t r_page_servo_failsafe [PX4IO_SERVO_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0 }
 PAGE 105. More...
 
uint16_t r_page_servo_control_min [PX4IO_SERVO_COUNT] = { PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN }
 PAGE 106. More...
 
uint16_t r_page_servo_control_max [PX4IO_SERVO_COUNT] = { PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX }
 PAGE 107. More...
 
int16_t r_page_servo_control_trim [PX4IO_SERVO_COUNT] = { PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM }
 PAGE 108. More...
 
uint16_t r_page_servo_disarmed [PX4IO_SERVO_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0 }
 PAGE 109. More...
 
uint8_t last_page
 
uint8_t last_offset
 

Detailed Description

Implementation of the PX4IO register space.

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

Macro Definition Documentation

§ PX4IO_P_SETUP_ARMING_VALID

#define PX4IO_P_SETUP_ARMING_VALID
Value:
(PX4IO_P_SETUP_ARMING_FMU_ARMED | \
PX4IO_P_SETUP_ARMING_MANUAL_OVERRIDE_OK | \
PX4IO_P_SETUP_ARMING_INAIR_RESTART_OK | \
PX4IO_P_SETUP_ARMING_IO_ARM_OK | \
PX4IO_P_SETUP_ARMING_FAILSAFE_CUSTOM | \
PX4IO_P_SETUP_ARMING_ALWAYS_PWM_ENABLE | \
PX4IO_P_SETUP_ARMING_RC_HANDLING_DISABLED | \
PX4IO_P_SETUP_ARMING_LOCKDOWN | \
PX4IO_P_SETUP_ARMING_FORCE_FAILSAFE | \
PX4IO_P_SETUP_ARMING_TERMINATION_FAILSAFE | \
PX4IO_P_SETUP_ARMING_OVERRIDE_IMMEDIATE)

§ PX4IO_P_SETUP_FEATURES_VALID

#define PX4IO_P_SETUP_FEATURES_VALID
Value:
PX4IO_P_SETUP_FEATURES_SBUS2_OUT | \
PX4IO_P_SETUP_FEATURES_ADC_RSSI | \
PX4IO_P_SETUP_FEATURES_PWM_RSSI)
#define PX4IO_P_SETUP_FEATURES_SBUS1_OUT
enable S.Bus v1 output
Definition: protocol.h:177

§ SELECT_PAGE

#define SELECT_PAGE (   _page_name)
Value:
do { \
*values = (uint16_t *)&_page_name[0]; \
*num_values = sizeof(_page_name) / sizeof(_page_name[0]); \
} while(0)

Variable Documentation

§ r_page_actuators

uint16_t r_page_actuators[PX4IO_SERVO_COUNT]

PAGE 2.

Post-mixed actuator values.

§ r_page_controls

uint16_t r_page_controls[PX4IO_CONTROL_GROUPS *PX4IO_CONTROL_CHANNELS]

PAGE 101.

Control values from the FMU.

§ r_page_direct_pwm

uint16_t r_page_direct_pwm[PX4IO_SERVO_COUNT]

PAGE 8.

RAW PWM values

§ r_page_raw_rc_input

uint16_t r_page_raw_rc_input[]
Initial value:
= {
[PX4IO_P_RAW_RC_COUNT] = 0,
[PX4IO_P_RAW_RC_FLAGS] = 0,
[PX4IO_P_RAW_RC_NRSSI] = 0,
[PX4IO_P_RAW_RC_DATA] = 0,
[PX4IO_P_RAW_FRAME_COUNT] = 0,
[PX4IO_P_RAW_LOST_FRAME_COUNT] = 0,
[PX4IO_P_RAW_RC_BASE ...(PX4IO_P_RAW_RC_BASE + PX4IO_RC_INPUT_CHANNELS)] = 0
}

PAGE 4.

Raw RC input

§ r_page_rc_input

uint16_t r_page_rc_input[]
Initial value:
= {
[PX4IO_P_RC_VALID] = 0,
[PX4IO_P_RC_BASE ...(PX4IO_P_RC_BASE + PX4IO_RC_MAPPED_CONTROL_CHANNELS)] = 0
}
#define PX4IO_RC_MAPPED_CONTROL_CHANNELS
This is the maximum number of channels mapped/used.
Definition: px4io.h:69

PAGE 5.

Scaled/routed RC input

§ r_page_rc_input_config

uint16_t r_page_rc_input_config[PX4IO_RC_INPUT_CHANNELS *PX4IO_P_RC_CONFIG_STRIDE]

PAGE 103.

R/C channel input configuration.

§ r_page_scratch

uint16_t r_page_scratch[32]

Scratch page; used for registers that are constructed as-read.

PAGE 6 Raw ADC input. PAGE 7 PWM rate maps.

§ r_page_servo_control_max

uint16_t r_page_servo_control_max[PX4IO_SERVO_COUNT] = { PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX, PWM_DEFAULT_MAX }

PAGE 107.

maximum PWM values when armed

§ r_page_servo_control_min

uint16_t r_page_servo_control_min[PX4IO_SERVO_COUNT] = { PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN, PWM_DEFAULT_MIN }

PAGE 106.

minimum PWM values when armed

§ r_page_servo_control_trim

int16_t r_page_servo_control_trim[PX4IO_SERVO_COUNT] = { PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM, PWM_DEFAULT_TRIM }

PAGE 108.

trim values for center position

§ r_page_servo_disarmed

uint16_t r_page_servo_disarmed[PX4IO_SERVO_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0 }

PAGE 109.

disarmed PWM values for difficult ESCs

§ r_page_servo_failsafe

uint16_t r_page_servo_failsafe[PX4IO_SERVO_COUNT] = { 0, 0, 0, 0, 0, 0, 0, 0 }

PAGE 105.

Failsafe servo PWM values

Disable pulses as default.

§ r_page_servos

uint16_t r_page_servos[PX4IO_SERVO_COUNT]

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[]
Initial value:
= {
[PX4IO_P_STATUS_FREEMEM] = 0,
[PX4IO_P_STATUS_CPULOAD] = 0,
[PX4IO_P_STATUS_FLAGS] = 0,
[PX4IO_P_STATUS_ALARMS] = 0,
[PX4IO_P_STATUS_VSERVO] = 0,
[PX4IO_P_STATUS_VRSSI] = 0,
[PX4IO_P_STATUS_PRSSI] = 0,
[PX4IO_P_STATUS_MIXER] = 0,
}

PAGE 1.

Status values.