Compare commits

...

64 Commits

Author SHA1 Message Date
Daniel Agar f23740a3c5 parameters: add boolean support (PARAM_DEFINE_BOOL)
- real boolean parameter support saves a bit of space in export (bson)
and in mavlink sync
2021-12-23 17:08:12 -05:00
Daniel Agar 38af93085b linux_pwm_out: use PWM_MAIN parameter prefix
- this keeps things simpler for now across the old and new output
configuration
2021-12-23 15:57:11 -05:00
Daniel Agar 64e00c41d4 posix-configs: fix bbblue and rpi param import 2021-12-23 15:57:11 -05:00
Daniel Agar c8f2a29d67 boards: beaglebone_blue_default fix missing linux_pwm_out driver 2021-12-23 15:57:11 -05:00
Daniel Agar a5f58d321e boards: emlid_navio_default fix missing drivers/modules 2021-12-23 15:57:11 -05:00
Daniel Agar 7d7d707db9 commander: add COM_HOME_EN parameter to enable/disable home position 2021-12-23 15:46:31 -05:00
Daniel Agar 28c34a0484 Jenkins: hardware don't force tests dataman to pass and add to stackcheck build 2021-12-23 14:50:47 -05:00
PX4 BuildBot a069a47d50 Update submodule nuttx to latest Thu Dec 23 18:11:37 UTC 2021
- nuttx in PX4/Firmware (d0ce5705359f8beeb9faf7fa0d12279e03bb7ac7): https://github.com/PX4/NuttX/commit/d4c06e9dfb7bb14d0f19ef47b94d838b1caf50f3
    - nuttx current upstream: https://github.com/PX4/NuttX/commit/378032a44ba1ec0e7e3df16a23d21a6e77a2d816
    - Changes: https://github.com/PX4/NuttX/compare/d4c06e9dfb7bb14d0f19ef47b94d838b1caf50f3...378032a44ba1ec0e7e3df16a23d21a6e77a2d816

    378032a44b 2021-12-15 David Sidrane - [BACKPORT] stm32f7:sdmmc invalidate before DMA to avoid eviction overwrite
2021-12-23 14:50:47 -05:00
Daniel Agar a4040f7afd px4io_serial: always perform full abort DMA on error
- enable DMA error perf count
2021-12-23 12:48:42 -05:00
Matthias Grob f68ae39840 Commander: avoid RC actions during calibration 2021-12-22 09:08:23 -05:00
Beat Küng 89974c46b9 mavlink streams: add return in all cases
Generally not needed here, but GCC produced an error when compiling with
-finstrument-functions.
2021-12-22 08:47:33 -05:00
Beat Küng e29759d877 WorkQueueManager: explicitly convert PTHREAD_STACK_MIN to int
fixes a compiler error on GCC 11.2.1:
error: no matching function for call to ‘max(long int, int)’
2021-12-22 08:47:33 -05:00
alessandro 2c8a92c628 sitl config: put model name first
Github constructs the workflow names from the 
matrix configurations. Having latitude and longitude
in the fist columns makes these names rather cryptic.
2021-12-22 12:48:54 +01:00
Daniel Agar 47fcdb1fdb sensors/vehicle_angular_velocity: replace ESC/FFT elapsed perf counters with single cycle perf counter
- non-trivial perf counters (elapsed & interval) are relatively expensive
 - if ESC and FFT notch filtering are enabled this reduces 6 updates (2 per axis) to 1
2021-12-21 14:21:10 -05:00
Julian Oes 5894f302b5 mavlink: add test for zero padding
We want to avoid publishing garbage leftover from earlier publications.
2021-12-21 09:40:36 -05:00
Julian Oes 5cfe30fa2e mavlink: fix include for unit tests
This is required to find the include directory for the unit test of the
MavlinkStatustextHandler.
2021-12-21 09:40:36 -05:00
Julian Oes 2e0286e6bb mavlink: support receiving multi-chunk statustexts
This adds support for mavlink statustext messages arriving in multiple
chunks.
2021-12-21 09:40:36 -05:00
Daniel Agar 0029a75ab0 systemcmds: convert c -> c++ 2021-12-21 09:22:49 -05:00
Julian Oes d2e931858d px4io: remove unused cmake_policy
This should fix the build with older cmake versions.
2021-12-21 09:21:25 -05:00
Julian Oes 9686c81f7d boards: enable flow control on CDCACM
This enables flow control on CDCACM for the NuttX boards which fixes a
problem where HITL would stall.

The stall could happen if the hardware would be a bit too slow in
keeping up with the incoming messages. Often, this happened on arming
because the logger would take some time to log all parameters right at
the beginning.

The stall would then not recover due to NuttX bug where the rx interrupt
would not be restored correctly and instead only a slower watchdog would
release the next read. This watchdog takes 200ms which means it's hard
to impossible to get out of the situation without restarting sim and/or
PX4.  For more information about the issue, see:
apache/incubator-nuttx#3633

As a workaround, until that bug is fixed, and because it makes sense
anyway, I propose to enable FLOWCONTROL for the serial via USB.
2021-12-21 08:01:38 +01:00
DanielePettenuzzo 88521b0145 print error only if the mavlink command fails
In some cases we printed also the mavlink commands that replied
to be unsupported. This is not an error to show in the log.
2021-12-21 07:37:23 +01:00
Julian Oes 199b5e7d48 Revert "mavsdk_tests: retry gz model spawn command"
This reverts commit c15d3f7cfa.
2021-12-20 13:05:46 -05:00
Julian Oes 9184038359 mavsdk_tests: try to restart gzserver
Sometimes gzserver seems to just not start correctly. With this commit
we try to just restart.
2021-12-20 13:05:46 -05:00
TSC21 9894598b63 mavsdk_tests: update to be able to fetch rtps builds as well 2021-12-20 13:05:46 -05:00
Thomas Debrunner 9312c772f1 mavsdk-tests: Re-try to launch a mission for some time before failing. This mitigates an issue where the flight controller has an uploaded mission, but has not finished the mission feasibility checks yet. 2021-12-20 13:05:46 -05:00
Julian Oes 764af19da4 mavsdk_tests: bump MAVSDK version to v0.48.0
This might help with CI tests where we get RC loss because, presumably,
MAVSDK is not sending them in time.
2021-12-20 13:05:46 -05:00
Claudio Micheli 9d02851893 vmount: increase stack size to 2100
Signed-off-by: Claudio Micheli <claudio@auterion.com>
2021-12-20 13:05:15 -05:00
Julian Oes 90fe4b7a54 vmount: publish gimbal v2 protocol for v1 gimbals
This enables the use case where the gimbal v2 protocol is used
between the ground station and the drone, and the gimbal v1 protocol is
used between the drone and the gimbal.
2021-12-20 13:05:15 -05:00
Julian Oes 6d74b390d9 vmount: use absolute angle for location tracking
I'm pretty sure it makes more sense to use an absolute angle to track a
lat/lon location.
2021-12-20 13:05:15 -05:00
Julian Oes d88f9353e8 vmount: improve debug message
This should help to figure out when gimbal commands don't work.
2021-12-20 13:05:15 -05:00
Julian Oes f7c4034f3c vmount: fix v1 frames with v2 input
It looks like the frames for pitch and roll were not set correctly when
v1 is used in v2 input.
2021-12-20 13:05:15 -05:00
Julian Oes 0ce4eae314 vmount: fix v1 frames for v1 input
This basically means that we want roll and pitch to be absolute, so
relative to the horizon.
2021-12-20 13:05:15 -05:00
Julian Oes 3c5bf497a3 esc_calib: remove unused variable 2021-12-20 10:56:24 -05:00
Julian Oes a6431ab8f0 simulator: fix implicit-const-int-float-conversion 2021-12-20 10:56:24 -05:00
Daniel Agar 019eaf7038 multicopter: minimize dt jitter by using estimate timestamp_sample 2021-12-17 17:52:28 -05:00
Julian Oes dcf69144cb mavsdk_tests: fix type for mypy check
This was probably triggered due to a mypy update.
2021-12-17 17:28:54 +01:00
marcojob 2cfe08b3b1 small typo in vehicle_local_position msg 2021-12-17 15:45:07 +01:00
Igor Mišić 2d680dfd1a pps_capture: fix PARAM_PREFIX for boards with px4io (CONFIG_BOARD_IO) 2021-12-17 07:56:08 +01:00
Igor Mišić 89f828fba7 pps_capture: advertise for logging 2021-12-17 07:56:08 +01:00
Igor Mišić 17f5df2d3e pps_capture: add argument guard 2021-12-17 07:56:08 +01:00
Beat Küng f6ced71d26 pps_capture: make it configurable via output functions 2021-12-17 07:56:08 +01:00
Igor Mišić 0f60e7debf pps_capture: add kconfig 2021-12-17 07:56:08 +01:00
Michael Schaeuble 064a602962 Add PPS capture message to logged topics, simplify timestamp logic and small cleanup 2021-12-17 07:56:08 +01:00
Michael Schaeuble 5ad8b84dec Fix PPS based UTC timestamp in camera trigger and capture messages
The existing implementation has about 100ms difference to a reference clock. With the changes this error less than 25us.
- Use sensor_gps messages with hrt timestamps as RTC reference and not the system realtime clock. The PPS interrupt can then be aligned with the GPS clock system.
- Keep fallback based on system RTC when no PPS pulse was captured
2021-12-17 07:56:08 +01:00
Michael Schaeuble ebb657bcf4 Fix camera trigger via MAVLink when camera capture feedback is enabled
- camera_trigger module always publishes the camera_trigger msg (independent of the camera feedback)
- Use camera_trigger msg and set the feedback flag
- Subscribing modules determine if the message is relevant based on the feedback message
2021-12-17 07:56:08 +01:00
Michael Schaeuble 3e4031cf0f Set rtc_edge_time also in capture_callback
When using an FMU channel as PPS capture GPIO, the rtc_edge_time is now set as well. The delay between actual capture and callback is compensated with the elapsed time of the rtc clock.
2021-12-17 07:56:08 +01:00
Thomas Debrunner 43bc6db99e PPS capture: Add a param to enable / disable PPS capture module. This is important, since it takes over an FMU pin which can no longer be used for actuator output. 2021-12-17 07:56:08 +01:00
Igor Mišić 298a8c4637 boards/fmu-v5x: allocating PPS pin
- start pps_capture before pwm_out
2021-12-17 07:56:08 +01:00
Igor Mišić 60a212f717 px4_arch: add PX4_MAKE_GPIO_EXTI 2021-12-17 07:56:08 +01:00
Igor Mišić c6098ef3dd camera_capture: update to use PPS correction for UTC time 2021-12-17 07:56:08 +01:00
Igor Mišić 8eca35111e camera_trigger: update to use PPS correction for UTC time 2021-12-17 07:56:08 +01:00
Igor Mišić 72b1db4a63 pps_capture: implementation of pulse per second capture driver 2021-12-17 07:56:08 +01:00
Daniel Agar 43a04c9bca fix PARAM_PREFIX for boards with px4io (CONFIG_BOARD_IO) 2021-12-16 07:20:12 +01:00
Daniel Agar ecc2ca7f98 mathlib: int16_t negate explicitly handle both INT16_MIN and INT16_MAX
- technically negating INT16_MAX doesn't need special handling, but
this ensures any simple saturation logic downstream works by default
2021-12-15 12:45:58 -05:00
Daniel Agar d59d16a6cd drivers/accelerometer: adjust int16_t clipping threshold slightly
- consider data clipped/saturated if it's INT16_MIN/INT16_MAX or within 1
 - this accommodates rotated data (|INT16_MIN| = INT16_MAX + 1) and sensors that may re-use the lowest bit for other purposes (sync indicator, etc)
2021-12-15 12:45:58 -05:00
Daniel Agar ea29b45282 ekf2: enable mag check by default, but commander only warn 2021-12-15 09:43:46 -05:00
Daniel Agar 3fba7288af ekf2: selector use hysteresis for healthy flag
- require that an instance is healthy continuously for >= 1s before
allowing it to be used
2021-12-14 09:52:36 -05:00
Thomas Debrunner eb69f15d3a health-flags: Increase health flags to 64 bit bit field to support extended sys status mavlink message
Add SYS_STATUS flag for parachute
2021-12-14 09:41:12 -05:00
Thomas Debrunner 37099f85b9 mavlink: Update to newest mavlink master 2021-12-14 09:41:12 -05:00
Silvan Fuhrer e9b9176ce2 param translation: fix for FW_GPSF_LT and FW_GPSF_R
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2021-12-14 08:27:04 +01:00
Jukka Laitinen ce6147f570 uORB: Remove transfer of memory allocation ownership to CDev
- Allocate and free the node name in uORBDeviceNode.
- Add protected build support by de-allocating the name with kmm_free, when
  running in kernel side. strdup allocates from the kernel heap in NuttX kernel
  space.
- Remove the CDev::unregister_driver_and_memory(), it is no longer used

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2021-12-13 22:52:36 -05:00
Jukka Laitinen 25c10eb124 cdev: build & link fixes for NuttX protected build
- Always link to nuttx_fs for register/unregister_driver calls

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
2021-12-13 22:52:36 -05:00
Daniel Agar acdcc35392 tests: dataman fix ssize_t printf 2021-12-13 22:51:23 -05:00
alexklimaj 6133ef0d63 Dronecan fix beep driver 2021-12-13 14:52:46 -05:00
274 changed files with 2043 additions and 903 deletions
+5 -4
View File
@@ -410,10 +410,8 @@ pipeline {
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "sd_bench -u -v"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "sd_stress"'
// test dataman (stop mavlink & navigator first)
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "mavlink stop-all"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "navigator stop"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "tests dataman" || true'
// test dataman
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "tests dataman"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "tests file" || true'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "uorb_tests"'
@@ -497,6 +495,9 @@ pipeline {
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "work_queue status"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "uorb_tests"'
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "uorb_tests latency_test" || true'
// test dataman
sh './Tools/HIL/run_nsh_cmd.py --device `find /dev/serial -name *usb-*` --cmd "tests dataman"'
}
}
stage("status") {
+4 -4
View File
@@ -15,10 +15,10 @@ jobs:
fail-fast: false
matrix:
config:
- {latitude: "59.617693", longitude: "-151.145316", altitude: "48", build_type: "RelWithDebInfo", model: "iris" } # Alaska
- {latitude: "-38.071235", longitude: "145.281220", altitude: "31", build_type: "AddressSanitizer", model: "standard_vtol" } # Australia
- {latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo", model: "tailsitter" } # Florida
- {latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage", model: "standard_vtol" } # Zurich
- {model: "iris", latitude: "59.617693", longitude: "-151.145316", altitude: "48", build_type: "RelWithDebInfo" } # Alaska
- {model: "standard_vtol", latitude: "-38.071235", longitude: "145.281220", altitude: "31", build_type: "AddressSanitizer" } # Australia
- {model: "tailsitter" , latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo" } # Florida
- {model: "standard_vtol", latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage" } # Zurich
container:
image: px4io/px4-dev-simulation-focal:2021-09-08
+6
View File
@@ -477,6 +477,12 @@ else
rc_input start $RC_INPUT_ARGS
fi
# PPS capture driver (before pwm_out)
if param greater -s PPS_CAP_ENABLE 0
then
pps_capture start
fi
# Camera capture driver (before pwm_out)
if param greater -s CAM_CAP_FBACK 0
then
+1
View File
@@ -92,6 +92,7 @@ pca9685,CONFIG_DRIVERS_PCA9685=y
pca9685_pwm_out,CONFIG_DRIVERS_PCA9685_PWM_OUT=y
power_monitor/ina226,CONFIG_DRIVERS_POWER_MONITOR_INA226=y
power_monitor/voxlpm,CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y
pps_capture,CONFIG_DRIVERS_PPS_CAPTURE=y
protocol_splitter,CONFIG_DRIVERS_PROTOCOL_SPLITTER=y
pwm_input,CONFIG_DRIVERS_PWM_INPUT=y
pwm_out_sim,CONFIG_DRIVERS_PWM_OUT_SIM=y
+1 -4
View File
@@ -111,7 +111,7 @@ def parse_yaml_parameters_config(yaml_config, ethernet_supported):
for key in param['values']:
tags += '\n * @value {:} {:}'.format(key, param['values'][key])
elif param['type'] == 'boolean':
param_type = 'INT32'
param_type = 'BOOL'
tags += '\n * @boolean'
elif param['type'] == 'int32':
param_type = 'INT32'
@@ -136,9 +136,6 @@ def parse_yaml_parameters_config(yaml_config, ethernet_supported):
else:
default_value = param['default']
if type(default_value) == bool:
default_value = int(default_value)
# output the existing C-style format
ret += '''
/**
@@ -42,6 +42,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0030
CONFIG_CDCACM_PRODUCTSTR="MindPX FMU v2.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0061
CONFIG_CDCACM_PRODUCTSTR="PX4 ATL Mantis-EDU"
CONFIG_CDCACM_RXBUFSIZE=600
+2 -1
View File
@@ -14,6 +14,7 @@ CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
CONFIG_DRIVERS_IMU_INVENSENSE_MPU9250=y
CONFIG_DRIVERS_LINUX_PWM_OUT=y
CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y
CONFIG_DRIVERS_PWM_OUT_SIM=y
CONFIG_DRIVERS_RC_INPUT=y
@@ -23,6 +24,7 @@ CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_BATTERY_STATUS=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_EKF2=y
CONFIG_MODULES_ESC_BATTERY=y
@@ -46,7 +48,6 @@ CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
@@ -42,6 +42,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0016
CONFIG_CDCACM_PRODUCTSTR="PX4 Crazyflie v2.0"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -41,6 +41,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0016
CONFIG_CDCACM_PRODUCTSTR="PX4 Crazyflie v2.0"
CONFIG_CDCACM_RXBUFSIZE=300
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=22114
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004c
CONFIG_CDCACM_PRODUCTSTR="PX4 BL CUAV Nora"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004c
CONFIG_CDCACM_PRODUCTSTR="PX4 CUAV Nora"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=22114
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004c
CONFIG_CDCACM_PRODUCTSTR="PX4 BL CUAV X7Pro"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004c
CONFIG_CDCACM_PRODUCTSTR="PX4 CUAV X7Pro"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=79954
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1016
CONFIG_CDCACM_PRODUCTSTR="PX4 BL CubePilot CubeOrange"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1016
CONFIG_CDCACM_PRODUCTSTR="CubeOrange"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1016
CONFIG_CDCACM_PRODUCTSTR="CubeOrange"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -48,6 +48,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1012
CONFIG_CDCACM_PRODUCTSTR="CubeYellow"
CONFIG_CDCACM_RXBUFSIZE=600
+3 -1
View File
@@ -14,6 +14,8 @@ CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_ANALOG_DEVICES_ADIS16448=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
CONFIG_DRIVERS_IMU_INVENSENSE_MPU9250=y
CONFIG_DRIVERS_IMU_ST_LSM9DS1=y
CONFIG_DRIVERS_LINUX_PWM_OUT=y
CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y
CONFIG_DRIVERS_MAGNETOMETER_LSM9DS1_MAG=y
CONFIG_DRIVERS_PWM_OUT_SIM=y
@@ -24,6 +26,7 @@ CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_BATTERY_STATUS=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_EKF2=y
CONFIG_MODULES_ESC_BATTERY=y
@@ -47,7 +50,6 @@ CONFIG_MODULES_MC_AUTOTUNE_ATTITUDE_CONTROL=y
CONFIG_MODULES_MC_HOVER_THRUST_ESTIMATOR=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_ROVER_POS_CONTROL=y
@@ -41,6 +41,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0016
CONFIG_CDCACM_PRODUCTSTR="PX4 FreeFly RTK GPS"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=22114
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="PX4 BL Holybro Durandal Vx"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="PX4 DurandalV1"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0016
CONFIG_CDCACM_PRODUCTSTR="PX4 KakuteF7"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004E
CONFIG_CDCACM_PRODUCTSTR="PX4 PIX32V5"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=22114
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="Matek H743-slim"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -45,6 +45,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0036
CONFIG_CDCACM_PRODUCTSTR="MatekH743-slim"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0xa32f
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU ModalAI FCv1"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0xa330
CONFIG_CDCACM_PRODUCTSTR="PX4 BL ModalAI FCv2"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0xa330
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU ModalAI FCv2"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x008D
CONFIG_CDCACM_PRODUCTSTR="mRoControlZeroF7"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x008D
CONFIG_CDCACM_PRODUCTSTR="mRoControlZeroF7"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1023
CONFIG_CDCACM_PRODUCTSTR="PX4 BL mRo ControlZeroH7 OEM"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1024
CONFIG_CDCACM_PRODUCTSTR="mRoControlZeroH7 OEM"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1023
CONFIG_CDCACM_PRODUCTSTR="PX4 BL mRo ControlZeroH7"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1023
CONFIG_CDCACM_PRODUCTSTR="mRoControlZeroH7"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1017
CONFIG_CDCACM_PRODUCTSTR="PX4 BL mRo Pixracer Pro"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x1017
CONFIG_CDCACM_PRODUCTSTR="mRoPixracerPro"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0088
CONFIG_CDCACM_PRODUCTSTR="mRo x2.1-777"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -43,6 +43,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0021
CONFIG_CDCACM_PRODUCTSTR="PX4 AUAV X2.1"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -30,6 +30,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0001
CONFIG_CDCACM_PRODUCTSTR="PX4 OmnibusF4SD"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -42,6 +42,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0011
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v2.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -43,6 +43,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0011
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v2.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -43,6 +43,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0012
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v4.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -43,6 +43,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0013
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v4.x PRO"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0032
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -48,6 +48,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0032
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0032
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -48,6 +48,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0032
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -49,6 +49,7 @@ CONFIG_C99_BOOL8=y
CONFIG_CAN_EXTID=y
CONFIG_CAN_FIFOSIZE=32
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0032
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0033
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v5X.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0036
CONFIG_CDCACM_PRODUCTSTR="PX4 BL FMU v6U.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0036
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v6U.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -29,6 +29,7 @@ CONFIG_BOARD_LOOPSPERMSEC=95150
CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0035
CONFIG_CDCACM_PRODUCTSTR="PX4 BL FMU v6X.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -46,6 +46,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0035
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU v6X.x"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -47,6 +47,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x004b
CONFIG_CDCACM_PRODUCTSTR="PX4 SP RACING H7 EXTREME"
CONFIG_CDCACM_RXBUFSIZE=600
@@ -42,6 +42,7 @@ CONFIG_BOARD_RESET_ON_ASSERT=2
CONFIG_BUILTIN=y
CONFIG_C99_BOOL8=y
CONFIG_CDCACM=y
CONFIG_CDCACM_IFLOWCONTROL=y
CONFIG_CDCACM_PRODUCTID=0x0012
CONFIG_CDCACM_PRODUCTSTR="PX4 FMU UVify Core"
CONFIG_CDCACM_RXBUFSIZE=600
+5 -1
View File
@@ -49,7 +49,11 @@ add_custom_target(metadata_airframes
set(generated_params_dir ${PX4_BINARY_DIR}/generated_params_metadata)
file(GLOB_RECURSE yaml_config_files ${PX4_SOURCE_DIR}/src/modules/*.yaml
${PX4_SOURCE_DIR}/src/drivers/*.yaml ${PX4_SOURCE_DIR}/src/lib/*.yaml)
list(FILTER yaml_config_files EXCLUDE REGEX ".*/pwm_out_sim/") # avoid param duplicates
# avoid param duplicates
list(FILTER yaml_config_files EXCLUDE REGEX ".*/pwm_out_sim/")
list(FILTER yaml_config_files EXCLUDE REGEX ".*/linux_pwm_out/")
add_custom_target(metadata_parameters
COMMAND ${CMAKE_COMMAND} -E make_directory ${PX4_BINARY_DIR}/docs
COMMAND ${CMAKE_COMMAND} -E make_directory ${generated_params_dir}
+1
View File
@@ -118,6 +118,7 @@ set(msg_files
orbit_status.msg
parameter_update.msg
ping.msg
pps_capture.msg
position_controller_landing_status.msg
position_controller_status.msg
position_setpoint.msg
+2
View File
@@ -4,4 +4,6 @@ uint64 timestamp_utc # UTC timestamp
uint32 seq # Image sequence number
bool feedback # Trigger feedback from camera
uint32 ORB_QUEUE_LENGTH = 2
# TOPICS camera_trigger
+2
View File
@@ -0,0 +1,2 @@
uint64 timestamp # time since system start (microseconds) at PPS capture event
uint64 rtc_timestamp # Corrected GPS UTC timestamp at PPS capture event
+1 -1
View File
@@ -6,7 +6,7 @@ uint64 timestamp_sample # the timestamp of the raw data (microse
bool xy_valid # true if x and y are valid
bool z_valid # true if z is valid
bool v_xy_valid # true if vy and vy are valid
bool v_xy_valid # true if vx and vy are valid
bool v_z_valid # true if vz is valid
# Position in local NED frame
+4 -3
View File
@@ -92,9 +92,10 @@ bool geofence_violated
uint8 failure_detector_status # Bitmask containing FailureDetector status [0, 0, 0, 0, 0, FAILURE_ALT, FAILURE_PITCH, FAILURE_ROLL]
# see SYS_STATUS mavlink message for the following
uint32 onboard_control_sensors_present
uint32 onboard_control_sensors_enabled
uint32 onboard_control_sensors_health
# lower 32 bits are for the base flags, higher 32 bits are or the extended flags
uint64 onboard_control_sensors_present
uint64 onboard_control_sensors_enabled
uint64 onboard_control_sensors_health
uint8 ARM_DISARM_REASON_TRANSITION_TO_STANDBY = 0
+1 -1
View File
@@ -30,7 +30,7 @@ bool circuit_breaker_vtol_fw_arming_check # set to true if for VTOLs arming in
bool offboard_control_signal_lost
bool rc_signal_found_once
bool rc_input_blocked # set if RC input should be ignored temporarily
bool rc_calibration_in_progress
bool rc_calibration_valid # set if RC calibration is valid
bool vtol_transition_failure # Set to true if vtol transition failed
bool usb_connected # status of the USB power supply
@@ -261,7 +261,7 @@ private:
int32_t _val;
};
//external version
// external version
template<px4::params p>
class Param<int32_t &, p>
{
@@ -318,7 +318,7 @@ class Param<bool, p>
{
public:
// static type-check
static_assert(px4::parameters_type[(int)p] == PARAM_TYPE_INT32, "parameter type must be int32_t");
static_assert(px4::parameters_type[(int)p] == PARAM_TYPE_BOOL, "parameter type must be bool");
Param()
{
@@ -331,18 +331,10 @@ public:
const bool &reference() const { return _val; }
/// Store the parameter value to the parameter storage (@see param_set())
bool commit() const
{
int32_t value_int = (int32_t)_val;
return param_set(handle(), &value_int) == 0;
}
bool commit() const { return param_set(handle(), &_val) == 0; }
/// Store the parameter value to the parameter storage, w/o notifying the system (@see param_set_no_notification())
bool commit_no_notification() const
{
int32_t value_int = (int32_t)_val;
return param_set_no_notification(handle(), &value_int) == 0;
}
bool commit_no_notification() const { return param_set_no_notification(handle(), &_val) == 0; }
/// Set and commit a new value. Returns true if the value changed.
bool commit_no_notification(bool val)
@@ -364,38 +356,83 @@ public:
update();
}
bool update()
{
int32_t value_int;
int ret = param_get(handle(), &value_int);
if (ret == 0) {
_val = value_int != 0;
return true;
}
return false;
}
bool update() { return param_get(handle(), &_val) == 0; }
param_t handle() const { return param_handle(p); }
private:
bool _val;
};
// external version
template<px4::params p>
class Param<bool &, p>
{
public:
// static type-check
static_assert(px4::parameters_type[(int)p] == PARAM_TYPE_BOOL, "parameter type must be bool");
Param(bool &external_val)
: _val(external_val)
{
param_set_used(handle());
update();
}
bool get() const { return _val; }
const bool &reference() const { return _val; }
/// Store the parameter value to the parameter storage (@see param_set())
bool commit() const { return param_set(handle(), &_val) == 0; }
/// Store the parameter value to the parameter storage, w/o notifying the system (@see param_set_no_notification())
bool commit_no_notification() const { return param_set_no_notification(handle(), &_val) == 0; }
/// Set and commit a new value. Returns true if the value changed.
bool commit_no_notification(bool val)
{
if (val != _val) {
set(val);
commit_no_notification();
return true;
}
return false;
}
void set(bool val) { _val = val; }
void reset()
{
param_reset_no_notification(handle());
update();
}
bool update() { return param_get(handle(), &_val) == 0; }
param_t handle() const { return param_handle(p); }
private:
bool &_val;
};
template <px4::params p>
using ParamFloat = Param<float, p>;
using ParamBool = Param<bool, p>;
template <px4::params p>
using ParamInt = Param<int32_t, p>;
template <px4::params p>
using ParamExtFloat = Param<float &, p>;
using ParamFloat = Param<float, p>;
template <px4::params p>
using ParamExtBool = Param<bool &, p>;
template <px4::params p>
using ParamExtInt = Param<int32_t &, p>;
template <px4::params p>
using ParamBool = Param<bool, p>;
using ParamExtFloat = Param<float &, p>;
} /* namespace do_not_explicitly_use_this_namespace */
@@ -268,7 +268,7 @@ WorkQueueManagerRun(int, char **)
// On posix system , the desired stacksize round to the nearest multiplier of the system pagesize
// It is a requirement of the pthread_attr_setstacksize* function
const unsigned int page_size = sysconf(_SC_PAGESIZE);
const size_t stacksize_adj = math::max(PTHREAD_STACK_MIN, PX4_STACK_ADJUSTED(wq->stacksize));
const size_t stacksize_adj = math::max((int)PTHREAD_STACK_MIN, PX4_STACK_ADJUSTED(wq->stacksize));
const size_t stacksize = (stacksize_adj + page_size - (stacksize_adj % page_size));
#endif
+2 -10
View File
@@ -99,19 +99,11 @@ int uORB::DeviceMaster::advertise(const struct orb_metadata *meta, bool is_adver
*instance = group_tries;
}
/* driver wants a permanent copy of the path, so make one here */
const char *devpath = strdup(nodepath);
if (devpath == nullptr) {
return -ENOMEM;
}
/* construct the new node, passing the ownership of path to it */
uORB::DeviceNode *node = new uORB::DeviceNode(meta, group_tries, devpath);
uORB::DeviceNode *node = new uORB::DeviceNode(meta, group_tries, nodepath);
/* if we didn't get a device, that's bad, free the path too */
/* if we didn't get a device, that's bad */
if (node == nullptr) {
free((void *)devpath);
return -ENOMEM;
}
+14 -2
View File
@@ -42,6 +42,10 @@
#include "uORBCommunicator.hpp"
#endif /* ORB_COMMUNICATOR */
#if defined(__PX4_NUTTX)
#include <nuttx/mm/mm.h>
#endif
static uORB::SubscriptionInterval *filp_to_subscription(cdev::file_t *filp) { return static_cast<uORB::SubscriptionInterval *>(filp->f_priv); }
// round up to nearest power of two
@@ -71,7 +75,7 @@ static inline uint8_t round_pow_of_two_8(uint8_t n)
uORB::DeviceNode::DeviceNode(const struct orb_metadata *meta, const uint8_t instance, const char *path,
uint8_t queue_size) :
CDev(path),
CDev(strdup(path)), // success is checked in CDev::init
_meta(meta),
_instance(instance),
_queue_size(round_pow_of_two_8(queue_size))
@@ -82,7 +86,15 @@ uORB::DeviceNode::~DeviceNode()
{
delete[] _data;
CDev::unregister_driver_and_memory();
const char *devname = get_devname();
if (devname) {
#if defined(__PX4_NUTTX) && !defined(CONFIG_BUILD_FLAT)
kmm_free((void *)devname);
#else
free((void *)devname);
#endif
}
}
int
@@ -62,7 +62,8 @@ typedef enum io_timer_channel_mode_t {
IOTimerChanMode_Trigger = 5,
IOTimerChanMode_Dshot = 6,
IOTimerChanMode_LED = 7,
IOTimerChanMode_Other = 8,
IOTimerChanMode_PPS = 8,
IOTimerChanMode_Other = 9,
IOTimerChanModeSize
} io_timer_channel_mode_t;
@@ -149,8 +149,8 @@ static int io_timer_handler7(int irq, void *context, void *arg);
#define rFCTRL20(_tim) REG(_tim, 0, IMXRT_FLEXPWM_FCTRL20_OFFSET) /* Fault Control 2 Register */
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0 };
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED PPS Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
typedef uint8_t io_timer_allocation_t; /* big enough to hold MAX_IO_TIMERS */
@@ -109,6 +109,7 @@ int kinetis_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge, boo
#define _PX4_MAKE_GPIO(pin_ftmx, io) ((((uint32_t)(pin_ftmx)) & ~(_PIN_MODE_MASK | _PIN_OPTIONS_MASK)) |(io))
#define PX4_MAKE_GPIO_INPUT(gpio) _PX4_MAKE_GPIO(gpio, GPIO_PULLUP)
#define PX4_MAKE_GPIO_EXTI(gpio) _PX4_MAKE_GPIO(gpio, PIN_INT_BOTH | GPIO_PULLUP)
#define PX4_MAKE_GPIO_OUTPUT_SET(gpio) _PX4_MAKE_GPIO(gpio, GPIO_HIGHDRIVE)
#define PX4_MAKE_GPIO_OUTPUT_CLEAR(gpio) _PX4_MAKE_GPIO(gpio, GPIO_LOWDRIVE)
@@ -66,7 +66,8 @@ typedef enum io_timer_channel_mode_t {
IOTimerChanMode_Trigger = 5,
IOTimerChanMode_Dshot = 6,
IOTimerChanMode_LED = 7,
IOTimerChanMode_Other = 8,
IOTimerChanMode_PPS = 8,
IOTimerChanMode_Other = 9,
IOTimerChanModeSize
} io_timer_channel_mode_t;
@@ -152,8 +152,8 @@ static int io_timer_handler7(int irq, void *context, void *arg);
#define CnSC_PWMIN_INIT 0 // TBD
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0 };
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED PPS Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
typedef uint8_t io_timer_allocation_t; /* big enough to hold MAX_IO_TIMERS */
@@ -62,7 +62,8 @@ typedef enum io_timer_channel_mode_t {
IOTimerChanMode_Trigger = 5,
IOTimerChanMode_Dshot = 6,
IOTimerChanMode_LED = 7,
IOTimerChanMode_Other = 8,
IOTimerChanMode_PPS = 8,
IOTimerChanMode_Other = 9,
IOTimerChanModeSize
} io_timer_channel_mode_t;
@@ -150,8 +150,8 @@ static int io_timer_handler7(int irq, void *context, void *arg);
#define CnSC_PWMIN_INIT 0 // TBD
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0 };
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED PPS Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
typedef uint8_t io_timer_allocation_t; /* big enough to hold MAX_IO_TIMERS */
@@ -75,7 +75,8 @@ typedef enum io_timer_channel_mode_t {
IOTimerChanMode_Trigger = 5,
IOTimerChanMode_Dshot = 6,
IOTimerChanMode_LED = 7,
IOTimerChanMode_Other = 8,
IOTimerChanMode_PPS = 8,
IOTimerChanMode_Other = 9,
IOTimerChanModeSize
} io_timer_channel_mode_t;
@@ -103,6 +103,7 @@ __BEGIN_DECLS
#define px4_arch_gpiosetevent(pinset,r,f,e,fp,a) stm32_gpiosetevent(pinset,r,f,e,fp,a)
#define PX4_MAKE_GPIO_INPUT(gpio) (((gpio) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_INPUT|GPIO_PULLUP))
#define PX4_MAKE_GPIO_EXTI(gpio) (((gpio) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_EXTI|GPIO_INPUT|GPIO_PULLUP))
#define PX4_MAKE_GPIO_OUTPUT_CLEAR(gpio) (((gpio) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR))
#define PX4_MAKE_GPIO_OUTPUT_SET(gpio) (((gpio) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET))
@@ -114,7 +114,7 @@ public:
ArchPX4IOSerial();
ArchPX4IOSerial(ArchPX4IOSerial &) = delete;
ArchPX4IOSerial &operator = (const ArchPX4IOSerial &) = delete;
~ArchPX4IOSerial();
virtual ~ArchPX4IOSerial();
virtual int init();
virtual int ioctl(unsigned operation, unsigned &arg);
@@ -159,7 +159,6 @@ private:
/**
* Performance counters.
*/
perf_counter_t _pc_dmasetup;
perf_counter_t _pc_dmaerrs;
/**
@@ -149,8 +149,8 @@ static int io_timer_handler7(int irq, void *context, void *arg);
/* The transfer is done to 4 registers starting from TIMx_CR1 + TIMx_DCR.DBA */
#define TIM_DMABURSTLENGTH_4TRANSFERS 0x00000300U
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0 };
// NotUsed PWMOut PWMIn Capture OneShot Trigger Dshot LED PPS Other
io_timer_channel_allocation_t channel_allocations[IOTimerChanModeSize] = { UINT16_MAX, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
typedef uint8_t io_timer_allocation_t; /* big enough to hold MAX_IO_TIMERS */
@@ -58,13 +58,7 @@ ArchPX4IOSerial::ArchPX4IOSerial() :
_current_packet(nullptr),
_rx_dma_status(_dma_status_inactive),
_completion_semaphore(SEM_INITIALIZER(0)),
#if 0
_pc_dmasetup(perf_alloc(PC_ELAPSED, "io_dmasetup ")),
_pc_dmaerrs(perf_alloc(PC_COUNT, "io_dmaerrs "))
#else
_pc_dmasetup(nullptr),
_pc_dmaerrs(nullptr)
#endif
_pc_dmaerrs(perf_alloc(PC_COUNT, MODULE_NAME": DMA errors"))
{
}
@@ -99,7 +93,6 @@ ArchPX4IOSerial::~ArchPX4IOSerial()
/* and kill our semaphores */
px4_sem_destroy(&_completion_semaphore);
perf_free(_pc_dmasetup);
perf_free(_pc_dmaerrs);
}
@@ -202,7 +195,6 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg)
if (count >= 5000) {
syslog(LOG_INFO, "==== test 1 : %u failures ====\n", fails);
perf_print_counter(_pc_txns);
perf_print_counter(_pc_dmasetup);
perf_print_counter(_pc_retries);
perf_print_counter(_pc_timeouts);
perf_print_counter(_pc_crcerrs);
@@ -241,7 +233,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
/* start RX DMA */
perf_begin(_pc_txns);
perf_begin(_pc_dmasetup);
/* DMA setup time ~3µs */
_rx_dma_status = _dma_status_waiting;
@@ -288,8 +279,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
//rCR1 |= USART_CR1_TE;
rCR3 |= USART_CR3_DMAT;
perf_end(_pc_dmasetup);
/* compute the deadline for a 10ms timeout */
struct timespec abstime;
clock_gettime(CLOCK_REALTIME, &abstime);
@@ -309,6 +298,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
if (ret == OK) {
/* check for DMA errors */
if (_rx_dma_status & DMA_STATUS_TEIF) {
// stream transfer error, ensure all DMA is also stopped before exiting early
_abort_dma();
perf_count(_pc_dmaerrs);
ret = -EIO;
break;
@@ -319,6 +310,7 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
_current_packet->crc = 0;
if ((crc != crc_packet(_current_packet)) || (PKT_CODE(*_current_packet) == PKT_CODE_CORRUPT)) {
_abort_dma();
perf_count(_pc_crcerrs);
ret = -EIO;
break;
@@ -68,13 +68,7 @@ ArchPX4IOSerial::ArchPX4IOSerial() :
_current_packet(nullptr),
_rx_dma_status(_dma_status_inactive),
_completion_semaphore(SEM_INITIALIZER(0)),
#if 0
_pc_dmasetup(perf_alloc(PC_ELAPSED, "io_dmasetup ")),
_pc_dmaerrs(perf_alloc(PC_COUNT, "io_dmaerrs "))
#else
_pc_dmasetup(nullptr),
_pc_dmaerrs(nullptr)
#endif
_pc_dmaerrs(perf_alloc(PC_COUNT, MODULE_NAME": DMA errors"))
{
}
@@ -109,7 +103,6 @@ ArchPX4IOSerial::~ArchPX4IOSerial()
/* and kill our semaphores */
px4_sem_destroy(&_completion_semaphore);
perf_free(_pc_dmasetup);
perf_free(_pc_dmaerrs);
}
@@ -214,7 +207,6 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg)
if (count >= 5000) {
syslog(LOG_INFO, "==== test 1 : %u failures ====\n", fails);
perf_print_counter(_pc_txns);
perf_print_counter(_pc_dmasetup);
perf_print_counter(_pc_retries);
perf_print_counter(_pc_timeouts);
perf_print_counter(_pc_crcerrs);
@@ -256,7 +248,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
/* start RX DMA */
perf_begin(_pc_txns);
perf_begin(_pc_dmasetup);
/* DMA setup time ~3µs */
_rx_dma_status = _dma_status_waiting;
@@ -307,8 +298,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
//rCR1 &= ~USART_CR1_TE;
//rCR1 |= USART_CR1_TE;
perf_end(_pc_dmasetup);
/* compute the deadline for a 10ms timeout */
struct timespec abstime;
clock_gettime(CLOCK_REALTIME, &abstime);
@@ -328,8 +317,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
if (ret == OK) {
/* check for DMA errors */
if (_rx_dma_status & DMA_STATUS_TEIF) {
// stream transfer error, ensure TX DMA is also stopped before exiting early
stm32_dmastop(_tx_dma);
// stream transfer error, ensure all DMA is also stopped before exiting early
_abort_dma();
perf_count(_pc_dmaerrs);
ret = -EIO;
break;
@@ -340,6 +329,7 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
_current_packet->crc = 0;
if ((crc != crc_packet(_current_packet)) || (PKT_CODE(*_current_packet) == PKT_CODE_CORRUPT)) {
_abort_dma();
perf_count(_pc_crcerrs);
ret = -EIO;
break;
@@ -106,13 +106,7 @@ ArchPX4IOSerial::ArchPX4IOSerial() :
_current_packet(nullptr),
_rx_dma_status(_dma_status_inactive),
_completion_semaphore(SEM_INITIALIZER(0)),
#if 0
_pc_dmasetup(perf_alloc(PC_ELAPSED, "io_dmasetup ")),
_pc_dmaerrs(perf_alloc(PC_COUNT, "io_dmaerrs "))
#else
_pc_dmasetup(nullptr),
_pc_dmaerrs(nullptr)
#endif
_pc_dmaerrs(perf_alloc(PC_COUNT, MODULE_NAME": DMA errors"))
{
}
@@ -147,7 +141,6 @@ ArchPX4IOSerial::~ArchPX4IOSerial()
/* and kill our semaphores */
px4_sem_destroy(&_completion_semaphore);
perf_free(_pc_dmasetup);
perf_free(_pc_dmaerrs);
}
@@ -252,7 +245,6 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg)
if (count >= 5000) {
syslog(LOG_INFO, "==== test 1 : %u failures ====\n", fails);
perf_print_counter(_pc_txns);
perf_print_counter(_pc_dmasetup);
perf_print_counter(_pc_retries);
perf_print_counter(_pc_timeouts);
perf_print_counter(_pc_crcerrs);
@@ -294,7 +286,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
/* start RX DMA */
perf_begin(_pc_txns);
perf_begin(_pc_dmasetup);
/* DMA setup time ~3µs */
_rx_dma_status = _dma_status_waiting;
@@ -354,8 +345,6 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
//rCR1 &= ~USART_CR1_TE;
//rCR1 |= USART_CR1_TE;
perf_end(_pc_dmasetup);
/* compute the deadline for a 10ms timeout */
struct timespec abstime;
clock_gettime(CLOCK_REALTIME, &abstime);
@@ -375,8 +364,8 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
if (ret == OK) {
/* check for DMA errors */
if (_rx_dma_status & DMA_STATUS_TEIF) {
// stream transfer error, ensure TX DMA is also stopped before exiting early
stm32_dmastop(_tx_dma);
// stream transfer error, ensure all DMA is also stopped before exiting early
_abort_dma();
perf_count(_pc_dmaerrs);
ret = -EIO;
break;
@@ -387,6 +376,7 @@ ArchPX4IOSerial::_bus_exchange(IOPacket *_packet)
_current_packet->crc = 0;
if ((crc != crc_packet(_current_packet)) || (PKT_CODE(*_current_packet) == PKT_CODE_CORRUPT)) {
_abort_dma();
perf_count(_pc_crcerrs);
ret = -EIO;
break;
+2 -1
View File
@@ -6,7 +6,8 @@
# config for a quad
# modified from ../rpi/px4.config
param load
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
+2 -1
View File
@@ -6,7 +6,8 @@
# config for fixed wing (FW)
# modified from ./px4.config, switch att/pos_control & mixer
param load
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
+2 -4
View File
@@ -3,10 +3,8 @@
# (px4-alias.sh is expected to be in the PATH)
. px4-alias.sh
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
# system_power not implemented
param set CBRK_SUPPLY_CHK 894281
+2 -4
View File
@@ -3,10 +3,8 @@
# (px4-alias.sh is expected to be in the PATH)
. px4-alias.sh
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
# system_power not implemented
param set CBRK_SUPPLY_CHK 894281
+3 -4
View File
@@ -5,10 +5,9 @@
# navio config for a quad
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
param set SYS_AUTOSTART 4001
param set MAV_TYPE 2
+3 -4
View File
@@ -5,10 +5,9 @@
# navio config for FW
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
param set SYS_AUTOSTART 2100
param set MAV_TYPE 1
+3 -4
View File
@@ -7,10 +7,9 @@
# connect to it with jMAVSim:
# ./Tools/jmavsim_run.sh -q -i <IP> -p 14577 -r 250
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
param set SYS_AUTOSTART 1001
param set MAV_TYPE 2
+3 -4
View File
@@ -5,10 +5,9 @@
# navio config for simple testing
if [ -f eeprom/parameters ]
then
param load
fi
param select eeprom/parameters
param import
param set CBRK_SUPPLY_CHK 894281
param set SYS_AUTOSTART 4001
param set MAV_TYPE 2
+1 -1
View File
@@ -39,7 +39,7 @@
* @boolean
* @group Sensors
*/
PARAM_DEFINE_INT32(SENS_EN_BATT, 0);
PARAM_DEFINE_BOOL(SENS_EN_BATT, 0);
/**
* Capacity/current multiplier for high-current capable SMBUS battery
+9 -2
View File
@@ -30,13 +30,20 @@
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
set(PARAM_PREFIX PWM_MAIN)
if(CONFIG_BOARD_IO)
set(PARAM_PREFIX PWM_AUX)
endif()
px4_add_module(
MODULE drivers__camera_capture
MAIN camera_capture
COMPILE_FLAGS
-DPARAM_PREFIX="${PARAM_PREFIX}"
SRCS
camera_capture.cpp
DEPENDS
arch_io_pins
)
# vim: set noet ft=cmake fenc=utf-8 ff=unix :
)
+31 -17
View File
@@ -43,12 +43,6 @@
#include <board_config.h>
#ifdef BOARD_WITH_IO
# define PARAM_PREFIX "PWM_AUX"
#else
# define PARAM_PREFIX "PWM_MAIN"
#endif
#define commandParamToInt(n) static_cast<int>(n >= 0 ? n + 0.5f : n - 0.5f)
namespace camera_capture
@@ -76,13 +70,13 @@ CameraCapture::CameraCapture() :
// get the capture channel from function configuration params
param_t p_ctrl_alloc = param_find("SYS_CTRL_ALLOC");
int32_t ctrl_alloc = 0;
bool ctrl_alloc = false;
if (p_ctrl_alloc != PARAM_INVALID) {
param_get(p_ctrl_alloc, &ctrl_alloc);
}
if (ctrl_alloc == 1) {
if (ctrl_alloc) {
_capture_channel = -1;
for (unsigned i = 0; i < 16 && _capture_channel == -1; ++i) {
@@ -111,7 +105,7 @@ void
CameraCapture::capture_callback(uint32_t chan_index, hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow)
{
_trigger.chan_index = chan_index;
_trigger.edge_time = edge_time;
_trigger.hrt_edge_time = edge_time;
_trigger.edge_state = edge_state;
_trigger.overflow = overflow;
@@ -124,7 +118,7 @@ CameraCapture::gpio_interrupt_routine(int irq, void *context, void *arg)
CameraCapture *dev = static_cast<CameraCapture *>(arg);
dev->_trigger.chan_index = 0;
dev->_trigger.edge_time = hrt_absolute_time();
dev->_trigger.hrt_edge_time = hrt_absolute_time();
dev->_trigger.edge_state = 0;
dev->_trigger.overflow = 0;
@@ -150,19 +144,20 @@ CameraCapture::publish_trigger()
// MODES 1 and 2 are not fully tested
if (_camera_capture_mode == 0 || _gpio_capture) {
trigger.timestamp = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
trigger.timestamp = _trigger.hrt_edge_time - uint64_t(1000 * _strobe_delay);
trigger.seq = _capture_seq++;
_last_trig_time = trigger.timestamp;
publish = true;
} else if (_camera_capture_mode == 1) { // Get timestamp of mid-exposure (active high)
if (_trigger.edge_state == 1) {
_last_trig_begin_time = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
_last_trig_begin_time = _trigger.hrt_edge_time - uint64_t(1000 * _strobe_delay);
} else if (_trigger.edge_state == 0 && _last_trig_begin_time > 0) {
trigger.timestamp = _trigger.edge_time - ((_trigger.edge_time - _last_trig_begin_time) / 2);
trigger.timestamp = _trigger.hrt_edge_time - ((_trigger.hrt_edge_time - _last_trig_begin_time) / 2);
trigger.seq = _capture_seq++;
_last_exposure_time = _trigger.edge_time - _last_trig_begin_time;
_last_exposure_time = _trigger.hrt_edge_time - _last_trig_begin_time;
_last_trig_time = trigger.timestamp;
publish = true;
_capture_seq++;
@@ -170,12 +165,12 @@ CameraCapture::publish_trigger()
} else { // Get timestamp of mid-exposure (active low)
if (_trigger.edge_state == 0) {
_last_trig_begin_time = _trigger.edge_time - uint64_t(1000 * _strobe_delay);
_last_trig_begin_time = _trigger.hrt_edge_time - uint64_t(1000 * _strobe_delay);
} else if (_trigger.edge_state == 1 && _last_trig_begin_time > 0) {
trigger.timestamp = _trigger.edge_time - ((_trigger.edge_time - _last_trig_begin_time) / 2);
trigger.timestamp = _trigger.hrt_edge_time - ((_trigger.hrt_edge_time - _last_trig_begin_time) / 2);
trigger.seq = _capture_seq++;
_last_exposure_time = _trigger.edge_time - _last_trig_begin_time;
_last_exposure_time = _trigger.hrt_edge_time - _last_trig_begin_time;
_last_trig_time = trigger.timestamp;
publish = true;
}
@@ -189,6 +184,25 @@ CameraCapture::publish_trigger()
return;
}
pps_capture_s pps_capture;
if (_pps_capture_sub.update(&pps_capture)) {
_pps_hrt_timestamp = pps_capture.timestamp;
_pps_rtc_timestamp = pps_capture.rtc_timestamp;
}
if (_pps_hrt_timestamp > 0) {
// Last PPS RTC time + elapsed time to the camera capture interrupt
trigger.timestamp_utc = _pps_rtc_timestamp + (trigger.timestamp - _pps_hrt_timestamp);
} else {
// No PPS capture received, use RTC clock as fallback
timespec tv{};
px4_clock_gettime(CLOCK_REALTIME, &tv);
trigger.timestamp_utc = ts_to_abstime(&tv) - hrt_elapsed_time(&trigger.timestamp);
}
_trigger_pub.publish(trigger);
}
@@ -51,6 +51,7 @@
#include <uORB/Publication.hpp>
#include <uORB/Subscription.hpp>
#include <uORB/topics/camera_trigger.h>
#include <uORB/topics/pps_capture.h>
#include <uORB/topics/vehicle_command.h>
#include <uORB/topics/vehicle_command_ack.h>
@@ -103,11 +104,12 @@ private:
// Subscribers
uORB::Subscription _command_sub{ORB_ID(vehicle_command)};
uORB::Subscription _pps_capture_sub{ORB_ID(pps_capture)};
// Trigger Buffer
struct _trig_s {
uint32_t chan_index;
hrt_abstime edge_time;
hrt_abstime hrt_edge_time;
uint32_t edge_state;
uint32_t overflow;
} _trigger{};
@@ -130,6 +132,9 @@ private:
hrt_abstime _last_trig_time{0};
uint32_t _capture_overflows{0};
hrt_abstime _pps_hrt_timestamp{0};
uint64_t _pps_rtc_timestamp{0};
// Signal capture callback
void capture_callback(uint32_t chan_index, hrt_abstime edge_time, uint32_t edge_state, uint32_t overflow);
@@ -59,7 +59,7 @@ PARAM_DEFINE_FLOAT(CAM_CAP_DELAY, 0.0f);
* @group Camera Control
* @reboot_required true
*/
PARAM_DEFINE_INT32(CAM_CAP_FBACK, 0);
PARAM_DEFINE_BOOL(CAM_CAP_FBACK, 0);
/**
* Camera capture timestamping mode
@@ -84,4 +84,4 @@ PARAM_DEFINE_INT32(CAM_CAP_MODE, 0);
* @group Camera Control
* @reboot_required true
*/
PARAM_DEFINE_INT32(CAM_CAP_EDGE, 0);
PARAM_DEFINE_INT32(CAM_CAP_EDGE, 0);
@@ -30,10 +30,18 @@
# POSSIBILITY OF SUCH DAMAGE.
#
############################################################################
set(PARAM_PREFIX PWM_MAIN)
if(CONFIG_BOARD_IO)
set(PARAM_PREFIX PWM_AUX)
endif()
px4_add_module(
MODULE drivers__camera_trigger
MAIN camera_trigger
COMPILE_FLAGS
-DPARAM_PREFIX="${PARAM_PREFIX}"
SRCS
camera_trigger.cpp
interfaces/src/camera_interface.cpp
+23 -19
View File
@@ -59,6 +59,7 @@
#include <uORB/Publication.hpp>
#include <uORB/Subscription.hpp>
#include <uORB/topics/camera_trigger.h>
#include <uORB/topics/pps_capture.h>
#include <uORB/topics/vehicle_command.h>
#include <uORB/topics/vehicle_command_ack.h>
#include <uORB/topics/vehicle_local_position.h>
@@ -173,6 +174,8 @@ private:
bool _turning_on{false};
matrix::Vector2f _last_shoot_position{0.f, 0.f};
bool _valid_position{false};
hrt_abstime _pps_hrt_timestamp{0};
uint64_t _pps_rtc_timestamp{0};
//Camera Auto Mount Pivoting Oblique Survey (CAMPOS)
uint32_t _CAMPOS_num_poses{0};
@@ -186,6 +189,7 @@ private:
uORB::Subscription _command_sub{ORB_ID(vehicle_command)};
uORB::Subscription _lpos_sub{ORB_ID(vehicle_local_position)};
uORB::Subscription _pps_capture_sub{ORB_ID(pps_capture)};
orb_advert_t _trigger_pub{nullptr};
@@ -197,10 +201,8 @@ private:
param_t _p_min_interval;
param_t _p_distance;
param_t _p_interface;
param_t _p_cam_cap_fback;
trigger_mode_t _trigger_mode{TRIGGER_MODE_NONE};
int32_t _cam_cap_fback{0};
camera_interface_mode_t _camera_interface_mode{CAMERA_INTERFACE_MODE_GPIO};
CameraInterface *_camera_interface{nullptr}; ///< instance of camera interface
@@ -263,7 +265,6 @@ CameraTrigger::CameraTrigger() :
_p_activation_time = param_find("TRIG_ACT_TIME");
_p_mode = param_find("TRIG_MODE");
_p_interface = param_find("TRIG_INTERFACE");
_p_cam_cap_fback = param_find("CAM_CAP_FBACK");
param_get(_p_activation_time, &_activation_time);
param_get(_p_interval, &_interval);
@@ -272,10 +273,6 @@ CameraTrigger::CameraTrigger() :
param_get(_p_mode, (int32_t *)&_trigger_mode);
param_get(_p_interface, (int32_t *)&_camera_interface_mode);
if (_p_cam_cap_fback != PARAM_INVALID) {
param_get(_p_cam_cap_fback, (int32_t *)&_cam_cap_fback);
}
switch (_camera_interface_mode) {
#ifdef __PX4_NUTTX
@@ -317,10 +314,7 @@ CameraTrigger::CameraTrigger() :
// Advertise critical publishers here, because we cannot advertise in interrupt context
camera_trigger_s trigger{};
if (!_cam_cap_fback) {
_trigger_pub = orb_advertise(ORB_ID(camera_trigger), &trigger);
}
_trigger_pub = orb_advertise_queue(ORB_ID(camera_trigger), &trigger, camera_trigger_s::ORB_QUEUE_LENGTH);
}
CameraTrigger::~CameraTrigger()
@@ -832,23 +826,33 @@ CameraTrigger::engage(void *arg)
return;
}
pps_capture_s pps_capture;
if (trig->_pps_capture_sub.update(&pps_capture)) {
trig->_pps_hrt_timestamp = pps_capture.timestamp;
trig->_pps_rtc_timestamp = pps_capture.rtc_timestamp;
}
// Send camera trigger message. This messages indicates that we sent
// the camera trigger request. Does not guarantee capture.
camera_trigger_s trigger{};
timespec tv{};
px4_clock_gettime(CLOCK_REALTIME, &tv);
trigger.timestamp_utc = (uint64_t) tv.tv_sec * 1000000 + tv.tv_nsec / 1000;
if (trig->_pps_hrt_timestamp > 0) {
// Current RTC time (RTC time captured by the PPS module + elapsed time since capture)
trigger.timestamp_utc = trig->_pps_rtc_timestamp + hrt_elapsed_time(&trig->_pps_hrt_timestamp);
} else {
// No PPS capture received, use RTC clock as fallback
timespec tv{};
px4_clock_gettime(CLOCK_REALTIME, &tv);
trigger.timestamp_utc = ts_to_abstime(&tv);
}
trigger.seq = trig->_trigger_seq;
trigger.feedback = false;
trigger.timestamp = hrt_absolute_time();
// Publish only if _cam_cap_fback is disabled, otherwise, it is published over camera_capture driver
if (!trig->_cam_cap_fback) {
orb_publish(ORB_ID(camera_trigger), trig->_trigger_pub, &trigger);
}
orb_publish(ORB_ID(camera_trigger), trig->_trigger_pub, &trigger);
// increment frame count
trig->_trigger_seq++;
@@ -35,12 +35,6 @@
#include <px4_platform_common/log.h>
#include <board_config.h>
#ifdef BOARD_WITH_IO
# define PARAM_PREFIX "PWM_AUX"
#else
# define PARAM_PREFIX "PWM_MAIN"
#endif
void CameraInterface::get_pins()
{
// Set all pins as invalid
@@ -49,14 +43,13 @@ void CameraInterface::get_pins()
}
param_t p_ctrl_alloc = param_find("SYS_CTRL_ALLOC");
int32_t ctrl_alloc = 0;
bool ctrl_alloc = false;
if (p_ctrl_alloc != PARAM_INVALID) {
param_get(p_ctrl_alloc, &ctrl_alloc);
}
if (ctrl_alloc == 1) {
if (ctrl_alloc) {
unsigned pin_index = 0;
for (unsigned i = 0; i < 16 && pin_index < arraySize(_pins); ++i) {
@@ -38,4 +38,4 @@
* @group Sensors
* @boolean
*/
PARAM_DEFINE_INT32(SENS_EN_ETSASPD, 0);
PARAM_DEFINE_BOOL(SENS_EN_ETSASPD, 0);
@@ -38,4 +38,4 @@
* @group Sensors
* @boolean
*/
PARAM_DEFINE_INT32(SENS_EN_MS4525, 0);
PARAM_DEFINE_BOOL(SENS_EN_MS4525, 0);

Some files were not shown because too many files have changed in this diff Show More