Compare commits

...

147 Commits

Author SHA1 Message Date
Daniel Agar 890ae36e78 airspeed_selector: new ASPD_SEL_EN to control enabling/disabling module 2023-07-06 11:46:44 -04:00
Antonio Sanjurjo C c1cb48c2ea EKF2 cleanup. Use MAX_NUM_x constants instead of hard-coded numbers
Signed-off-by: Antonio Sanjurjo C <74329840+antonio-sc66@users.noreply.github.com>
2023-07-06 09:36:27 +02:00
Patrick José Pereira 39e04d9712 lib: matrix: SquareMatrix: Deal with the special case of M=1
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-07-06 08:24:33 +02:00
Patrick José Pereira 724f5a97a9 platform: posix: px4: Add missing ctsdint include for uint8_t
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-07-06 08:24:33 +02:00
Julian Oes a6502c9f2b ROMFS: auto try RGBLED is31fl3195
This is required to auto-start the is31fl3195 driver if connected.

Signed-off-by: Julian Oes <julian@oes.ch>
2023-07-05 20:49:39 +12:00
Thomas Stastny dccfcb85c1 (Mission) FeasibilityChecker: remove duplicate line 2023-07-04 11:17:23 +02:00
Silvan Fuhrer a617e9c54b Navigator RTL: run find_RTL_destination() only on_inactive
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-07-04 09:36:22 +02:00
Silvan Fuhrer f275085e84 Navigator: Loiter: always establish new Loiter with center at current pos
When switching into Hold mode establish a Loiter around current position,
even if we were before already loitering (eg in Mission mode).

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-07-04 09:35:40 +02:00
Mathieu Bresciani 288e3ae74a EKF2: vision attitude error filter (#21791)
* ekf2-ev: filter q_error for frame correction
* ekf2: filter EV attitude error centrally
2023-07-03 11:13:59 -04:00
Andrew Brahim 24665f10f2 VL53L1X: fix scheduling (#21787)
* should be 50 Hz instead of 50,000 Hz

Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
2023-07-03 10:49:53 -04:00
Matthias Grob a36c922fc0 ActuatorEffectivenessHelicopterTest: adapt to new constructor 2023-07-03 16:21:27 +02:00
Beat Küng 77d6c722a7 helicopter: add tail servo support
as a separate CA_AIRFRAME, as the UI cannot switch between servo/motor.
2023-07-03 16:21:27 +02:00
Beat Küng bae413a332 v6x: start mavlink on TELEM2 for skynode
Equivalent to v5x
2023-07-03 16:20:41 +02:00
Igor Mišić abe0ca1307 boards/holybro/kakutef7: enable gps, osd, top, dmesg. Disable uxrce_dds 2023-07-03 11:22:33 +02:00
Igor Mišić f5193bb155 boards/holybro/kakutef7: enable rc serial singlewire 2023-07-03 11:22:33 +02:00
Igor Mišić 2307d4aa22 boards/holybro/kakutef7: remove px4_platform_config
kakutef7 doesn't use manifest
2023-07-03 11:22:33 +02:00
Harrison Gieraltowski 018ec97c41 mavlink_log_handler: handle _next_entry (#21784) 2023-07-03 10:30:07 +02:00
Igor Mišić bfa72a1bee rc.board_arch_defaults: add the silent flag for EKF2_MULTI_IMU 2023-07-03 10:08:26 +02:00
Matthias Grob b7e2a9c320 FlightTaskAltitude: remove duplicate, deprecated yaw stick handling 2023-07-03 09:52:47 +02:00
Matthias Grob 4d465533b5 FlightTaskManualAcceleration: remove duplicate yaw stick handling
It's already instanciated and ran by FlightTaskManualAltitude
which FlightTaskManualAcceleration inherits from.
2023-07-03 09:52:47 +02:00
Matthias Grob 03183ccacf mc_pos_control_params: remove forgotten trailing zeroes 2023-07-03 09:52:47 +02:00
Junwoo Hwang 0196241c10 stale action: Configure again (#21785)
Having newline between I think didn't apply the PR stale days setting of
30 properly (it was using 45)

And it seemd that unless I set the days-before-close to -1
intentionally, it would still close the Issue/PRs, as the default value
is 7 already.

Also updated version of the stale action to v8
2023-06-30 19:12:16 +02:00
Junwoo Hwang 3557644010 Stale action re-configure (still just debug mode) (#21783)
* Remove old stale bot yaml file

* Remove slack svg file (unused)

* Stale action: Only apply stale label, and no other actions

Respecting the opinion on
https://github.com/PX4/PX4-Autopilot/commit/fa9ac6ecf651232f3105ca124a2d2c54ab8620d0,
it seems reasonable to disable commenting feature, and just keep the
action only applying the `stale` label. This will reduce the noise /
email spams / ping pong fight with the stale bot (Action)
2023-06-30 17:18:43 +02:00
Junwoo Hwang 46b09acf0b Update Issue templates (#21779)
- Remove unnecessary text rendering, which made clicking log links
  harder
- Re adjust markdown elements to make it easier to read / intuitive when
  creating an issue
2023-06-30 16:45:05 +02:00
Silvan Fuhrer 4348dcce2a Navigator: loiter: remove unnecessary _loiter_pos_set (#21776)
* Navigator: loiter: remove unnecessary _loiter_pos_set

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

* Navigator: loiter: remove commented line

---------

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
Co-authored-by: Matthias Grob <maetugr@gmail.com>
2023-06-30 15:40:20 +02:00
Matthias Grob a6d2c2cf5e Github Actions: add workaround for dubious ownership errors
until I figure out what a better solution
would look like.
See
https://github.com/actions/runner/issues/2033
2023-06-27 17:17:31 +02:00
Matthias Grob e5503480e3 GitHub Actions: use Debian 11 to build linux targets
This solves the CI problem related to the required cmake version
described here:
https://github.com/PX4/PX4-Autopilot/pull/21737#pullrequestreview-1489844308

See https://github.com/PX4/PX4-containers/pull/332
for the container changes.
2023-06-27 17:17:31 +02:00
Peter van der Perk e739afe362 MR-CANHUBK3 ADAP board support, add ADC support 2023-06-27 07:24:07 -04:00
Silvan Fuhrer e34993969b tiltrotor: expose tilting duration of backtransition in param
Instead of hard-coding the tilting duration (from FW to MC tilt),
expose it as a parameter (VT_BT_TILT_DUR). The default is the same
as the hard-coded value previously (1s).
Slower tilting mechanisms need a higher value here, while for smaller
ones a too high value results in unnecessary delays till the motors
are in hover configuration.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-27 10:11:41 +02:00
Silvan Fuhrer 05489f9ecf tiltrotor: reduce BACKTRANS_THROTTLE_UPRAMP_DUR_S to 0.5s
This reduces the motor ramp up time after a transitions is declared over.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-27 10:11:41 +02:00
Silvan Fuhrer c26b699f8a tiltrotor: reduce BACKTRANS_THROTTLE_DOWNRAMP_DUR_S from 1 to 0.5s
This affects how soon after a backtransition the vehicle has the
full hover controller running again. Specifically it reduces the
duration of the ramp down of the motors prior to tilting them.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-27 10:11:41 +02:00
Ramon Roche 98d8935034 drivers/barometer/invensense/icp201xx: increase delay after configuration (#21765)
- fixes wrong altitude reporting
2023-06-26 14:16:06 -04:00
bresch 8d1b0e45fa opt-requirements: bump SymForce version 2023-06-26 14:10:54 -04:00
bresch eb70c9f6f3 ekf2: update auto-generated code to SymForce 0.9.0 2023-06-26 14:10:54 -04:00
bresch fdf7867a3e ekf2: update derivation to SymForce 0.9.0 2023-06-26 14:10:54 -04:00
bresch c99f56f010 wind_estimator: update generated code to Symforce 0.9.0 2023-06-26 14:10:54 -04:00
bresch 73e5ff109c wind_estimator: update derivation to use SymForce 0.9.0 2023-06-26 14:10:54 -04:00
Matthias Grob 7e79d65aa4 mc_pos_control_params: clarify maximum vertical velocity parameters 2023-06-26 17:01:20 +02:00
Matthias Grob 439670444f mc_pos_control_params: more gain & velocity decimals, more clear wording 2023-06-26 17:01:20 +02:00
Matthias Grob a6a913bf25 mc_pos_control: remove trailing zeroes 2023-06-26 17:01:20 +02:00
Matthias Grob 54a351639c mc_pos_control: improve parameter metadata
- Adapted descriptions to be more clear
- Adjusted some limits and decimals
2023-06-26 17:01:20 +02:00
Matthias Grob d00ad1b815 mc_pos_control: separate parameter metadata into multiple files
because the original file was almost 1k lines and
the order of parameters more historical than after topic.
2023-06-26 17:01:20 +02:00
Matthias Grob 20d0661e87 HealthAndArmingChecks: disallow arming via parameter
COM_ARMABLE is set to "Disabled" will prevent arming.
 This allows to set the parameter when ground demoing a drone or
 if it's in maintenance for safety reasons.
2023-06-22 13:17:47 +02:00
Matthias Grob 173407581b HealthAndArmingChecks: reorder CMakeLists alphabetically 2023-06-22 13:17:47 +02:00
Sean Murphy 7ed90c6d0c ekf2: process_logdata_ekf.py fix reject_mag* and imu_coning* key errors 2023-06-21 21:08:43 -04:00
Josh Henderson a07d10704b ROMFS : POSIX Airframes reserve space for custom models 2023-06-21 21:06:07 -04:00
Matthias Grob 18d89e4bc1 lightware_lase_serial: fix pointer for enabling serial mode
const char *data = "www\r\n";
Defines a cstring of 6 bytes: 'w', 'w', 'w', '\r', '\n', '\0'

type of data: char const*
type of &data: char const**

So when we call
write(_fd, &data, strlen(data));
then strlen(data) == 5
and we send the 4 byte memory address of data
+ some additional random byte.

Correct is
write(_fd, data, strlen(data));
where char const* gets casted to const void * and we pass
the pointer to the content of data.

The fundamental problem here is write() not being typesafe.
2023-06-21 15:59:12 +02:00
Thomas Debrunner fd267fb9a5 param save: Add a blocking API for param saves to be used from shell. 2023-06-21 08:19:52 +02:00
Silvan Fuhrer 18f0311161 Navigator: Mission: improve survey mission resume
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-20 14:38:03 +02:00
Silvan Fuhrer 24b1ef93b2 Mission: reset mission on landing only if last item was reached
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-20 14:38:03 +02:00
Silvan Fuhrer c6870006c7 Navigator: move disable camera trigger on mission inactivation to seperate function
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-20 14:38:03 +02:00
Daniel Agar d9ae2ed7ac ekf2: regenerate yaw estimator symforce
- remove underscore uppercase variable naming that can be problematic
2023-06-19 21:00:25 -04:00
Silvan Fuhrer 2a48c1cb18 boards: disable gyro fft module for v4 to safe flash
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-19 16:22:42 -04:00
Beat Küng 65ad6afb08 Micro-XRCE-DDS-Client: update submodule
Go get https://github.com/eProsima/Micro-XRCE-DDS-Client/pull/359.
2023-06-19 16:05:36 -04:00
Silvan Fuhrer 4632fbd600 FWRateController: use param find for VT_DIFTHR_EN as pure FW build doesn't have VTOL module built
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-19 10:59:20 +02:00
Matthias Grob 69aebe650b FixedwingRateControl: rework VTOL differential thrust saturation
Co-authored-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-19 10:59:20 +02:00
Matthias Grob 53b9e66c66 RateControl: allow setting individual saturation flags
This helps for more complicated cases where certain axes are controlled
through and get feedback from a different allocator.
2023-06-19 10:59:20 +02:00
Beniamino Pozzan 957a06a780 Fix enum for COM_RC_IN_MODE in failsafe
add enum RcInMode

Signed-off-by: Beniamino Pozzan <beniamino.pozzan@phd.unipd.it>
2023-06-19 08:04:43 +02:00
Niklas Hauser 8fe65c6722 Driver: Refactor MCP23009 GPIO expander into uORB driver 2023-06-19 07:58:21 +02:00
Konrad 3303323971 mavlink stream: Heartbeat system status should neglect the actuator_armed.lockdown flag in HIL, since this is always enabled for HIL. 2023-06-16 14:21:32 +02:00
Matthias Grob 053d3020b0 esc_calibration: handle timeout wraps better
Co-authored-by: Beat Küng <beat-kueng@gmx.net>
2023-06-16 12:05:47 +02:00
Matthias Grob cfb24869e9 esc_calibration: allow to calibrate ESCs without battery detection
Before this the ESC calibration aborts if battery detection doesn't work.
The problem is if the user still connects the battery as he gets instructed
and the calibration aborts then the ESCs are in calibration mode and
after abortion calibrate to the wrong value.

Also I realized there's no additional safety by aborting the calibration
if the battery cannot be detected during the timeout because a pixhawk
board without power module will report a battery status from the
ADC driverand in it that no battery is connected which is the best
it can do. In this situation the motors will still spin if the
ESCs are powered.
2023-06-16 12:05:47 +02:00
Matthias Grob 4396b6e9f6 esc_calibration: adjust timing to work with all tested ESCs
Some ESCs e.g. Gaui enter the menu relatively quickly if the
signal is high for too long. To solve that it's kept high shorter.
Also all tested ESCs detect the low signal within a shorter time
so no need to wait longer.
2023-06-16 12:05:47 +02:00
Matthias Grob 6929493134 esc_calibration: Improve readability and robustness
- Change timings for a more reliable calibration.
- Make sure there's an error message when battery measurement is not
available also when it gets disabled after system boot in the power
just above the calibration button.
- Safety check if measured electrical current goes up after issuing the
high calibration value for the case the user did not unplug power
and the detection either fails or is not enforced.
2023-06-16 12:05:47 +02:00
Matthias Grob a28ad8e845 mixer_module: consistent PWM/oneshot calibration range 2023-06-16 12:05:47 +02:00
Matthias Grob 1ceca8f2cf actuator_test: condition order refactoring 2023-06-16 12:05:47 +02:00
Matthias Grob ffe0ec27e6 Unify MixingOutput constructor calls
to make them easy to search for and check the arguments.
2023-06-16 12:05:47 +02:00
Silvan Fuhrer fc357921fd navigator: send commands to anyone listening
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-12 09:41:28 +02:00
Junwoo Hwang 9b95330efc Github Issue: Replace Bug report to YAML 2023-06-09 21:18:28 -04:00
Junwoo Hwang 6b1f805b15 Issue Template: Move Feature request to YAML 2023-06-09 21:18:28 -04:00
Junwoo Hwang 89e8ba0b53 Issue Template: Switch to YAML for direct links 2023-06-09 21:18:28 -04:00
PX4 BuildBot bbc6ed43bd Update submodule sitl_gazebo-classic to latest Sat Jun 10 00:39:02 UTC 2023
- sitl_gazebo-classic in PX4/Firmware (f9510557a6): https://github.com/PX4/PX4-SITL_gazebo-classic/commit/2e3ed9bfb04d8865e59380afa575dd37b0d6c8e0
    - sitl_gazebo-classic current upstream: https://github.com/PX4/PX4-SITL_gazebo-classic/commit/0d53638452e6da4371c12599e1a649608361811e
    - Changes: https://github.com/PX4/PX4-SITL_gazebo-classic/compare/2e3ed9bfb04d8865e59380afa575dd37b0d6c8e0...0d53638452e6da4371c12599e1a649608361811e

    0d53638 2023-05-23 JaeyoungLim - Fix force visualization feature (#985)
9bfecb6 2023-05-22 JaeyoungLim - Fix readme displayed in github (#984)
2023-06-09 21:17:46 -04:00
alexklimaj 51a4eafe0c ARKV6X sync with FMUV6X 2023-06-09 21:17:12 -04:00
Matthias Grob 94d2140a4f mixer_module: remove unnecessary init state
That state only delayed the first arming by 50 miliseconds.
Was presumably a workaround for some issue very very early on.
See cc452834c0
2023-06-09 21:15:08 -04:00
Matthias Grob 0f256718d3 mixer_module: correct pwm ramp
Before:
When the mixed throttle for the motor was exactly zero the ramp went
from the disarmed PWM value to the minimum PWM value.

When the throttle was even just slightly different from zero the ramp
made a jump up to the commanded throttle scaled between
disarmed PWM and maximum PWM, then ramped between
disarmed PWM and minimum PWM and at the end jumped up again to
the commanded throttle scaled between minimum PWM and maximum PWM.

After:
The ramp goes from disarmed PWM value to the the
commanded throttle scaled between minimum PWM and maximum PWM.
If the commanded throttle changes during the ramp then the scale and
hence also end value of the ramp changes.
2023-06-09 21:15:08 -04:00
Mathieu Bresciani 24de623989 EKF2: Zero gyro update (#21691)
When at rest, directly fuse the gyro data as an observation of its bias.
This allows to strongly observe the gyro biases without having to fuse a
constant heading that makes the ekf too confident about its heading.
2023-06-09 21:13:18 -04:00
Beat Küng c95539e8ce boards: increase init stack size by 150B
External airframes need a bit more stack due to nested configs.
2023-06-09 21:11:11 -04:00
Beat Küng 7230a6dd8e commander: add option to exclude mag to param SYS_FAC_CAL_MODE 2023-06-09 21:05:40 -04:00
bresch 8b67fa91a1 factory cal: exclude _PRIO params 2023-06-09 21:05:40 -04:00
alessandro f9510557a6 always trigger all cameras 2023-06-09 13:17:45 +02:00
Morten Fyhn Amundsen 135f02679a ekf2: Fix description of EKF2_HDG_GATE 2023-06-09 11:52:55 +02:00
alexklimaj c3db4f57df Subscribe to all intances of gps_inject_data and mirror uavcan rtcm pub mirror gps driver 2023-06-09 14:51:28 +12:00
alexklimaj 5b8ae69f47 uavcan rtcm set max num injections 2023-06-09 14:51:28 +12:00
alexklimaj acd19a0520 Ublox add UBX-RXM-RTCM for RTCM input status 2023-06-09 14:51:28 +12:00
Beat Küng f119cca3b3 logger: restart on file write error
This can also happen if the maximum file size is reached.
2023-06-08 09:52:49 +02:00
Hamish Willee ea61d74c17 ADS1115: update docs (#21638) 2023-06-08 08:55:31 +02:00
mcsauder 1707805ed2 Remove the simulator SIH module from fmu-v5x test build and the fixedwing autotune module from the fmu-v5 test build to meet flash constraints. 2023-06-07 12:07:29 -04:00
mcsauder af44da25f0 Use accel of the same instance or primary baro for gyro instances that do not have valid temperature readings in temperature calibration data, use primary baro for magnetometers without valid temperature. 2023-06-07 12:07:29 -04:00
mcsauder b8ad9bdbe5 Add magnetometer thermal compensation. 2023-06-07 12:07:29 -04:00
oneWayOut 6ee2d796ea delete unused ECL_LIB_GIT_VERSION
Since 'ecl' is nomore a git submodule, code lines related to
'ECL_LIB_GIT_VERSION' could be deleted
2023-06-06 11:24:49 -04:00
Matthias Grob f4de43a10b PULL_REQUEST_TEMPLATE: fix typo 2023-06-06 17:22:33 +02:00
Matthias Grob b625e43566 rc_update: throttle trim centering fix for reverse channel
The entire logic did not work for the case when the throttle channel is
reversed because then QGC sets trim = max for that channel and
the result is only half the throttle range.
2023-06-06 17:22:33 +02:00
Julian Oes cd485b3a13 lights: Add LP5562 RGBLED driver
This adds support for the TI LP5562 RGB LED driver.

Things to note:
- The driver is initialized in simple PWM mode using its internal clock,
  for R,G,B, but not for W(hite).
- The chip doesn't have a WHO_AM_I or DEVICE_ID register to check.
  Instead we read the W_CURRENT register that we're generally not using
  and therefore doesn't get changed.
- The current is left at the default 17.5 mA but could be changed using
  the command line argument.

Datasheet:
https://www.ti.com/lit/ds/symlink/lp5562.pdf

Signed-off-by: Julian Oes <julian@oes.ch>
2023-06-06 13:12:44 +12:00
Eric Katzfey c468266b27 boards: Update modalai fcv2 board support (#21653)
* Removed obsolete voxl2-io directory
* Updated support for ModalAI FC v2 board
* Added UAVCAN back in and removed local position estimator and attitude estimator Q that are no longer supported.
* Removed unneeded IMU drivers
2023-06-05 12:42:46 -04:00
bresch 5233b33242 update change indicator 2023-06-05 11:58:42 -04:00
bresch 403a6310c4 gnss yaw: compare auto-generated Jacobian against autodiff 2023-06-05 11:58:42 -04:00
bresch c6b259d5f6 yaw_fusion: compare auto-generated Jacobian against autodiff 2023-06-05 11:58:42 -04:00
bresch d4528dc53a sideslip: compare auto-generated Jacobian against autodiff 2023-06-05 11:58:42 -04:00
bresch e7c4a22be8 mag_3d: compare auto-generated Jacobian against autodiff 2023-06-05 11:58:42 -04:00
bresch c6f1a63659 opt_flow: compare auto-generated Jacobian against autodiff 2023-06-05 11:58:42 -04:00
bresch d03f242c04 DCM: use simplified conversion from unit quaternion
This is exactly equivalent for a unit quaternion (and only unit
quaternions should be used to encode a rotation)
2023-06-05 11:58:42 -04:00
bresch 9d7abf2552 ekf2: symforce - use builtin Rot3 and Quaternion operations 2023-06-05 11:58:42 -04:00
Julian Oes ea8b985a2f netman: fix line too long
Signed-off-by: Julian Oes <julian@oes.ch>
2023-06-05 12:01:07 +12:00
Ramon Roche 2f448e9d9f netman: update module description (#21664)
Co-authored-by: David Sidrane <David.Sidrane@Nscdg.com>
Co-authored-by: Hamish Willee <hamishwillee@gmail.com>
2023-06-02 09:33:18 -07:00
Giacomo Bertelli 99f6d4190c Update sitl_multiple_run.sh (#21538)
Edited line to account for the fact that the file has been moved one level deeper in the folder tree (the same edit should be made in the documentation https://docs.px4.io/main/en/simulation/multi_vehicle_jmavsim.html)
2023-06-02 10:28:49 +02:00
Silvan Fuhrer a52c0fd9f5 FW TECS: reduce default for FW_T_I_GAIN_THR to more appropriate 0.05
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer 1c7320b9e3 VTOL: params: add missing @decimal and @increment
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer ac811450e5 Tiltrotor params: set default for VT_TILT_TRANS to 0.4
0.4 tilt is more reasobale to get nice transitions than
the previous 0.3.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer 8f64c79b4c FWAttitudeController: params: increases parameter ranges
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer 459f9c5331 Commander: open up limits on TRIM_ROLL/PITCH/YAW to +/- 50%
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer ad778b37f5 FWRateController: fix @group, all should be in FW Rate Control group
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer f41ad10275 FW Rate Controller: relax param ranges
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:23:46 +02:00
Silvan Fuhrer a1167d6c98 Navigator: make sure to reset mission.item fields touched by set_vtol_transition_item (#21641)
set_vtol_transition_item sets the params of the mission item directly
to values that make sense for NAV_CMD_DO_VTOL_TRANSITION, but don't
for other NAV_CMDs. So make sure that whenever we use it, we then in
the next step reset the touched mission_item fields.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-06-02 10:21:23 +02:00
Niklas Hauser ebe152fc22 fmu-v6x: Increase Mavlink UART buffers
Our serial_test showed only ~84kB/s with the default 256 RX buffer size
with significant ~2.5ms periods of the flow control RTS pin being
asserted. Increasing size to 600 (same as FMU-v5x) brings the throughput
only to ~190kB/s, while a size of >1500 achieves ~350kB/s. Larger RX
buffers do not increase throughput anymore, while the theoretical
maximum is 375kB/s.

Transmit buffer size is increased to 10kB same as on FMUv5x to prevent
any future differences in queue behavior and throughput. serial_test
showed ~350kB/s throughput at 3kB TX buffer size, so this is just a
precaution.
2023-06-01 07:55:21 +02:00
Eric Katzfey d2011e99b2 commander: add Open Drone ID arming check (#21652) 2023-06-01 07:52:52 +02:00
Silvan Fuhrer 4b5e14aeec Navigator: MissionFeasibilityCheck: check if items fit to the current vehicle type (#21602)
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-31 19:27:27 +02:00
Roman Bapst d6413a6a90 Refactor uncommanded descend Quad-Chute (#21598)
* refactored uncommanded descend quadchute
- use fixed altitude error threshold
- compute error relative to higest altitude the vehicle has achieved
since it has flown below the altitude reference (setpoint)

* disabled altitude loss quadchute by default

* altitude loss quadchute: added protection against invalid local z


---------

Signed-off-by: RomanBapst <bapstroman@gmail.com>
2023-05-31 17:57:50 +02:00
henrykotze fab58ee2bc cannode prearm by default enable on ArmingStatus
- ArmingStatus DroneCAN message STATUS field is only set to true based on
arming_status.armed

- Cannode prearm state is set to true always when ArmingStatus DroneCan
message is received
2023-05-31 11:20:31 -04:00
Beat Küng db18a94382 refactor param: reduce flash usage
Reduces usage by ~1.5KB
2023-05-31 07:45:20 +02:00
Beat Küng 1bfca24fa9 refactor param: move autosave to px4::wq_configurations::lp_default work queue
Changes initialization order as param_init now depends on wq manager
2023-05-31 07:45:20 +02:00
Beat Küng e65a0a01d6 fix WorkQueueManager: wait until running to prevent race conditions 2023-05-31 07:45:20 +02:00
Thomas Debrunner f0dd9fa445 param: Add contained-params-bitset export interface to the param layers
Allows for efficient looping over the contained data
2023-05-31 07:45:20 +02:00
Thomas Debrunner bc872822bc params: Overhaul param system to use a layered approach without locking
- Instead we disable interrups on Nuttx where needed
- No lock is held during param export. Params can be changed
  concurrently and we rely on the fact that another export will be
  triggered in that case.
2023-05-31 07:45:20 +02:00
alexklimaj 70178b66d8 Cannode add OSD drivers 2023-05-29 14:07:38 +02:00
Silvan Fuhrer f0b476bcba ROMFS: set default for VT_B_TRANS_DUR for all tailsitter configs to 5s
5s is a more reasobale time for tailsitters, which rely differently on this param
than other VTOL types. Tailsitters will ramp the pitch up withing this time,
while for other VTOLS types its only the max transitiont time.

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-29 12:25:20 +02:00
Silvan Fuhrer ee19ec4670 ROMFS: tailsitter SITL config: improve tuning after model changes
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-29 12:25:20 +02:00
Silvan Fuhrer f96073f442 ROMFS: quadtailsitter SITL config: improve tuning
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-29 12:25:20 +02:00
Julian Oes 6977fd9956 ROMFS: initial quadtailsitter tuning
This is now using the advanced lift drag plugin.

The important step was to enable airmode for yaw, otherwise yaw gets
saturated at low throttle and we can barely roll.

The other trick was to raise airspeed a little bit to avoid operating
too much at the lower end of throttle where control authority is low.

Signed-off-by: Julian Oes <julian@oes.ch>
2023-05-29 12:25:20 +02:00
JaeyoungLim e3aea937c3 Support quadtailsitter in SITL 2023-05-29 12:25:20 +02:00
Daniel Agar 6535cc758e ekf2: fuse mag update last heading fuse time if updating all states
- handle synthetic z special case
2023-05-26 08:48:08 -06:00
Silvan Fuhrer bd182ecf70 FWPositionControl: navigateWaypoints: fix logic if already past waypoint and need to turn back (#21635)
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-26 15:12:42 +02:00
Silvan Fuhrer ad769db8d6 FW Rate Controller: allow to enable/disable yaw axis in Acro (#21566)
* RateControl: rename setGains to setPidGains to be more precise

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

* FW Rate controller: only allow to disable Yaw in Acro, not roll and pitch

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>

---------

Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-05-26 15:09:29 +02:00
Alex Klimaj ee96d209d7 drivers/uavcannode: add GNSS Auxiliary publisher 2023-05-24 21:27:50 -04:00
Junwoo Hwang 822d784335 Create stale bot (Github actions) (#21630) 2023-05-24 10:13:40 +09:00
Loïc Dubois 1b9d90e7c4 mavlink: fix mismatch between header macros and class used 2023-05-23 20:44:32 -04:00
alexklimaj dc99a875c3 Mavlink receiver unadvertise all
uorb multi pubs in destructor
2023-05-23 18:40:06 -06:00
Matthias Grob c903288f4c ManualControlSelectorTest: adapt to using input validity flag 2023-05-23 17:24:17 +02:00
Matthias Grob 7b6f45079b ManualControl: use input validity flag to check for RC calibration 2023-05-23 17:24:17 +02:00
Matthias Grob 7d0596d244 RCInput: follow topic name convention 2023-05-23 17:24:17 +02:00
Patrick José Pereira 8feb662557 systemcmds: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira 09f282b282 temperature_compensation: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira 5fff0526cf rc_update: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira 837847f3ad mavlink: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira ca1d32a29d HealthAndArmingChecks: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira cee21bd703 sensor_calibration: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira 643d89f54b uORB: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
Patrick José Pereira dc2428a348 px4_log: Use snprintf over sprintf
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2023-05-22 07:46:54 +02:00
412 changed files with 13179 additions and 8148 deletions
-34
View File
@@ -1,34 +0,0 @@
---
name: 🐛 Bug report
about: Create a report to help us improve
labels: bug-report
---
## Describe the bug
A clear and concise description of the bug.
## To Reproduce
Steps to reproduce the behavior:
1. Drone switched on '...'
2. Uploaded mission '....' (attach QGC mission file)
3. Took off '....'
4. See error
## Expected behavior
A clear and concise description of what you expected to happen.
## Log Files and Screenshots
*Always* provide a link to the flight log file:
- Download the flight log file from the vehicle ([tutorial](https://docs.px4.io/main/en/getting_started/flight_reporting.html)).
- Upload the log to the [PX4 Flight Review](http://logs.px4.io/)
- Share the link to the log (Copy and paste the URL of the log)
Add screenshots to help explain your problem.
## Drone (please complete the following information):
- Describe the type of drone.
- Photo of the IMU / autopilot setup if possible.
## Additional context
Add any other context about the problem here.
@@ -1,20 +0,0 @@
---
name: 🚀 Feature Request
about: Suggest an idea for this project
labels: feature-request
---
For general questions please use [PX4 Discuss](http://discuss.px4.io/) or Discord (you can find an invite link on this project README).
## Describe problem solved by the proposed feature
A clear and concise description of the problem, if any, this feature will solve. E.g. I'm always frustrated when ...
## Describe your preferred solution
A clear and concise description of what you want to happen.
## Describe possible alternatives
A clear and concise description of alternative solutions or features you've considered.
## Additional context
Add any other context or screenshots for the feature request here.
@@ -1,13 +0,0 @@
---
name: ⛔ Support Question
about: See http://discuss.px4.io/ for questions about using PX4.
---
## Attention! Please read the note below
We use GitHub issues only to discuss PX4 bugs and new features.
**For questions about using PX4 or related components, please use [PX4 Discuss](http://discuss.px4.io/).**
Thanks!
@@ -1,11 +0,0 @@
---
name: ⛔ Documentation Issue
about: See https://github.com/PX4/px4_user_guide for documentation issues
---
## Attention! Please read the note below
**Please submit the documentation issue to the [User Guide](https://github.com/PX4/px4_user_guide) repository.**
Thanks!
+94
View File
@@ -0,0 +1,94 @@
name: 🐛 Bug report
description: Create a report to help us improve
title: "[Bug] "
labels: ["bug-report"]
body:
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of the bug.
validations:
required: true
- type: textarea
attributes:
label: To Reproduce
description: |
Steps to reproduce the behavior.
1. Drone switched on '...'
2. Uploaded mission '....' (attach QGC mission file)
3. Took off '....'
4. See error
validations:
required: true
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: Screenshot / Media
description: Add screenshot / media if you have them
- type: textarea
attributes:
label: Flight Log
description: |
*Always* provide a link to the flight log file:
- Download the flight log file from the vehicle ([tutorial](https://docs.px4.io/main/en/getting_started/flight_reporting.html)).
- Upload the log to the [PX4 Flight Review](http://logs.px4.io/)
- Share the link to the log (Copy and paste the URL of the log)
placeholder: |
# PASTE HERE THE LINK TO THE LOG
validations:
required: true
- type: markdown
attributes:
value: |
## Setup
- type: textarea
attributes:
label: Software Version
description: |
Which version of PX4 are you using?
placeholder: |
# If you don't know the version, paste the output of `ver all` in the MAVLink Shell of QGC
validations:
required: true
- type: input
attributes:
label: Flight controller
description: Specify your flight controller model (what type is it, where was it bought from, ...).
validations:
required: true
- type: dropdown
attributes:
label: Vehicle type
options:
- Multicopter
- Helicopter
- Fixed Wing
- Hybrid VTOL
- Airship/Balloon
- Rover
- Boat
- Submarine
- Other
- type: textarea
attributes:
label: How are the different components wired up (including port information)
description: Details about how all is wired.
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here.
+8
View File
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Support Question
url: https://docs.px4.io/main/en/contribute/support.html#forums-and-chat
about: For questions about using PX4 or related components, please use the discuss forum and discord server
- name: Documentation Issue
url: https://github.com/PX4/PX4-user_guide/issues
about: If you found an issue in documentation, please submit it directly to the docs repository issues
@@ -0,0 +1,35 @@
name: 🚀 Feature Request
description: Suggest an idea for this project
labels: ["feature-request"]
body:
- type: markdown
attributes:
value: |
## Please note that feature requests are not 'fire and forget'
It is a lot more likely that the feature you would like to have will be implemented if you keep watching your feature request, and provide more details to developers looking into implementing your feature, and help them with testing.
- type: textarea
attributes:
label: Describe problem solved by the proposed feature
description: A clear and concise description of the problem, if any, this feature will solve. E.g. I'm always frustrated when ...
validations:
required: true
- type: textarea
attributes:
label: Describe your preferred solution
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Describe possible alternatives
description: A clear and concise description of any alternative solutions or features you've considered.
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: Add any other context or screenshots for the feature request here.
+1 -1
View File
@@ -23,7 +23,7 @@ For release notes:
```
Feature/Bugfix XYZ
New parameter: XYZ_Z
Documentation: Need to clarfiy page ... / done, read docs.px4.io/...
Documentation: Need to clarify page ... / done, read docs.px4.io/...
```
### Alternatives
-24
View File
@@ -1,24 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="90" height="20">
<linearGradient id="smooth" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="round">
<rect width="90" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#round)">
<rect width="42" height="20" fill="#555"/>
<rect x="42" width="48" height="20" fill="#E01563"/>
<rect width="90" height="20" fill="url(#smooth)"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="22" y="15" fill="#010101" fill-opacity=".3">slack</text>
<text x="22" y="14">slack</text>
<text x="65" y="15" fill="#010101" fill-opacity=".3">Join us!</text>
<text x="65" y="14">Join us!</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 894 B

-15
View File
@@ -1,15 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before a stale issue is closed, or `false` to disable
daysUntilClose: false
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
+3 -2
View File
@@ -11,7 +11,7 @@ on:
jobs:
build:
runs-on: ubuntu-latest
container: px4io/px4-dev-armhf:2021-09-08
container: px4io/px4-dev-armhf:2023-06-26
strategy:
matrix:
config: [
@@ -24,7 +24,8 @@ jobs:
- uses: actions/checkout@v1
with:
token: ${{secrets.ACCESS_TOKEN}}
- name: ownership workaround
run: git config --system --add safe.directory '*'
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
shell: cmake -P {0}
+16
View File
@@ -0,0 +1,16 @@
name: 'Handle stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
with:
days-before-stale: 30
days-before-close: -1
stale-issue-label: 'stale'
stale-pr-label: 'stale'
remove-stale-when-updated: true
@@ -17,6 +17,7 @@ param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 1
param set-default SENS_EN_MAGSIM 1
param set-default VT_B_TRANS_DUR 5
param set-default VT_ELEV_MC_LOCK 0
param set-default VT_TYPE 0
param set-default VT_FW_DIFTHR_EN 1
@@ -48,35 +48,32 @@ param set-default PWM_MAIN_REV 96 # invert both elevons
param set-default EKF2_MULTI_IMU 0
param set-default SENS_IMU_MODE 1
param set-default NPFG_PERIOD 12
param set-default FW_PR_I 0.2
param set-default FW_PR_P 0.2
param set-default FW_P_TC 0.6
param set-default FW_PR_FF 0.1
param set-default FW_PSP_OFF 2
param set-default FW_P_LIM_MIN -15
param set-default FW_RR_P 0.2
param set-default FW_THR_TRIM 0.33
param set-default FW_THR_MAX 0.6
param set-default FW_RR_FF 0.1
param set-default FW_RR_I 0.2
param set-default FW_RR_P 0.3
param set-default FW_THR_TRIM 0.35
param set-default FW_THR_MAX 0.8
param set-default FW_THR_MIN 0.05
param set-default FW_T_ALT_TC 2
param set-default FW_T_CLMB_MAX 8
param set-default FW_T_SINK_MAX 2.7
param set-default FW_T_SINK_MIN 2.2
param set-default FW_T_TAS_TC 2
param set-default FW_T_CLMB_MAX 6
param set-default FW_T_HRATE_FF 0.5
param set-default FW_T_SINK_MAX 3
param set-default FW_T_SINK_MIN 1.6
param set-default MC_AIRMODE 1
param set-default MC_ROLL_P 3
param set-default MC_PITCH_P 3
param set-default MC_ROLLRATE_P 0.3
param set-default MC_PITCHRATE_P 0.3
param set-default MPC_XY_P 0.8
param set-default MPC_XY_VEL_P_ACC 3
param set-default MPC_XY_VEL_I_ACC 4
param set-default MPC_XY_VEL_D_ACC 0.1
param set-default NAV_ACC_RAD 5
param set-default VT_ARSP_TRANS 10
param set-default VT_B_TRANS_DUR 5
param set-default VT_FW_DIFTHR_EN 1
param set-default VT_FW_DIFTHR_S_Y 0.5
param set-default VT_FW_DIFTHR_S_Y 1
param set-default VT_F_TRANS_DUR 1.5
param set-default VT_F_TRANS_THR 0.7
param set-default VT_TYPE 0
param set-default WV_EN 0
@@ -0,0 +1,74 @@
#!/bin/sh
#
# @name Quadrotor + Tailsitter
#
# @type VTOL Quad Tailsitter
#
. ${R}etc/init.d/rc.vtol_defaults
param set-default MAV_TYPE 20
param set-default CA_AIRFRAME 4
param set-default CA_ROTOR_COUNT 4
param set-default CA_ROTOR0_PX 0.15
param set-default CA_ROTOR0_PY 0.23
param set-default CA_ROTOR0_KM 0.05
param set-default CA_ROTOR1_PX -0.15
param set-default CA_ROTOR1_PY -0.23
param set-default CA_ROTOR1_KM 0.05
param set-default CA_ROTOR2_PX 0.15
param set-default CA_ROTOR2_PY -0.23
param set-default CA_ROTOR2_KM -0.05
param set-default CA_ROTOR3_PX -0.15
param set-default CA_ROTOR3_PY 0.23
param set-default CA_ROTOR3_KM -0.05
param set-default CA_SV_CS_COUNT 0
param set-default PWM_MAIN_FUNC1 101
param set-default PWM_MAIN_FUNC2 102
param set-default PWM_MAIN_FUNC3 103
param set-default PWM_MAIN_FUNC4 104
param set-default PWM_MAIN_FUNC5 0
parm set-default FD_FAIL_R 70
param set-default FW_P_TC 0.6
param set-default FW_PR_I 0.3
param set-default FW_PR_P 0.5
param set-default FW_PSP_OFF 2
param set-default FW_RR_FF 0.1
param set-default FW_RR_I 0.1
param set-default FW_RR_P 0.2
param set-default FW_YR_FF 0 # make yaw rate controller very weak, only keep default P
param set-default FW_YR_I 0
param set-default FW_THR_TRIM 0.35
param set-default FW_THR_MAX 0.8
param set-default FW_THR_MIN 0.05
param set-default FW_T_CLMB_MAX 6
param set-default FW_T_HRATE_FF 0.5
param set-default FW_T_SINK_MAX 3
param set-default FW_T_SINK_MIN 1.6
param set-default FW_AIRSPD_STALL 10
param set-default FW_AIRSPD_MIN 14
param set-default FW_AIRSPD_TRIM 18
param set-default FW_AIRSPD_MAX 22
param set-default MC_AIRMODE 2
param set-default MAN_ARM_GESTURE 0 # required for yaw airmode
param set-default MC_ROLL_P 3
param set-default MC_PITCH_P 3
param set-default MC_ROLLRATE_P 0.3
param set-default MC_PITCHRATE_P 0.3
param set-default VT_ARSP_TRANS 15
param set-default VT_B_TRANS_DUR 5
param set-default VT_FW_DIFTHR_EN 7
param set-default VT_FW_DIFTHR_S_Y 1
param set-default VT_F_TRANS_DUR 1.5
param set-default VT_TYPE 0
param set-default WV_EN 0
@@ -60,6 +60,7 @@ px4_add_romfs_files(
1042_gazebo-classic_tiltrotor
1043_gazebo-classic_standard_vtol_drop
1044_gazebo-classic_plane_lidar
1045_gazebo-classic_quadtailsitter
1060_gazebo-classic_rover
1061_gazebo-classic_r1_rover
1062_flightgear_tf-r1
@@ -93,4 +94,6 @@ px4_add_romfs_files(
17001_flightgear_tf-g1
17002_flightgear_tf-g2
# [22000, 22999] Reserve for custom models
)
@@ -20,6 +20,7 @@
param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters
param set UAVCAN_ENABLE 0
param set-default VT_B_TRANS_DUR 5
param set-default VT_ELEV_MC_LOCK 0
param set-default VT_MOT_COUNT 2
param set-default VT_TYPE 0
@@ -31,3 +31,4 @@ param set-default CA_SV_CS1_TYPE 6
param set-default MAV_TYPE 19
param set-default VT_TYPE 0
param set-default VT_ELEV_MC_LOCK 0
param set-default VT_B_TRANS_DUR 5
+5 -1
View File
@@ -21,7 +21,11 @@ control_allocator start
fw_rate_control start
fw_att_control start
fw_pos_control start
airspeed_selector start
if param greater -s ASPD_SEL_EN 0
then
airspeed_selector start
fi
#
# Start attitude control auto-tuner
+4 -1
View File
@@ -20,7 +20,10 @@ ekf2 start &
#
control_allocator start
airspeed_selector start
if param greater -s ASPD_SEL_EN 0
then
airspeed_selector start
fi
vtol_att_control start
+2
View File
@@ -254,6 +254,8 @@ else
#
rgbled start -X -q
rgbled_ncp5623c start -X -q
rgbled_lp5562 start -X -q
rgbled_is31fl3195 start -X -q
#
# Override parameters from user configuration file.
+8 -5
View File
@@ -56,11 +56,14 @@ def perform_imu_checks(
# perform the vibration check
imu_status['imu_vibration_check'] = 'Pass'
for imu_vibr_metric in ['imu_coning', 'imu_hfgyro', 'imu_hfaccel']:
mean_metric = '{:s}_mean'.format(imu_vibr_metric)
peak_metric = '{:s}_peak'.format(imu_vibr_metric)
if imu_metrics[mean_metric] > check_levels['{:s}_warn'.format(mean_metric)] \
or imu_metrics[peak_metric] > check_levels['{:s}_warn'.format(peak_metric)]:
imu_status['imu_vibration_check'] = 'Warning'
mean_metric = '{:s}_mean_warn'.format(imu_vibr_metric)
peak_metric = '{:s}_peak_warn'.format(imu_vibr_metric)
mean_key = '{:s}_mean'.format(imu_vibr_metric)
peak_key = '{:s}_peak'.format(imu_vibr_metric)
if mean_key in imu_metrics and peak_key in imu_metrics:
if imu_metrics[mean_key] > check_levels[mean_metric] \
or imu_metrics[peak_key] > check_levels[peak_metric]:
imu_status['imu_vibration_check'] = 'Warning'
if imu_status['imu_vibration_check'] == 'Warning':
print('IMU vibration check warning.')
+3 -3
View File
@@ -104,9 +104,9 @@ def calculate_innov_fail_metrics(
# calculate innovation check fail metrics
for signal_id, signal, result in [('posv', 'reject_ver_pos', 'hgt_fail_percentage'),
('magx', 'reject_mag_x', 'magx_fail_percentage'),
('magy', 'reject_mag_y', 'magy_fail_percentage'),
('magz', 'reject_mag_z', 'magz_fail_percentage'),
('magx', 'fs_bad_mag_x', 'magx_fail_percentage'),
('magy', 'fs_bad_mag_y', 'magy_fail_percentage'),
('magz', 'fs_bad_mag_z', 'magz_fail_percentage'),
('yaw', 'reject_yaw', 'yaw_fail_percentage'),
('velh', 'reject_hor_vel', 'vel_fail_percentage'),
('velv', 'reject_ver_vel', 'vel_fail_percentage'),
+1 -1
View File
@@ -222,7 +222,7 @@ def create_pdf_report(ulog: ULog, multi_instance: int, output_plot_filename: str
data_plot = CheckFlagsPlot(
status_flags_time, estimator_status_flags, [['reject_hor_vel', 'reject_hor_pos'], ['reject_ver_vel', 'reject_ver_pos',
'reject_hagl'],
['reject_mag_x', 'reject_mag_y', 'reject_mag_z',
['fs_bad_mag_x', 'fs_bad_mag_y', 'fs_bad_mag_z',
'reject_yaw'], ['reject_airspeed'], ['reject_sideslip'],
['reject_optflow_x',
'reject_optflow_y']], x_label='time (sec)',
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
symforce>=0.5.0
symforce>=0.9.0
+1 -1
View File
@@ -10,7 +10,7 @@ sitl_num=2
[ -n "$1" ] && sitl_num="$1"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
src_path="$SCRIPT_DIR/.."
src_path="$SCRIPT_DIR/../../"
build_path=${src_path}/build/px4_sitl_default
View File
@@ -106,7 +106,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
+1
View File
@@ -20,6 +20,7 @@ CONFIG_DRIVERS_IRLOCK=y
CONFIG_COMMON_LIGHT=y
CONFIG_COMMON_MAGNETOMETER=y
CONFIG_COMMON_OPTICAL_FLOW=y
CONFIG_COMMON_OSD=y
CONFIG_DRIVERS_PWM_OUT=y
CONFIG_BOARD_UAVCAN_INTERFACES=1
CONFIG_DRIVERS_UAVCANNODE=y
Binary file not shown.
@@ -7,6 +7,7 @@
#
# CONFIG_DEV_CONSOLE is not set
# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set
# CONFIG_DISABLE_PTHREAD is not set
# CONFIG_SPI_EXCHANGE is not set
# CONFIG_STM32H7_SYSCFG is not set
CONFIG_ARCH="arm"
@@ -48,13 +49,14 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
CONFIG_MEMSET_64BIT=y
CONFIG_MEMSET_OPTSPEED=y
CONFIG_PREALLOC_TIMERS=50
CONFIG_PTHREAD_MUTEX_ROBUST=y
CONFIG_PTHREAD_STACK_MIN=512
CONFIG_RAM_SIZE=245760
CONFIG_RAM_START=0x20010000
@@ -387,7 +387,7 @@
#define GPIO_UART7_RX GPIO_UART7_RX_4 /* PF6 */
#define GPIO_UART7_TX GPIO_UART7_TX_3 /* PE8 */
#define GPIO_UART7_RTS (GPIO_UART7_RTS_2 | GPIO_PULLDOWN) /* PF8 */
#define GPIO_UART7_RTS GPIO_UART7_RTS_2 /* PF8 */
#define GPIO_UART7_CTS (GPIO_UART7_CTS_1 | GPIO_PULLDOWN) /* PE10 */
#define GPIO_UART8_RX GPIO_UART8_RX_1 /* PE0 */
@@ -118,7 +118,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_IOB_NBUFFERS=24
CONFIG_IOB_THROTTLE=0
CONFIG_IPCFG_BINARY=y
@@ -291,8 +291,9 @@ CONFIG_UART4_RXBUFSIZE=600
CONFIG_UART4_TXBUFSIZE=1500
CONFIG_UART5_IFLOWCONTROL=y
CONFIG_UART5_OFLOWCONTROL=y
CONFIG_UART7_RXBUFSIZE=1500
CONFIG_UART5_RXDMA=y
CONFIG_UART5_TXBUFSIZE=3000
CONFIG_UART5_TXBUFSIZE=10000
CONFIG_UART5_TXDMA=y
CONFIG_UART7_BAUD=57600
CONFIG_UART7_IFLOWCONTROL=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
+1 -1
View File
@@ -120,7 +120,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_IOB_NBUFFERS=24
CONFIG_IOB_THROTTLE=0
CONFIG_LIBC_LONG_LONG=y
@@ -105,7 +105,7 @@ CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -106,7 +106,7 @@ CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
+1 -1
View File
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
+1 -1
View File
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
@@ -49,7 +49,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -62,7 +62,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
CONFIG_MEMSET_64BIT=y
@@ -109,7 +109,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_LIBC_STRERROR=y
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
+4 -1
View File
@@ -10,8 +10,10 @@ CONFIG_BOARD_SERIAL_RC="/dev/ttyS4"
CONFIG_DRIVERS_ADC_BOARD_ADC=y
CONFIG_DRIVERS_BAROMETER_BMP280=y
CONFIG_DRIVERS_DSHOT=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20689=y
CONFIG_DRIVERS_IMU_INVENSENSE_MPU6000=y
CONFIG_DRIVERS_OSD_ATXXXX=y
CONFIG_DRIVERS_PWM_OUT=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_DRIVERS_TELEMETRY_FRSKY_TELEMETRY=y
@@ -31,5 +33,6 @@ CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_SENSORS=y
CONFIG_MODULES_UXRCE_DDS_CLIENT=y
CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_TOP=y
CONFIG_SYSTEMCMDS_DMESG=y
@@ -115,7 +115,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -113,6 +113,7 @@
/* RC Serial port */
#define RC_SERIAL_PORT "/dev/ttyS4"
#define RC_SERIAL_SINGLEWIRE
#define GPIO_RSSI_IN /* PC5 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN5)
@@ -129,6 +130,8 @@
GPIO_RSSI_IN, \
}
#define BOARD_ENABLE_CONSOLE_BUFFER
#define BOARD_NUM_IO_TIMERS 4
__BEGIN_DECLS
-4
View File
@@ -252,9 +252,5 @@ __EXPORT int board_app_initialize(uintptr_t arg)
#endif
/* Configure the HW based on the manifest */
px4_platform_configure();
return OK;
}
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -47,7 +47,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -47,7 +47,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -30,7 +30,7 @@ CONFIG_FDCLONE_STDIO=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=4096
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -104,7 +104,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -47,7 +47,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -47,7 +47,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
+1 -1
View File
@@ -112,7 +112,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
+8 -4
View File
@@ -14,10 +14,10 @@ CONFIG_COMMON_DIFFERENTIAL_PRESSURE=y
CONFIG_COMMON_DISTANCE_SENSOR=y
CONFIG_DRIVERS_DSHOT=y
CONFIG_DRIVERS_GPS=y
CONFIG_DRIVERS_IMU_BOSCH_BMI088=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20602=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20649=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
# CONFIG_DRIVERS_IMU_BOSCH_BMI088=y
# CONFIG_DRIVERS_IMU_INVENSENSE_ICM20602=y
# CONFIG_DRIVERS_IMU_INVENSENSE_ICM20649=y
# CONFIG_DRIVERS_IMU_INVENSENSE_ICM20948=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM42688P=y
CONFIG_DRIVERS_IRLOCK=y
CONFIG_COMMON_LIGHT=y
@@ -29,11 +29,13 @@ CONFIG_DRIVERS_POWER_MONITOR_INA226=y
CONFIG_DRIVERS_POWER_MONITOR_VOXLPM=y
CONFIG_DRIVERS_PWM_OUT=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_DRIVERS_RPM=y
CONFIG_COMMON_TELEMETRY=y
CONFIG_DRIVERS_UAVCAN=y
CONFIG_BOARD_UAVCAN_INTERFACES=1
CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE=2
CONFIG_MODULES_AIRSPEED_SELECTOR=y
# CONFIG_MODULES_ATTITUDE_ESTIMATOR_Q=y
CONFIG_MODULES_CAMERA_FEEDBACK=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
@@ -52,6 +54,7 @@ CONFIG_MODULES_GYRO_FFT=y
CONFIG_MODULES_LAND_DETECTOR=y
CONFIG_MODULES_LANDING_TARGET_ESTIMATOR=y
CONFIG_MODULES_LOAD_MON=y
# CONFIG_MODULES_LOCAL_POSITION_ESTIMATOR=y
CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MAG_BIAS_ESTIMATOR=y
CONFIG_MODULES_MANUAL_CONTROL=y
@@ -70,6 +73,7 @@ CONFIG_MODULES_TEMPERATURE_COMPENSATION=y
CONFIG_MODULES_UXRCE_DDS_CLIENT=y
CONFIG_MODULES_VTOL_ATT_CONTROL=y
CONFIG_SYSTEMCMDS_ACTUATOR_TEST=y
CONFIG_SYSTEMCMDS_BL_UPDATE=y
CONFIG_SYSTEMCMDS_BSONDUMP=y
CONFIG_SYSTEMCMDS_DMESG=y
CONFIG_SYSTEMCMDS_GPIO=y
+2 -2
View File
@@ -20,8 +20,8 @@ icm42688p -s -b 1 -R 12 start
# Internal SPI2 ICM-42688
icm42688p -s -b 2 -R 12 start
# Internal I2C mag
bmm150 -I start
# Don't start Internal I2C mag
# bmm150 -I start
# Internal I2C baro
icp201xx -I start
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_IOB_NBUFFERS=24
CONFIG_IOB_NCHAINS=24
CONFIG_LIBC_FLOATINGPOINT=y
+14
View File
@@ -68,4 +68,18 @@ else()
nuttx_drivers # sdio
px4_layer
)
set(COMMON_MODALAI_SRC_DIR ${PX4_SOURCE_DIR}/boards/modalai/src)
set(MODALAI_SYSTEMCMD_SRC_DIR ${COMMON_MODALAI_SRC_DIR}/systemcmds/modalai)
px4_add_module(
MODULE systemcmds__modalai
MAIN modalai
COMPILE_FLAGS
SRCS
${MODALAI_SYSTEMCMD_SRC_DIR}/modalai_fc-v2.c
${MODALAI_SYSTEMCMD_SRC_DIR}/modalai_fc-v1.c
${MODALAI_SYSTEMCMD_SRC_DIR}/modalai.c
DEPENDS
)
endif()
+14 -2
View File
@@ -91,6 +91,12 @@
# define GPIO_nLED_GREEN /* PE4 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN4)
# define GPIO_nLED_BLUE /* PE5 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN5)
// GPIO_nLED_2_RED/ GPIO_nLED_2_GREEN /GPIO_nLED_2_BLUE are for v1 LED tests
# define GPIO_nLED_2_RED /* PI0 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTI|GPIO_PIN0)
# define GPIO_nLED_2_GREEN /* PH11 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTH|GPIO_PIN11)
# define GPIO_nLED_2_BLUE /* PA2 */ (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN2)
# define BOARD_HAS_CONTROL_STATUS_LEDS 1
# define BOARD_OVERLOAD_LED LED_RED
# define BOARD_ARMED_STATE_LED LED_BLUE
@@ -208,6 +214,12 @@
#define CAN1_SILENT /* PD15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTD|GPIO_PIN15)
/* For primary/backup signaling with VOXL, 2 pins on J4 are exposed */
// GPIO_VOXL_STATUS_OUT/ GPIO_VOXL_STATUS_IN are for v1 Spare MSS Communications Interface and J4 tests
#define GPIO_VOXL_STATUS_OUT /* PE4 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN4)
#define GPIO_VOXL_STATUS_IN /* PE3 */ (GPIO_INPUT|GPIO_FLOAT|GPIO_PORTE|GPIO_PIN3)
/* Define True logic Power Control in arch agnostic form */
#define VDD_3V3_SPEKTRUM_POWER_EN(on_true) px4_arch_gpiowrite(GPIO_VDD_3V3_SPEKTRUM_POWER_EN, (on_true))
@@ -338,8 +350,8 @@
#define BOARD_NUM_IO_TIMERS 5
// J1 / TELEM1 / USART7
#define MODAL_IO_DEFAULT_PORT "/dev/ttyS6"
// J5 USART5 TELEM2 Port next to PWM connector
#define MODAL_IO_DEFAULT_PORT "/dev/ttyS4"
__BEGIN_DECLS
@@ -0,0 +1,131 @@
#include <px4_platform_common/module.h>
#include "chip.h"
#include "stm32_gpio.h"
#include "board_config.h"
#include <nuttx/board.h>
#include <arch/board/board.h>
// v2
#ifdef CONFIG_ARCH_CHIP_STM32H753II // chip on M0087
#include "modalai_fc-v2.h"
#define MODALAI_FC_V2 1
#else
#include "modalai_fc-v1.h"
#endif
__EXPORT int modalai_main(int argc, char *argv[]);
int modalai_main(int argc, char *argv[])
{
int hw_rev = board_get_hw_revision();
int hw_ver = board_get_hw_version();
eHW_TYPE hw_type = eHwNone;
#ifdef MODALAI_FC_V2
if (hw_rev == 0 && hw_ver == 3) { // (should be hw_rev == 1 && hw_ver == 3) eventually...
hw_type = eM0087;
} else if (hw_rev == 0 && hw_ver == 3) {
hw_type = eM0079;
} else {
return -1;
}
#else
if (hw_rev == 6 && hw_ver == 0) {
hw_type = eM0018;
} else if (hw_rev == 0 && hw_ver == 1) {
hw_type = eM0019;
} else if (hw_rev == 0 && hw_ver == 2) {
hw_type = eM0051;
} else {
return -1;
}
#endif
if (argc <= 1) {
#ifdef MODALAI_FC_V2
modalai_print_usage_v2();
#else
modalai_print_usage_v1();
#endif
return 1;
}
if (!strcmp(argv[1], "led")) {
#ifdef MODALAI_FC_V2
return modalai_led_test_v2();
#else
return modalai_led_test_v1();
#endif
} else if (!strcmp(argv[1], "con")) {
if (argc <= 2) {
PRINT_MODULE_USAGE_COMMAND("con");
PRINT_MODULE_USAGE_ARG("<1,4,5,6,7,9,10,12,13>", "Connector ID", false);
PRINT_MODULE_USAGE_ARG("<uint>", "Pin Number", false);
PRINT_MODULE_USAGE_ARG("0 | 1", "<output state> (defaults to 0)", false);
return 1;
}
uint8_t con = 0;
uint8_t pin = 0;
bool state = false;
if (argc > 2) {
con = atoi(argv[2]);
}
if (argc > 3) {
pin = atoi(argv[3]);
}
if (argc > 4) {
state = atoi(argv[4]);
}
#ifdef MODALAI_FC_V2
return modalai_con_gpio_test_v2(con, pin, state);
#else
return modalai_con_gpio_test_v1(con, pin, state);
#endif
} else if (!strcmp(argv[1], "buzz")) {
#ifdef MODALAI_FC_V2
return modalai_buzz_test_v2(hw_type);
#else
return modalai_buzz_test_v1(hw_type);
#endif
} else if (!strcmp(argv[1], "detect")) {
#ifdef MODALAI_FC_V2
modalai_hw_detect_v2(hw_type);
#else
modalai_hw_detect_v1(hw_type);
#endif
return 0;
}
#ifdef MODALAI_FC_V2
modalai_print_usage_v2();
#else
modalai_print_usage_v1();
#endif
return -EINVAL;
}
@@ -0,0 +1,913 @@
#include <px4_platform_common/module.h>
#include "chip.h"
#include "stm32_gpio.h"
#include "board_config.h"
#include <nuttx/board.h>
#include <arch/board/board.h>
// v1
#ifndef CONFIG_ARCH_CHIP_STM32H743ZI
#include "modalai_fc-v1.h"
void modalai_print_usage_v1(void)
{
PRINT_MODULE_DESCRIPTION("ModalAI Test utility\n");
PRINT_MODULE_USAGE_NAME_SIMPLE("modalai", "command");
PRINT_MODULE_USAGE_COMMAND_DESCR("led", "LED Test");
PRINT_MODULE_USAGE_COMMAND_DESCR("con", "Connector Output Test (as GPIO)");
PRINT_MODULE_USAGE_COMMAND_DESCR("buzz", "Automated buzz out test");
PRINT_MODULE_USAGE_COMMAND_DESCR("detect", "Detect board type");
}
void modalai_print_usage_con_gpio_test_v1(void)
{
PRINT_MODULE_USAGE_NAME_SIMPLE("modalai con", "command");
PRINT_MODULE_USAGE_COMMAND_DESCR("1", "W<3,6> R<2,6>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("4", "W<2-4,6-7> R<8>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("5", "W<2-5>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("6", "W<2-5>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("7", "W<2-9>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("9", "R<2>");
PRINT_MODULE_USAGE_COMMAND_DESCR("10", "W<2-5>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("12", "W<1-3>, <0-1>");
PRINT_MODULE_USAGE_COMMAND_DESCR("13", "W<3-5>, <0-1>");
}
int modalai_led_test_v1(void)
{
PX4_INFO("Running led test");
stm32_configgpio(GPIO_nLED_RED);
stm32_configgpio(GPIO_nLED_GREEN);
stm32_configgpio(GPIO_nLED_BLUE);
int i = 0;
stm32_configgpio(GPIO_nLED_2_RED);
stm32_configgpio(GPIO_nLED_2_GREEN);
stm32_configgpio(GPIO_nLED_2_BLUE);
for (i = 0; i < 3; i++) {
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_RED, false);
stm32_gpiowrite(GPIO_nLED_2_RED, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_RED, true);
stm32_gpiowrite(GPIO_nLED_2_RED, true);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_GREEN, false);
stm32_gpiowrite(GPIO_nLED_2_GREEN, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_GREEN, true);
stm32_gpiowrite(GPIO_nLED_2_GREEN, true);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_BLUE, false);
stm32_gpiowrite(GPIO_nLED_2_BLUE, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_BLUE, true);
stm32_gpiowrite(GPIO_nLED_2_BLUE, true);
}
return OK;
}
int modalai_con_gpio_test_v1(uint8_t con, uint8_t pin, bool state)
{
// validate
switch (con) {
// Primary MSS Communications Interface
case 1:
switch (pin) {
case 2:
stm32_configgpio(J1_PIN2_IN);
state = stm32_gpioread(J1_PIN2_IN);
break;
case 3:
stm32_configgpio(J1_PIN3);
stm32_gpiowrite(J1_PIN3, state);
break;
case 4:
stm32_configgpio(J1_PIN4);
stm32_gpiowrite(J1_PIN4, state);
break;
case 6:
stm32_configgpio(J1_PIN6_IN);
state = stm32_gpioread(J1_PIN6_IN);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// STM JTAG Programming Header
case 2:
modalai_print_usage_con_gpio_test_v1();
return -1;
// USB 2.0 Full-Speed Downstream Device Port
case 3:
modalai_print_usage_con_gpio_test_v1();
return -1;
// Spare MSS Communications Interface
case 4:
switch (pin) {
case 2:
stm32_configgpio(J4_PIN2);
stm32_gpiowrite(J4_PIN2, state);
break;
case 3:
stm32_configgpio(J4_PIN3);
stm32_gpiowrite(J4_PIN3, state);
break;
case 4:
stm32_configgpio(J4_PIN4);
stm32_gpiowrite(J4_PIN4, state);
break;
case 6:
stm32_configgpio(J4_PIN6);
stm32_gpiowrite(J4_PIN6, state);
break;
case 7:
stm32_configgpio(J4_PIN7);
stm32_gpiowrite(J4_PIN7, state);
break;
case 8:
stm32_configgpio(J4_PIN8);
state = stm32_gpioread(J4_PIN8);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// TELEMETRY CONNECTOR
case 5:
switch (pin) {
case 2:
stm32_configgpio(J5_PIN2);
stm32_gpiowrite(J5_PIN2, state);
break;
case 3:
stm32_configgpio(J5_PIN3);
stm32_gpiowrite(J5_PIN3, state);
break;
case 4:
stm32_configgpio(J5_PIN4);
stm32_gpiowrite(J5_PIN4, state);
break;
case 5:
stm32_configgpio(J5_PIN5);
stm32_gpiowrite(J5_PIN5, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// EXPANSION CONNECTOR
case 6:
switch (pin) {
case 2:
stm32_configgpio(J6_PIN2);
stm32_gpiowrite(J6_PIN2, state);
break;
case 3:
stm32_configgpio(J6_PIN3);
stm32_gpiowrite(J6_PIN3, state);
break;
case 4:
stm32_configgpio(J6_PIN4);
stm32_gpiowrite(J6_PIN4, state);
break;
case 5:
stm32_configgpio(J6_PIN5);
stm32_gpiowrite(J6_PIN5, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// PWM Output Connector
case 7:
switch (pin) {
case 2:
stm32_configgpio(J7_PIN2);
stm32_gpiowrite(J7_PIN2, state);
break;
case 3:
stm32_configgpio(J7_PIN3);
stm32_gpiowrite(J7_PIN3, state);
break;
case 4:
stm32_configgpio(J7_PIN4);
stm32_gpiowrite(J7_PIN4, state);
break;
case 5:
stm32_configgpio(J7_PIN5);
stm32_gpiowrite(J7_PIN5, state);
break;
case 6:
stm32_configgpio(J7_PIN6);
stm32_gpiowrite(J7_PIN6, state);
break;
case 7:
stm32_configgpio(J7_PIN7);
stm32_gpiowrite(J7_PIN7, state);
break;
case 8:
stm32_configgpio(J7_PIN8);
stm32_gpiowrite(J7_PIN8, state);
break;
case 9:
stm32_configgpio(J7_PIN9);
stm32_gpiowrite(J7_PIN9, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// CAN 1 Peripheral Connector
case 8:
modalai_print_usage_con_gpio_test_v1();
return -1;
// PPM (RC) IN
case 9:
switch (pin) {
case 2:
stm32_configgpio(J9_PIN2_IN);
state = stm32_gpioread(J9_PIN2_IN);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// GPS CONNECTOR
case 10:
switch (pin) {
case 2:
stm32_configgpio(J10_PIN2);
stm32_gpiowrite(J10_PIN2, state);
break;
case 3:
stm32_configgpio(J10_PIN3);
stm32_gpiowrite(J10_PIN3, state);
break;
case 4:
stm32_configgpio(J10_PIN4);
stm32_gpiowrite(J10_PIN4, state);
break;
case 5:
stm32_configgpio(J10_PIN5);
stm32_gpiowrite(J10_PIN5, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// Micro SD Card Slot
case 11:
modalai_print_usage_con_gpio_test_v1();
return -1;
// Spektrum RC Input Connector
case 12:
switch (pin) {
case 1:
VDD_3V3_SPEKTRUM_POWER_EN(state);
break;
case 2:
__asm("nop");
stm32_configgpio(J12_PIN2);
stm32_gpiowrite(J12_PIN2, state);
//state = stm32_gpioread(J12_PIN2);
__asm("nop");
break;
case 3:
stm32_configgpio(J12_PIN3);
stm32_gpiowrite(J12_PIN3, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
// I2C DISPLAY / SPARE SENSOR CONNECTOR
case 13:
switch (pin) {
case 3:
stm32_configgpio(J13_PIN3);
stm32_gpiowrite(J13_PIN3, state);
break;
case 4:
stm32_configgpio(J13_PIN4);
stm32_gpiowrite(J13_PIN4, state);
break;
case 5:
stm32_configgpio(J13_PIN5);
stm32_gpiowrite(J13_PIN5, state);
break;
default:
modalai_print_usage_con_gpio_test_v1();
return -1;
}
break;
}
printf("GPIO - Con: %d, Pin: %d, State: %d\n", con, pin, state);
return OK;
}
bool test_pair(uint32_t output_pin, uint32_t input_pin)
{
bool state = false;
stm32_gpiowrite(output_pin, true);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != true) {
return false;
}
usleep(1000 * 10);
stm32_gpiowrite(output_pin, false);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != false) {
return false;
}
return true;
}
bool modalai_test_pair(uint32_t output_pin, uint32_t input_pin)
{
bool state = false;
stm32_gpiowrite(output_pin, true);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != true) {
return false;
}
usleep(1000 * 10);
stm32_gpiowrite(output_pin, false);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != false) {
return false;
}
return true;
}
int modalai_buzz_test_v1(eHW_TYPE hw_type)
{
PX4_INFO("test: buzz");
usleep(1000 * 100 * 10);
if (hw_type == eM0018) {
PX4_INFO("Using Flight Core Config");
} else if (hw_type == eM0019) {
PX4_INFO("Using VOXL-Flight Config");
} else if (hw_type == eM0051) {
PX4_INFO("Using M0051 Config");
} else {
return -1;
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J1");
stm32_configgpio(J1_PIN2_IN); // 2 [in] to 4 [out]
stm32_configgpio(J1_PIN3); // 3 [out] to 6 [in]
stm32_configgpio(J1_PIN4); // 4 [out] to 2 [in]
stm32_configgpio(J1_PIN6_IN); // 6 [in] to 3 [out]
if (test_pair(J1_PIN4, J1_PIN2_IN)) {
PX4_INFO("PASS: J1P4-J1P2");
} else {
PX4_ERR("FAIL: J1P4-J1P2 ----------------------------------------");
}
if (test_pair(J1_PIN3, J1_PIN6_IN)) {
PX4_INFO("PASS: J1P3-J1P6");
} else {
PX4_ERR("FAIL: J1P3-J1P6 ----------------------------------------");
}
} else if (hw_type == eM0019) {
// NA on VOXL-Flight (internally routed)
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J4");
stm32_configgpio(J4_PIN2); // 2 [out] 6 [in]
stm32_configgpio(J4_PIN3); // 3 [out] 7 [in]
stm32_configgpio(J4_PIN4); // 4 [out] 8 [in]
stm32_configgpio(J4_PIN6_IN); // 2 [out] 6 [in]
stm32_configgpio(J4_PIN7_IN); // 3 [out] 7 [in]
stm32_configgpio(J4_PIN8_IN); // 4 [out] 8 [in]
if (test_pair(J4_PIN2, J4_PIN6_IN)) {
PX4_INFO("PASS: J4P2-J4P6");
} else {
PX4_ERR("FAIL: J4P2-J4P6 ----------------------------------------");
}
if (test_pair(J4_PIN3, J4_PIN7_IN)) {
PX4_INFO("PASS: J4P3-J4P7");
} else {
PX4_ERR("FAIL: J4P3-J4P7 ----------------------------------------");
}
if (test_pair(J4_PIN4, J4_PIN8_IN)) {
PX4_INFO("PASS: J4P4-J4P8");
} else {
PX4_ERR("FAIL: J4P4-J4P8 ----------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1002");
stm32_configgpio(J1002_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J1002_PIN3); // 3 [out] 6 [in]
stm32_configgpio(J1002_PIN4_IN); // 2 [out] 4 [in]
stm32_configgpio(J1002_PIN6_IN); // 3 [out] 6 [in]
if (test_pair(J1002_PIN2, J1002_PIN4_IN)) {
PX4_INFO("PASS: J1002P2-J1002P4");
} else {
PX4_ERR("FAIL: J1002P2-J1002P4 ----------------------------------------");
}
if (test_pair(J1002_PIN3, J1002_PIN6_IN)) {
PX4_INFO("PASS: J1002P3-J1002P6");
} else {
PX4_ERR("FAIL: J1002P3-J1002P6 ----------------------------------------");
}
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J5");
stm32_configgpio(J5_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J5_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J5_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J5_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J5_PIN2, J5_PIN4_IN)) {
PX4_INFO("PASS: J5P2-J5P4");
} else {
PX4_ERR("FAIL: J5P2-J5P4 ----------------------------------------");
}
if (test_pair(J5_PIN3, J5_PIN5_IN)) {
PX4_INFO("PASS: J5P3-J5P5");
} else {
PX4_ERR("FAIL: J5P3-J5P5 ----------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1010");
stm32_configgpio(J1010_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J1010_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J1010_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J1010_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J1010_PIN2, J1010_PIN4_IN)) {
PX4_INFO("PASS: J1010P2-J1010P4");
} else {
PX4_ERR("FAIL: J1010P2-J1010P4 ----------------------------------------");
}
if (test_pair(J1010_PIN3, J1010_PIN5_IN)) {
PX4_INFO("PASS: J1010P3-J1010P5");
} else {
PX4_ERR("FAIL: J1010P3-J1010P5 ----------------------------------------");
}
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J6");
stm32_configgpio(J6_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J6_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J6_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J6_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J6_PIN2, J6_PIN4_IN)) {
PX4_INFO("PASS: J6P2-J6P4");
} else {
PX4_ERR("FAIL: J6P2-J6P4 ----------------------------------------");
}
if (test_pair(J6_PIN3, J6_PIN5_IN)) {
PX4_INFO("PASS: J6P3-J6P5");
} else {
PX4_ERR("FAIL: J6P3-J6P5 ----------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1009");
stm32_configgpio(J1009_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J1009_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J1009_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J1009_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J1009_PIN2, J1009_PIN4_IN)) {
PX4_INFO("PASS: J1009P2-J1009P4");
} else {
PX4_ERR("FAIL: J1009P2-J1009P4 ----------------------------------------");
}
if (test_pair(J1009_PIN3, J1009_PIN5_IN)) {
PX4_INFO("PASS: J1009P3-J1009P5");
} else {
PX4_ERR("FAIL: J1009P3-J1009P5 ----------------------------------------");
}
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J7");
stm32_configgpio(J7_PIN2); // 2 [out] 6 [in]
stm32_configgpio(J7_PIN3); // 3 [out] 7 [in]
stm32_configgpio(J7_PIN4); // 4 [out] 8 [in]
stm32_configgpio(J7_PIN5); // 5 [out] 9 [in]
stm32_configgpio(J7_PIN6_IN); // 6 [in] 2 [out]
stm32_configgpio(J7_PIN7_IN); // 7 [in] 3 [out]
stm32_configgpio(J7_PIN8_IN); // 8 [in] 4 [out]
stm32_configgpio(J7_PIN9_IN); // 9 [in] 5 [out]
if (test_pair(J7_PIN2, J7_PIN6_IN)) {
PX4_INFO("PASS: J7P2-J7P6");
} else {
PX4_ERR("FAIL: J7P2-J7P6 ----------------------------------------");
}
if (test_pair(J7_PIN3, J7_PIN7_IN)) {
PX4_INFO("PASS: J7P3-J7P7");
} else {
PX4_ERR("FAIL: J7P3-J7P7 ----------------------------------------");
}
if (test_pair(J7_PIN4, J7_PIN8_IN)) {
PX4_INFO("PASS: J7P4-J7P8");
} else {
PX4_ERR("FAIL: J7P4-J7P8 ----------------------------------------");
}
if (test_pair(J7_PIN5, J7_PIN9_IN)) {
PX4_INFO("PASS: J7P5-J7P9");
} else {
PX4_ERR("FAIL: J7P5-J7P9 ----------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1007");
stm32_configgpio(J1007_PIN2); // 2 [out] 6 [in]
stm32_configgpio(J1007_PIN3); // 3 [out] 7 [in]
stm32_configgpio(J1007_PIN4); // 4 [out] 8 [in]
stm32_configgpio(J1007_PIN5); // 5 [out] 9 [in]
stm32_configgpio(J1007_PIN6_IN); // 6 [in] 2 [out]
stm32_configgpio(J1007_PIN7_IN); // 7 [in] 3 [out]
stm32_configgpio(J1007_PIN8_IN); // 8 [in] 4 [out]
stm32_configgpio(J1007_PIN9_IN); // 9 [in] 5 [out]
if (test_pair(J1007_PIN2, J1007_PIN6_IN)) {
PX4_INFO("PASS: J1007P2-J1007P6");
} else {
PX4_ERR("FAIL: J1007P2-J1007P6 ----------------------------------------");
}
if (test_pair(J1007_PIN3, J1007_PIN7_IN)) {
PX4_INFO("PASS: J1007P3-J1007P7");
} else {
PX4_ERR("FAIL: J1007P3-J1007P7 ----------------------------------------");
}
if (test_pair(J1007_PIN4, J1007_PIN8_IN)) {
PX4_INFO("PASS: J1007P4-J1007P8");
} else {
PX4_ERR("FAIL: J1007P4-J1007P8 ----------------------------------------");
}
if (test_pair(J1007_PIN5, J1007_PIN9_IN)) {
PX4_INFO("PASS: J1007P5-J1007P9");
} else {
PX4_ERR("FAIL: J1007P5-J1007P9 ----------------------------------------");
}
} else if (hw_type == eM0051) {
PX4_INFO(">> Testing M0051 J13");
stm32_configgpio(M0051J13_PIN2); // 2 [out] 6 [in]
stm32_configgpio(M0051J13_PIN3); // 3 [out] 7 [in]
stm32_configgpio(M0051J13_PIN4); // 4 [out] 8 [in]
stm32_configgpio(M0051J13_PIN5); // 5 [out] 9 [in]
stm32_configgpio(M0051J13_PIN6_IN); // 6 [in] 2 [out]
stm32_configgpio(M0051J13_PIN7_IN); // 7 [in] 3 [out]
stm32_configgpio(M0051J13_PIN8_IN); // 8 [in] 4 [out]
stm32_configgpio(M0051J13_PIN9_IN); // 9 [in] 5 [out]
if (test_pair(M0051J13_PIN2, M0051J13_PIN6_IN)) {
PX4_INFO("PASS: J13_P2-J13_P6");
} else {
PX4_ERR("FAIL: J13_P2-J13_P6 ----------------------------------------");
}
if (test_pair(M0051J13_PIN3, M0051J13_PIN7_IN)) {
PX4_INFO("PASS: JJ13_P3-J13_P7");
} else {
PX4_ERR("FAIL: J13_P3-J13_7P7 ----------------------------------------");
}
if (test_pair(M0051J13_PIN4, M0051J13_PIN8_IN)) {
PX4_INFO("PASS: J13_P4-J13_P8");
} else {
PX4_ERR("FAIL: J13_P4-J13_P8 ----------------------------------------");
}
if (test_pair(M0051J13_PIN5, M0051J13_PIN9_IN)) {
PX4_INFO("PASS: J13_P5-J13_P9");
} else {
PX4_ERR("FAIL: J13_P5-J13_P9 ----------------------------------------");
}
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J10");
stm32_configgpio(J10_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J10_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J10_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J10_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J10_PIN2, J10_PIN4_IN)) {
PX4_INFO("PASS: J10P2-J10P4");
} else {
PX4_ERR("FAIL: J10P2-J10P4 --------------------------------------");
}
if (test_pair(J10_PIN3, J10_PIN5_IN)) {
PX4_INFO("PASS: J10P3-J10P5");
} else {
PX4_ERR("FAIL: J10P3-J10P5 --------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1012");
stm32_configgpio(J1012_PIN2); // 2 [out] 4 [in]
stm32_configgpio(J1012_PIN3); // 3 [out] 5 [in]
stm32_configgpio(J1012_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(J1012_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(J1012_PIN2, J1012_PIN4_IN)) {
PX4_INFO("PASS: J1012P2-J1120P4");
} else {
PX4_ERR("FAIL: J1012P2-J1012P4 --------------------------------------");
}
if (test_pair(J1012_PIN3, J1012_PIN5_IN)) {
PX4_INFO("PASS: J1012P3-J1012P5");
} else {
PX4_ERR("FAIL: J1012P3-J1012P5 --------------------------------------");
}
} else if (hw_type == eM0051) {
PX4_INFO(">> Testing M0051 J15");
stm32_configgpio(M0051J15_PIN2); // 2 [out] 4 [in]
stm32_configgpio(M0051J15_PIN3); // 3 [out] 5 [in]
stm32_configgpio(M0051J15_PIN4_IN); // 4 [in] 2 [out]
stm32_configgpio(M0051J15_PIN5_IN); // 5 [in] 3 [out]
if (test_pair(M0051J15_PIN2, M0051J15_PIN4_IN)) {
PX4_INFO("PASS: J15_P2-J15_P4");
} else {
PX4_ERR("FAIL: J15_P2-JJ15_P4 --------------------------------------");
}
if (test_pair(M0051J15_PIN3, M0051J15_PIN5_IN)) {
PX4_INFO("PASS: J15_P3-J15_P5");
} else {
PX4_ERR("FAIL: J15_P3-J15_P5 --------------------------------------");
}
}
if (hw_type == eM0018) {
PX4_INFO(">> Testing J9/J12/J13");
stm32_configgpio(J9_PIN2_IN); // J9-2 [in] J13-5 [out]
stm32_configgpio(J12_PIN2_IN); // J12-2 [in] J13-3 [out]
stm32_configgpio(J12_PIN3_IN); // J12-3 [in] J13-4 [out]
stm32_configgpio(J13_PIN3); // J13-3 [out] J12-2 [in]
stm32_configgpio(J13_PIN4); // J13-4 [out] J12-3 [in]
stm32_configgpio(J13_PIN5); // J13-5 [out] J9-2 [in]
if (test_pair(J13_PIN3, J12_PIN2_IN)) {
PX4_INFO("PASS: J13P3-J12P2");
} else {
PX4_ERR("FAIL: J13P3-J12P2 --------------------------------------");
}
if (test_pair(J13_PIN4, J12_PIN3_IN)) {
PX4_INFO("PASS: J13P4-J12P3");
} else {
PX4_ERR("FAIL: J13P4-J12P3 --------------------------------------");
}
if (test_pair(J13_PIN5, J9_PIN2_IN)) {
PX4_INFO("PASS: J13P5-J9P2");
} else {
PX4_ERR("FAIL: J13P5-J9P2 --------------------------------------");
}
} else if (hw_type == eM0019) {
PX4_INFO(">> Testing J1003/J1004/J1011");
stm32_configgpio(J1003_PIN2_IN); // J1003-2 [in] J13-5 [out]
stm32_configgpio(J1004_PIN2_IN); // J1004-2 [in] J13-3 [out]
stm32_configgpio(J1004_PIN3_IN); // J1004-3 [in] J13-4 [out]
stm32_configgpio(J1011_PIN3); // J1011-3 [out] J12-2 [in]
stm32_configgpio(J1011_PIN4); // J1011-4 [out] J12-3 [in]
stm32_configgpio(J1011_PIN5); // J1011-5 [out] J9-2 [in]
if (test_pair(J1011_PIN3, J1004_PIN2_IN)) {
PX4_INFO("PASS: J1011P3-J1004P2");
} else {
PX4_ERR("FAIL: J1011P3-J1004P2 --------------------------------------");
}
if (test_pair(J1011_PIN4, J1004_PIN3_IN)) {
PX4_INFO("PASS: J1011P4-J1004P3");
} else {
PX4_ERR("FAIL: J1011P4-J1004P3 --------------------------------------");
}
if (test_pair(J1011_PIN5, J1003_PIN2_IN)) {
PX4_INFO("PASS: J1011P5-J1011P5");
} else {
PX4_ERR("FAIL: J1011P5-J1011P5 --------------------------------------");
}
} else if (hw_type == eM0051) {
PX4_INFO(">> Testing M0051 J14");
stm32_configgpio(M0051J14_PIN2); // J14-2 [out] J14-3 [in]
stm32_configgpio(M0051J14_PIN3_IN); // J14-3 [in] J14-2 [out]
if (test_pair(M0051J14_PIN2, M0051J14_PIN3_IN)) {
PX4_INFO("PASS: J14_P2-J14_P3");
} else {
PX4_ERR("FAIL: J14_P2-J14_P3 --------------------------------------");
}
}
return 0;
}
int modalai_hw_detect_v1(eHW_TYPE hw_type)
{
int result = 0;
if (hw_type == eM0018) {
PX4_INFO("V106 - Flight Core");
} else if (hw_type == eM0019) {
PX4_INFO("V110 - VOXL-Flight");
} else if (hw_type == eM0051) {
PX4_INFO("V120 - M0051");
} else {
PX4_ERR("Unknown hardware");
result = -1;
}
return result;
}
#endif //CONFIG_ARCH_CHIP_STM32H743ZI
@@ -0,0 +1,218 @@
#ifndef MODALAI_FC_V1_H_
#define MODALAI_FC_V1_H_
typedef enum {
eHwUnknown = -1,
eHwNone = 0,
eM0018, // Flight Core
eM0019, // VOXL Flight
eM0051
} eHW_TYPE;
#define _MK_GPIO_INPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_INPUT|GPIO_PULLUP))
#define _MK_GPIO_OUTPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR))
//
// Flight Core - J1 - Primary MSS Communications Interface
// VOXL Flight - NA
//
#define J1_PIN2_IN _MK_GPIO_INPUT(GPIO_UART5_RX)
#define J1_PIN3 _MK_GPIO_OUTPUT(GPIO_UART5_TX)
#define J1_PIN4 _MK_GPIO_OUTPUT(GPIO_UART5_RTS)
#define J1_PIN6_IN _MK_GPIO_INPUT(GPIO_UART5_CTS)
//
// STM JTAG Programming Header
// Flight Core - J2
// VOXL Flight - J1001
//
//
// USB 2.0 Full-Speed Downstream Device Port
// Flight Core - J
// VOXL Flight - J1006
//
//
// Spare MSS Comms
// Flight Core - J4
// VOXL Flight - J1002
//
#define J4_PIN2 _MK_GPIO_OUTPUT(GPIO_USART2_RX)
#define J1002_PIN2 J4_PIN2
#define J4_PIN3 _MK_GPIO_OUTPUT(GPIO_USART2_TX)
#define J1002_PIN3 J4_PIN3
#define J4_PIN4 _MK_GPIO_OUTPUT(GPIO_USART2_RTS)
#define J1002_PIN4 J4_PIN4
#define J4_PIN4_IN _MK_GPIO_INPUT(GPIO_USART2_RTS)
#define J1002_PIN4_IN J4_PIN4_IN
#define J4_PIN6 _MK_GPIO_OUTPUT(GPIO_USART2_CTS)
#define J4_PIN6_IN _MK_GPIO_INPUT(GPIO_USART2_CTS)
#define J1002_PIN6_IN J4_PIN6_IN
#define J4_PIN7 _MK_GPIO_OUTPUT(GPIO_VOXL_STATUS_OUT)
#define J4_PIN7_IN _MK_GPIO_INPUT(GPIO_VOXL_STATUS_OUT)
#define J4_PIN8 _MK_GPIO_OUTPUT(GPIO_VOXL_STATUS_IN)
#define J4_PIN8_IN _MK_GPIO_INPUT(GPIO_VOXL_STATUS_IN)
//
// TELEMETRY CONNECTOR
// Flight Core - J5
// VOXL Flight - J1010
//
#define J5_PIN2 _MK_GPIO_OUTPUT(GPIO_UART7_TX)
#define J1010_PIN2 J5_PIN2
#define J5_PIN3 _MK_GPIO_OUTPUT(GPIO_UART7_RX)
#define J1010_PIN3 J5_PIN3
#define J5_PIN4 _MK_GPIO_OUTPUT(GPIO_UART7_CTS)
#define J1010_PIN4 J5_PIN4
#define J5_PIN4_IN _MK_GPIO_INPUT(GPIO_UART7_CTS)
#define J1010_PIN4_IN J5_PIN4_IN
#define J5_PIN5 _MK_GPIO_OUTPUT(GPIO_UART7_RTS)
#define J1010_PIN5 J5_PIN5
#define J5_PIN5_IN _MK_GPIO_INPUT(GPIO_UART7_RTS)
#define J1010_PIN5_IN J5_PIN5_IN
//
// EXPANSION CONNECTOR
// Flight Core - J6
// VOXL Flight - J1009
//
#define J6_PIN2 _MK_GPIO_OUTPUT(GPIO_UART4_TX_5)
#define J1009_PIN2 J6_PIN2
#define J6_PIN3 _MK_GPIO_OUTPUT(GPIO_UART4_RX_5)
#define J1009_PIN3 J6_PIN3
#define J6_PIN4 _MK_GPIO_OUTPUT(GPIO_I2C3_SCL_2)
#define J1009_PIN4 J6_PIN4
#define J6_PIN4_IN _MK_GPIO_INPUT(GPIO_I2C3_SCL_2)
#define J1009_PIN4_IN J6_PIN4_IN
#define J6_PIN5 _MK_GPIO_OUTPUT(GPIO_I2C3_SDA_2)
#define J1009_PIN5 J6_PIN5
#define J6_PIN5_IN _MK_GPIO_INPUT(GPIO_I2C3_SDA_2)
#define J1009_PIN5_IN J6_PIN5_IN
//
// Flight Core - J7 - PWM Output Connector
// VOXL Flight - J1007
// M0051 - J13
//
#define J7_PIN2 _MK_GPIO_OUTPUT(GPIO_TIM1_CH4OUT_2)
#define J1007_PIN2 J7_PIN2
#define M0051J13_PIN2 J7_PIN2
#define J7_PIN3 _MK_GPIO_OUTPUT(GPIO_TIM1_CH3OUT_1)
#define J1007_PIN3 J7_PIN3
#define M0051J13_PIN3 J7_PIN3
#define J7_PIN4 _MK_GPIO_OUTPUT(GPIO_TIM1_CH2OUT_2)
#define J1007_PIN4 J7_PIN4
#define M0051J13_PIN4 J7_PIN4
#define J7_PIN5 _MK_GPIO_OUTPUT(GPIO_TIM1_CH1OUT_1)
#define J1007_PIN5 J7_PIN5
#define M0051J13_PIN5 J7_PIN5
#define J7_PIN6 _MK_GPIO_OUTPUT(GPIO_TIM4_CH2OUT_2)
#define J1007_PIN6 J7_PIN6
#define M0051J13_PIN6 J7_PIN6
#define J7_PIN6_IN _MK_GPIO_INPUT(GPIO_TIM4_CH2OUT_2)
#define J1007_PIN6_IN J7_PIN6_IN
#define M0051J13_PIN6_IN J7_PIN6_IN
#define J7_PIN7 _MK_GPIO_OUTPUT(GPIO_TIM4_CH3OUT_2)
#define J1007_PIN7 J7_PIN7
#define M0051J13_PIN7 J7_PIN7
#define J7_PIN7_IN _MK_GPIO_INPUT(GPIO_TIM4_CH3OUT_2)
#define J1007_PIN7_IN J7_PIN7_IN
#define M0051J13_PIN7_IN J7_PIN7_IN
#define J7_PIN8 _MK_GPIO_OUTPUT(GPIO_TIM4_CH1OUT_2)
#define J1007_PIN8 J7_PIN8
#define M0051J13_PIN8 J7_PIN8
#define J7_PIN8_IN _MK_GPIO_INPUT(GPIO_TIM4_CH1OUT_2)
#define J1007_PIN8_IN J7_PIN8_IN
#define M0051J13_PIN8_IN J7_PIN8_IN
#define J7_PIN9 _MK_GPIO_OUTPUT(GPIO_TIM4_CH4OUT_2)
#define J1007_PIN9 J7_PIN9
#define M0051J13_PIN9 J7_PIN9
#define J7_PIN9_IN _MK_GPIO_INPUT(GPIO_TIM4_CH4OUT_2)
#define J1007_PIN9_IN J7_PIN9_IN
#define M0051J13_PIN9_IN J7_PIN9_IN
//
// CAN 1 Peripheral Connector
// Flight Core - J8
// VOXL Flight - J1008
//
//#define J8_PIN2 _MK_GPIO_OUTPUT()
//#define J8_PIN3 _MK_GPIO_OUTPUT()
// PPM (RC) IN
// Flight Core - J9
// VOXL Flight - J1003
//
#define J9_PIN2_IN _MK_GPIO_INPUT(GPIO_TIM8_CH1IN_2)
#define J1003_PIN2_IN J9_PIN2_IN
//
// GPS CONNECTOR
// Flight Core - J10
// VOXL Flight - J1012
// M0051 - J15
//
#define J10_PIN2 _MK_GPIO_OUTPUT(GPIO_USART1_TX_3)
#define J1012_PIN2 J10_PIN2
#define M0051J15_PIN2 J10_PIN2
#define J10_PIN3 _MK_GPIO_OUTPUT(GPIO_USART1_RX_3)
#define J1012_PIN3 J10_PIN3
#define M0051J15_PIN3 J10_PIN3
#define J10_PIN4 _MK_GPIO_OUTPUT(GPIO_I2C1_SCL_2)
#define J1012_PIN4 J10_PIN4
#define M0051J15_PIN4 J10_PIN4
#define J10_PIN4_IN _MK_GPIO_INPUT(GPIO_I2C1_SCL_2)
#define J1012_PIN4_IN J10_PIN4_IN
#define M0051J15_PIN4_IN J10_PIN4_IN
#define J10_PIN5 _MK_GPIO_OUTPUT(GPIO_I2C1_SDA_1)
#define J1012_PIN5 J10_PIN5
#define M0051J15_PIN5 J10_PIN5
#define J10_PIN5_IN _MK_GPIO_INPUT(GPIO_I2C1_SDA_1)
#define J1012_PIN5_IN J10_PIN5_IN
#define M0051J15_PIN5_IN J10_PIN5_IN
//
// Spektrum RC Input Connector
// Flight Core - J12
// VOXL Flight - J1004
// M0051 - J14
//
#define J12_PIN1 GPIO_VDD_3V3_SPEKTRUM_POWER_EN
#define J1004_PIN1 J12_PIN1
#define M0051J14_PIN1 J12_PIN1
#define J12_PIN2 _MK_GPIO_OUTPUT(GPIO_USART6_TX_1)
#define J1004_PIN2 J12_PIN2
#define M0051J14_PIN2 J12_PIN2
#define J12_PIN2_IN _MK_GPIO_INPUT(GPIO_USART6_TX_1)
#define J1004_PIN2_IN J12_PIN2_IN
#define M0051J14_PIN2_IN J12_PIN2_IN
#define J12_PIN3 _MK_GPIO_OUTPUT(GPIO_USART6_RX_1)
#define J1004_PIN3 J12_PIN3
#define M0051J14_PIN3 J12_PIN3
#define J12_PIN3_IN _MK_GPIO_INPUT(GPIO_USART6_RX_1)
#define J1004_PIN3_IN J12_PIN3_IN
#define M0051J14_PIN3_IN J12_PIN3_IN
//
// I2C Display / Spare Sensor Connector
// Flight Core - J13
// VOXL Flight - J1011
//
#define J13_PIN3 _MK_GPIO_OUTPUT(GPIO_I2C2_SDA_2)
#define J1011_PIN3 J13_PIN3
#define J13_PIN4 _MK_GPIO_OUTPUT(GPIO_I2C2_SCL_2)
#define J1011_PIN4 J13_PIN4
#define J13_PIN5 _MK_GPIO_OUTPUT(GPIO_PF3_EVENTOUT)
#define J1011_PIN5 J13_PIN5
void modalai_print_usage_v1(void);
void modalai_print_usage_con_gpio_test_v1(void);
int modalai_con_gpio_test_v1(uint8_t con, uint8_t pin, bool state);
int modalai_led_test_v1(void);
int modalai_buzz_test_v1(eHW_TYPE type);
int modalai_hw_detect_v1(eHW_TYPE type);
#endif //MODALAI_FC_V1_H_
@@ -0,0 +1,437 @@
#include <px4_platform_common/module.h>
#include "chip.h"
#include "stm32_gpio.h"
#include "board_config.h"
#include <nuttx/board.h>
#include <arch/board/board.h>
// v2
#ifdef CONFIG_ARCH_CHIP_STM32H753II // chip on M0087
#include "modalai_fc-v2.h"
void modalai_print_usage_v2(void)
{
PRINT_MODULE_DESCRIPTION("ModalAI Test utility\n");
PRINT_MODULE_USAGE_NAME_SIMPLE("modalai", "command");
PRINT_MODULE_USAGE_COMMAND_DESCR("led", "LED Test");
PRINT_MODULE_USAGE_COMMAND_DESCR("con", "Connector Output Test (as GPIO)");
PRINT_MODULE_USAGE_COMMAND_DESCR("buzz", "Automated buzz out test");
PRINT_MODULE_USAGE_COMMAND_DESCR("detect", "Detect board type");
return;
}
void modalai_print_usage_con_gpio_test_v2(void)
{
return;
}
int modalai_con_gpio_test_v2(uint8_t con, uint8_t pin, bool state)
{
return 0;
}
int modalai_led_test_v2(void)
{
PX4_INFO("Running led test");
stm32_configgpio(GPIO_nLED_RED);
stm32_configgpio(GPIO_nLED_GREEN);
stm32_configgpio(GPIO_nLED_BLUE);
int i = 0;
for (i = 0; i < 3; i++) {
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_RED, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_RED, true);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_GREEN, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_GREEN, true);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_BLUE, false);
usleep(1000 * 100);
stm32_gpiowrite(GPIO_nLED_BLUE, true);
}
return 0;
}
bool test_pair(uint32_t output_pin, uint32_t input_pin)
{
bool state = false;
stm32_gpiowrite(output_pin, true);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != true) {
return false;
}
usleep(1000 * 10);
stm32_gpiowrite(output_pin, false);
usleep(1000 * 10);
state = stm32_gpioread(input_pin);
if (state != false) {
return false;
}
return true;
}
int modalai_buzz_test_v2(eHW_TYPE hw_type)
{
PX4_INFO("test: buzz");
usleep(1000 * 100 * 10);
if (hw_type == eM0079) {
PX4_INFO("Using M0079 config");
} else if (hw_type == eM0087) {
PX4_INFO("Using M0087 config");
} else {
return -1;
}
if (hw_type == eM0079) {
//
//
//
PX4_INFO(">> Testing J1");
stm32_configgpio(M0079_J1_PIN_2_OUT); // 2-3
stm32_configgpio(M0079_J1_PIN_3_IN); // 3-2
stm32_configgpio(M0079_J1_PIN_4_OUT); // 4-5
stm32_configgpio(M0079_J1_PIN_5_IN); // 5-4
if (test_pair(M0079_J1_PIN_2_OUT, M0079_J1_PIN_3_IN)) {
PX4_INFO("PASS: M0079_J1_PIN_2_OUT M0079_J1_PIN_3_IN");
} else {
PX4_ERR("FAIL: M0079_J1_PIN_2_OUT M0079_J1_PIN_3_IN");
}
if (test_pair(M0079_J1_PIN_4_OUT, M0079_J1_PIN_5_IN)) {
PX4_INFO("PASS: M0079_J1_PIN_4_OUT M0079_J1_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0079_J1_PIN_4_OUT M0079_J1_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J5");
stm32_configgpio(M0079_J5_PIN_2_OUT); // 2-4
stm32_configgpio(M0079_J5_PIN_3_OUT); // 3-5
stm32_configgpio(M0079_J5_PIN_4_IN); // 4-2
stm32_configgpio(M0079_J5_PIN_5_IN); // 5-3
if (test_pair(M0079_J5_PIN_2_OUT, M0079_J5_PIN_4_IN)) {
PX4_INFO("PASS: M0079_J5_PIN_2_OUT M0079_J5_PIN_4_IN");
} else {
PX4_ERR("FAIL: M0079_J5_PIN_2_OUT M0079_J5_PIN_4_IN");
}
if (test_pair(M0079_J5_PIN_3_OUT, M0079_J5_PIN_5_IN)) {
PX4_INFO("PASS: M0079_J5_PIN_3_OUT M0079_J5_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0079_J5_PIN_3_OUT M0079_J5_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J7");
stm32_configgpio(M0079_J7_PIN_2_OUT); // 2-6
stm32_configgpio(M0079_J7_PIN_3_OUT); // 3-7
stm32_configgpio(M0079_J7_PIN_4_OUT); // 4-8
stm32_configgpio(M0079_J7_PIN_5_OUT); // 5-9
stm32_configgpio(M0079_J7_PIN_6_IN); // 6-2
stm32_configgpio(M0079_J7_PIN_7_IN); // 7-3
stm32_configgpio(M0079_J7_PIN_8_IN); // 8-4
stm32_configgpio(M0079_J7_PIN_9_IN); // 9-5
if (test_pair(M0079_J7_PIN_2_OUT, M0079_J7_PIN_6_IN)) {
PX4_INFO("PASS: M0079_J7_PIN_2_OUT M0079_J7_PIN_6_IN");
} else {
PX4_ERR("FAIL: M0079_J7_PIN_2_OUT M0079_J7_PIN_6_IN");
}
if (test_pair(M0079_J7_PIN_3_OUT, M0079_J7_PIN_7_IN)) {
PX4_INFO("PASS: M0079_J7_PIN_3_OUT M0079_J7_PIN_7_IN");
} else {
PX4_ERR("FAIL: M0079_J7_PIN_3_OUT M0079_J7_PIN_7_IN");
}
if (test_pair(M0079_J7_PIN_4_OUT, M0079_J7_PIN_8_IN)) {
PX4_INFO("PASS: M0079_J7_PIN_4_OUT M0079_J7_PIN_8_IN");
} else {
PX4_ERR("FAIL: M0079_J7_PIN_4_OUT M0079_J7_PIN_8_IN");
}
if (test_pair(M0079_J7_PIN_5_OUT, M0079_J7_PIN_9_IN)) {
PX4_INFO("PASS: M0079_J7_PIN_5_OUT M0079_J7_PIN_9_IN");
} else {
PX4_ERR("FAIL: M0079_J7_PIN_5_OUT M0079_J7_PIN_9_IN");
}
//
//
//
PX4_INFO(">> Testing J10");
stm32_configgpio(M0079_J10_PIN_2_OUT); // 2-4
stm32_configgpio(M0079_J10_PIN_3_OUT); // 3-5
stm32_configgpio(M0079_J10_PIN_4_IN); // 4-2
stm32_configgpio(M0079_J10_PIN_5_IN); // 5-3
if (test_pair(M0079_J10_PIN_2_OUT, M0079_J10_PIN_4_IN)) {
PX4_INFO("PASS: M0079_J10_PIN_2_OUT M0079_J10_PIN_4_IN");
} else {
PX4_ERR("FAIL: M0079_J10_PIN_2_OUT M0079_J10_PIN_4_IN");
}
if (test_pair(M0079_J10_PIN_3_OUT, M0079_J10_PIN_5_IN)) {
PX4_INFO("PASS: M0079_J10_PIN_3_OUT M0079_J10_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0079_J10_PIN_3_OUT M0079_J10_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J13");
stm32_configgpio(M0079_J12_PIN_2_OUT); // 2-3
stm32_configgpio(M0079_J12_PIN_3_IN); // 3-2
if (test_pair(M0079_J12_PIN_2_OUT, M0079_J12_PIN_3_IN)) {
PX4_INFO("PASS: M0079_J12_PIN_2 M0079_J12_PIN_3");
} else {
PX4_ERR("FAIL: M0079_J12_PIN_2 M0079_J12_PIN_3");
}
} else if (hw_type == eM0087) {
//
//
//
PX4_INFO(">> Testing J1");
stm32_configgpio(M0087_J1_PIN_2_IN); // 2-4
stm32_configgpio(M0087_J1_PIN_3_OUT); // 3-5
stm32_configgpio(M0087_J1_PIN_4_OUT); // 4-2
stm32_configgpio(M0087_J1_PIN_5_IN); // 5-3
if (test_pair(M0087_J1_PIN_4_OUT, M0087_J1_PIN_2_IN)) {
PX4_INFO("PASS: M0087_J1_PIN_4_OUT M0087_J1_PIN_2_IN");
} else {
PX4_ERR("FAIL: M0087_J1_PIN_4_OUT M0087_J1_PIN_2_IN");
}
if (test_pair(M0087_J1_PIN_3_OUT, M0087_J1_PIN_5_IN)) {
PX4_INFO("PASS: M0087_J1_PIN_3_OUT M0087_J1_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0087_J1_PIN_3_OUT M0087_J1_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J5");
stm32_configgpio(M0087_J5_PIN_2_OUT); // 2-4
stm32_configgpio(M0087_J5_PIN_3_OUT); // 3-5
stm32_configgpio(M0087_J5_PIN_4_IN); // 4-2
stm32_configgpio(M0087_J5_PIN_5_IN); // 5-3
if (test_pair(M0087_J5_PIN_2_OUT, M0087_J5_PIN_4_IN)) {
PX4_INFO("PASS: M0087_J5_PIN_2_OUT M0087_J5_PIN_4_IN");
} else {
PX4_ERR("FAIL: M0087_J5_PIN_2_OUT M0087_J5_PIN_4_IN");
}
if (test_pair(M0087_J5_PIN_3_OUT, M0087_J5_PIN_5_IN)) {
PX4_INFO("PASS: M0087_J5_PIN_3_OUT M0087_J5_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0087_J5_PIN_3_OUT M0087_J5_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J7");
stm32_configgpio(M0087_J7_PIN_2_OUT); // 2-6
stm32_configgpio(M0087_J7_PIN_3_OUT); // 3-7
stm32_configgpio(M0087_J7_PIN_4_OUT); // 4-8
stm32_configgpio(M0087_J7_PIN_5_OUT); // 5-9
stm32_configgpio(M0087_J7_PIN_6_IN); // 6-2
stm32_configgpio(M0087_J7_PIN_7_IN); // 7-3
stm32_configgpio(M0087_J7_PIN_8_IN); // 8-4
stm32_configgpio(M0087_J7_PIN_9_IN); // 9-5
if (test_pair(M0087_J7_PIN_2_OUT, M0087_J7_PIN_6_IN)) {
PX4_INFO("PASS: M0087_J7_PIN_2_OUT M0087_J7_PIN_6_IN");
} else {
PX4_ERR("FAIL: M0087_J7_PIN_2_OUT M0087_J7_PIN_6_IN");
}
if (test_pair(M0087_J7_PIN_3_OUT, M0087_J7_PIN_7_IN)) {
PX4_INFO("PASS: M0087_J7_PIN_3_OUT M0087_J7_PIN_7_IN");
} else {
PX4_ERR("FAIL: M0087_J7_PIN_3_OUT M0087_J7_PIN_7_IN");
}
if (test_pair(M0087_J7_PIN_4_OUT, M0087_J7_PIN_8_IN)) {
PX4_INFO("PASS: M0087_J7_PIN_4_OUT M0087_J7_PIN_8_IN");
} else {
PX4_ERR("FAIL: M0087_J7_PIN_4_OUT M0087_J7_PIN_8_IN");
}
if (test_pair(M0087_J7_PIN_5_OUT, M0087_J7_PIN_9_IN)) {
PX4_INFO("PASS: M0087_J7_PIN_5_OUT M0087_J7_PIN_9_IN");
} else {
PX4_ERR("FAIL: M0087_J7_PIN_5_OUT M0087_J7_PIN_9_IN");
}
//
//
//
PX4_INFO(">> Testing J10");
stm32_configgpio(M0087_J10_PIN_2_OUT); // 2-4
stm32_configgpio(M0087_J10_PIN_3_OUT); // 3-5
stm32_configgpio(M0087_J10_PIN_4_IN); // 4-2
stm32_configgpio(M0087_J10_PIN_5_IN); // 5-3
if (test_pair(M0087_J10_PIN_2_OUT, M0087_J10_PIN_4_IN)) {
PX4_INFO("PASS: M0087_J10_PIN_2_OUT M0087_J10_PIN_4_IN");
} else {
PX4_ERR("FAIL: M0087_J10_PIN_2_OUT M0087_J10_PIN_4_IN");
}
if (test_pair(M0087_J10_PIN_3_OUT, M0087_J10_PIN_5_IN)) {
PX4_INFO("PASS: M0087_J10_PIN_3_OUT M0087_J10_PIN_5_IN");
} else {
PX4_ERR("FAIL: M0087_J10_PIN_3_OUT M0087_J10_PIN_5_IN");
}
//
//
//
PX4_INFO(">> Testing J12");
stm32_configgpio(M0087_J12_PIN_2_OUT); // 2-3
stm32_configgpio(M0087_J12_PIN_3_IN); // 3-2
if (test_pair(M0087_J12_PIN_2_OUT, M0087_J12_PIN_3_IN)) {
PX4_INFO("PASS: M0087_J12_PIN_2_OUT M0087_J12_PIN_3_IN");
} else {
PX4_ERR("FAIL: M0087_J12_PIN_2_OUT M0087_J12_PIN_3_IN");
}
//
//
//
PX4_INFO(">> Testing J14");
stm32_configgpio(M0087_J14_PIN_2_OUT);
stm32_configgpio(M0087_J14_PIN_3_OUT);
stm32_configgpio(M0087_J14_PIN_4_OUT);
stm32_configgpio(M0087_J14_PIN_5_OUT);
stm32_configgpio(M0087_J14_PIN_6_OUT);
stm32_configgpio(M0087_J14_PIN_7_IN);
stm32_configgpio(M0087_J14_PIN_8_IN);
stm32_configgpio(M0087_J14_PIN_9_IN);
stm32_configgpio(M0087_J14_PIN_10_IN);
stm32_configgpio(M0087_J14_PIN_11_IN);
if (test_pair(M0087_J14_PIN_2_OUT, M0087_J14_PIN_7_IN)) {
PX4_INFO("PASS: M0087_J14_PIN_2_OUT M0087_J14_PIN_7_IN");
} else {
PX4_ERR("FAIL: M0087_J14_PIN_2_OUT M0087_J14_PIN_7_IN");
}
if (test_pair(M0087_J14_PIN_3_OUT, M0087_J14_PIN_8_IN)) {
PX4_INFO("PASS: M0087_J14_PIN_3_OUT M0087_J14_PIN_8_IN");
} else {
PX4_ERR("FAIL: M0087_J14_PIN_3_OUT M0087_J14_PIN_8_IN");
}
if (test_pair(M0087_J14_PIN_4_OUT, M0087_J14_PIN_9_IN)) {
PX4_INFO("PASS: M0087_J14_PIN_4_OUT M0087_J14_PIN_9_IN");
} else {
PX4_ERR("FAIL: M0087_J14_PIN_4_OUT M0087_J14_PIN_9_IN");
}
if (test_pair(M0087_J14_PIN_5_OUT, M0087_J14_PIN_10_IN)) {
PX4_INFO("PASS: M0087_J14_PIN_5_OUT M0087_J14_PIN_10_IN");
} else {
PX4_ERR("FAIL: M0087_J14_PIN_5_OUT M0087_J14_PIN_10_IN");
}
if (test_pair(M0087_J14_PIN_6_OUT, M0087_J14_PIN_11_IN)) {
PX4_INFO("PASS: M0087_J14_PIN_6_OUT M0087_J14_PIN_11_IN");
} else {
PX4_ERR("FAIL: M0087_J14_PIN_6_OUT M0087_J14_PIN_11_IN");
}
}
return 0;
}
int modalai_hw_detect_v2(eHW_TYPE hw_type)
{
int result = -1;
if (hw_type == eM0079) {
PX4_INFO("V230 - M0079");
result = 0;
} else if (hw_type == eM0087) {
PX4_INFO("V230 - M0087");
result = 0;
} else {
PX4_ERR("Unknown hardware");
}
return result;
}
#endif //CONFIG_ARCH_CHIP_STM32H753II
@@ -0,0 +1,183 @@
#ifndef MODALAI_FC_V2_H_
#define MODALAI_FC_V2_H_
typedef enum {
eHwUnknown = -1,
eHwNone = 0,
eM0079, //FCv2
eM0087 //FCv2 Pro
} eHW_TYPE;
#define _MK_GPIO_INPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_INPUT|GPIO_PULLUP))
#define _MK_GPIO_OUTPUT(def) (((def) & (GPIO_PORT_MASK | GPIO_PIN_MASK)) | (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR))
/* M0079 Pins */
//
// TELEM1
// M0079- J1
// PF6 PIN2 - out
// PE8 PIN3 - in
// PF8 PIN4 - out
// PE10 PIN4 - in
//
#define M0079_J1_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTF|GPIO_PIN6)
#define M0079_J1_PIN_3_IN _MK_GPIO_INPUT(GPIO_PORTE|GPIO_PIN8)
#define M0079_J1_PIN_4_OUT _MK_GPIO_OUTPUT(GPIO_PORTF|GPIO_PIN8)
#define M0079_J1_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTE|GPIO_PIN10)
//
// TELEM2
// M0079- J5
// PC12 PIN2 - out
// PD2 PIN3 - out
// PC9 PIN4 - in
// PC8 PIN4 - in
//
#define M0079_J5_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTC|GPIO_PIN12)
#define M0079_J5_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTD|GPIO_PIN2)
#define M0079_J5_PIN_4_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN9)
#define M0079_J5_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN8)
//
// PWM Output
// M0079- J7
// PI0 PIN2 - out
// PH12 PIN3 - out
// PH11 PIN4 - out
// PH10 PIN5 - out
//
// PD13 PIN6 - in
// PD14 PIN7 - in
// PH6 PIN8 - in
// PH9 PIN9 - in
//
#define M0079_J7_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTI|GPIO_PIN0)
#define M0079_J7_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN12)
#define M0079_J7_PIN_4_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN11)
#define M0079_J7_PIN_5_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN10)
#define M0079_J7_PIN_6_IN _MK_GPIO_INPUT(GPIO_PORTD|GPIO_PIN13)
#define M0079_J7_PIN_7_IN _MK_GPIO_INPUT(GPIO_PORTD|GPIO_PIN14)
#define M0079_J7_PIN_8_IN _MK_GPIO_INPUT(GPIO_PORTH|GPIO_PIN6)
#define M0079_J7_PIN_9_IN _MK_GPIO_INPUT(GPIO_PORTH|GPIO_PIN9)
//
// GPS/Mag
// M0079- J10
// PB6 PIN2 - out
// PB7 PIN3 - out
// PB8 PIN4 - in
// PB9 PIN4 - in
//
#define M0079_J10_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTB|GPIO_PIN6)
#define M0079_J10_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTB|GPIO_PIN7)
#define M0079_J10_PIN_4_IN _MK_GPIO_INPUT(GPIO_PORTB|GPIO_PIN8)
#define M0079_J10_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTB|GPIO_PIN9)
//
// Spektrum RC Input Connector
// M0079- J12
// PC6 PIN2 - out
// PC7 PIN3 - in
//
#define M0079_J12_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTC|GPIO_PIN6)
#define M0079_J12_PIN_3_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN7)
/* M0087 Pins */
//
// TELEM1
// M0087- J1
// PF6 PIN2 - in
// PE8 PIN3 - out
// PF8 PIN4 - out
// PE10 PIN5 - in
//
#define M0087_J1_PIN_2_IN _MK_GPIO_INPUT(GPIO_PORTF|GPIO_PIN6)
#define M0087_J1_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTE|GPIO_PIN8)
#define M0087_J1_PIN_4_OUT _MK_GPIO_OUTPUT(GPIO_PORTF|GPIO_PIN8)
#define M0087_J1_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTE|GPIO_PIN10)
//
// TELEM2
// M0087- J5
// PC12 PIN2 - out
// PD2 PIN3 - out
// PC9 PIN4 - in
// PC8 PIN5 - in
//
#define M0087_J5_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTC|GPIO_PIN12)
#define M0087_J5_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTD|GPIO_PIN2)
#define M0087_J5_PIN_4_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN9)
#define M0087_J5_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN8)
//
// PWM Output
// M0087- J7
// PI0 PIN2 - out
// PH12 PIN3 - out
// PH11 PIN4 - out
// PH10 PIN5 - out
//
// PD13 PIN6 - in
// PD14 PIN7 - in
// PH6 PIN8 - in
// PH9 PIN9 - in
//
#define M0087_J7_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTI|GPIO_PIN0)
#define M0087_J7_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN12)
#define M0087_J7_PIN_4_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN11)
#define M0087_J7_PIN_5_OUT _MK_GPIO_OUTPUT(GPIO_PORTH|GPIO_PIN10)
#define M0087_J7_PIN_6_IN _MK_GPIO_INPUT(GPIO_PORTD|GPIO_PIN13)
#define M0087_J7_PIN_7_IN _MK_GPIO_INPUT(GPIO_PORTD|GPIO_PIN14)
#define M0087_J7_PIN_8_IN _MK_GPIO_INPUT(GPIO_PORTH|GPIO_PIN6)
#define M0087_J7_PIN_9_IN _MK_GPIO_INPUT(GPIO_PORTH|GPIO_PIN9)
//
// GPS/Mag
// M0087- J10
// PB6 PIN2 - out
// PB7 PIN3 - out
// PB8 PIN4 - in
// PB9 PIN5 - in
//
#define M0087_J10_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTB|GPIO_PIN6)
#define M0087_J10_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTB|GPIO_PIN7)
#define M0087_J10_PIN_4_IN _MK_GPIO_INPUT(GPIO_PORTB|GPIO_PIN8)
#define M0087_J10_PIN_5_IN _MK_GPIO_INPUT(GPIO_PORTB|GPIO_PIN9)
//
// Spektrum RC Input Connector
// M0087- J12
// PC6 PIN2 - out
// PC7 PIN3 - in
//
#define M0087_J12_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTC|GPIO_PIN6)
#define M0087_J12_PIN_3_IN _MK_GPIO_INPUT(GPIO_PORTC|GPIO_PIN7)
//
// AVIATOR SPI/I2C/ADC EXPANSION CONNECTOR
// M0087- J14
// PC6 PIN2 - out
// PC7 PIN3 - in
//
#define M0087_J14_PIN_2_OUT _MK_GPIO_OUTPUT(GPIO_PORTA|GPIO_PIN6)
#define M0087_J14_PIN_3_OUT _MK_GPIO_OUTPUT(GPIO_PORTG|GPIO_PIN14)
#define M0087_J14_PIN_4_OUT _MK_GPIO_OUTPUT(GPIO_PORTB|GPIO_PIN3)
#define M0087_J14_PIN_5_OUT _MK_GPIO_OUTPUT(GPIO_PORTI|GPIO_PIN10)
#define M0087_J14_PIN_6_OUT _MK_GPIO_OUTPUT(GPIO_PORTF|GPIO_PIN0)
#define M0087_J14_PIN_7_IN _MK_GPIO_INPUT(GPIO_PORTF|GPIO_PIN1)
#define M0087_J14_PIN_8_IN _MK_GPIO_INPUT(GPIO_PORTF|GPIO_PIN12)
#define M0087_J14_PIN_9_IN _MK_GPIO_INPUT(GPIO_PORTB|GPIO_PIN0)
#define M0087_J14_PIN_10_IN _MK_GPIO_INPUT(GPIO_PORTA|GPIO_PIN0)
#define M0087_J14_PIN_11_IN _MK_GPIO_INPUT(GPIO_PORTA|GPIO_PIN4)
void modalai_print_usage_v2(void);
void modalai_print_usage_con_gpio_test_v2(void);
int modalai_con_gpio_test_v2(uint8_t con, uint8_t pin, bool state);
int modalai_led_test_v2(void);
int modalai_buzz_test_v2(eHW_TYPE type);
int modalai_hw_detect_v2(eHW_TYPE type);
#endif //MODALAI_FC_V2_H_
-5
View File
@@ -1,5 +0,0 @@
CONFIG_BOARD_TOOLCHAIN="arm-none-eabi"
CONFIG_BOARD_ARCHITECTURE="cortex-m3"
CONFIG_BOARD_ROMFSROOT=""
CONFIG_BOARD_CONSTRAINED_FLASH=y
CONFIG_MODULES_PX4IOFIRMWARE=y
@@ -1,13 +0,0 @@
{
"board_id": 41777,
"magic": "PX4FWv2",
"description": "Firmware for the voxl2-io board",
"image": "",
"build_time": 0,
"summary": "voxl2io",
"version": "2.0",
"image_size": 0,
"image_maxsize": 61440,
"git_identity": "",
"board_revision": 0
}
@@ -1,141 +0,0 @@
/************************************************************************************
* nuttx-configs/px4io/include/board.h
* include/arch/board/board.h
*
* Copyright (C) 2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
* Copyright (C) 2012 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
************************************************************************************/
#ifndef __ARCH_BOARD_BOARD_H
#define __ARCH_BOARD_BOARD_H
/************************************************************************************
* Included Files
************************************************************************************/
#include <nuttx/config.h>
#ifndef __ASSEMBLY__
# include <stdint.h>
#endif
#include <stm32.h>
/************************************************************************************
* Definitions
************************************************************************************/
/* Clocking *************************************************************************/
/* On-board crystal frequency is 24MHz (HSE) */
#define STM32_BOARD_XTAL 16000000ul
/* Use the HSE output as the system clock */
#define STM32_SYSCLK_SW RCC_CFGR_SW_HSE
#define STM32_SYSCLK_SWS RCC_CFGR_SWS_HSE
#define STM32_SYSCLK_FREQUENCY STM32_BOARD_XTAL
/* AHB clock (HCLK) is SYSCLK (24MHz) */
#define STM32_RCC_CFGR_HPRE RCC_CFGR_HPRE_SYSCLK
#define STM32_HCLK_FREQUENCY STM32_SYSCLK_FREQUENCY
#define STM32_BOARD_HCLK STM32_HCLK_FREQUENCY /* same as above, to satisfy compiler */
/* APB2 clock (PCLK2) is HCLK (24MHz) */
#define STM32_RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_HCLK
#define STM32_PCLK2_FREQUENCY STM32_HCLK_FREQUENCY
#define STM32_APB2_CLKIN (STM32_PCLK2_FREQUENCY) /* Timers 2-4 */
/* APB2 timer 1 will receive PCLK2. */
#define STM32_APB2_TIM1_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB2_TIM15_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB2_TIM16_CLKIN (STM32_PCLK2_FREQUENCY)
#define STM32_APB2_TIM17_CLKIN (STM32_PCLK2_FREQUENCY)
/* APB1 clock (PCLK1) is HCLK (24MHz) */
#define STM32_RCC_CFGR_PPRE1 RCC_CFGR_PPRE1_HCLK
#define STM32_PCLK1_FREQUENCY (STM32_HCLK_FREQUENCY)
/* All timers run off PCLK */
#define STM32_APB1_TIM2_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM3_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM4_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM5_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM6_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM7_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM12_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM13_CLKIN (STM32_PCLK1_FREQUENCY)
#define STM32_APB1_TIM14_CLKIN (STM32_PCLK1_FREQUENCY)
/* Timer Frequencies, if APBx is set to 1, frequency is same to APBx
* otherwise frequency is 2xAPBx.
* Note: TIM1, 15-17 are on APB2, others on APB1
*/
#define BOARD_TIM1_FREQUENCY STM32_APB2_TIM1_CLKIN
#define BOARD_TIM2_FREQUENCY STM32_APB1_TIM2_CLKIN
#define BOARD_TIM3_FREQUENCY STM32_APB1_TIM3_CLKIN
#define BOARD_TIM4_FREQUENCY STM32_APB1_TIM4_CLKIN
#define BOARD_TIM5_FREQUENCY STM32_APB1_TIM5_CLKIN
#define BOARD_TIM6_FREQUENCY STM32_APB1_TIM6_CLKIN
#define BOARD_TIM7_FREQUENCY STM32_APB1_TIM7_CLKIN
#define BOARD_TIM12_FREQUENCY STM32_APB1_TIM12_CLKIN
#define BOARD_TIM13_FREQUENCY STM32_APB1_TIM13_CLKIN
#define BOARD_TIM14_FREQUENCY STM32_APB1_TIM14_CLKIN
#define BOARD_TIM15_FREQUENCY STM32_APB2_TIM15_CLKIN
#define BOARD_TIM16_FREQUENCY STM32_APB2_TIM16_CLKIN
#define BOARD_TIM17_FREQUENCY STM32_APB2_TIM17_CLKIN
/*
* Some of the USART pins are not available; override the GPIO
* definitions with an invalid pin configuration.
*/
#undef GPIO_USART2_CTS
#define GPIO_USART2_CTS 0xffffffff
#undef GPIO_USART2_RTS
#define GPIO_USART2_RTS 0xffffffff
#undef GPIO_USART2_CK
#define GPIO_USART2_CK 0xffffffff
#undef GPIO_USART3_CK
#define GPIO_USART3_CK 0xffffffff
#undef GPIO_USART3_CTS
#define GPIO_USART3_CTS 0xffffffff
#undef GPIO_USART3_RTS
#define GPIO_USART3_RTS 0xffffffff
#endif /* __ARCH_BOARD_BOARD_H */
@@ -1,61 +0,0 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_DEV_NULL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD_CUSTOM=y
CONFIG_ARCH_BOARD_CUSTOM_DIR="../../../../boards/modalai/voxl2-io/nuttx-config"
CONFIG_ARCH_BOARD_CUSTOM_DIR_RELPATH=y
CONFIG_ARCH_BOARD_CUSTOM_NAME="px4"
CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32=y
CONFIG_ARCH_CHIP_STM32F100C8=y
CONFIG_ARMV7M_USEBASEPRI=y
CONFIG_ARM_MPU_EARLY_RESET=y
CONFIG_BOARD_LOOPSPERMSEC=2000
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DEFAULT_SMALL=y
CONFIG_DISABLE_MOUNTPOINT=y
CONFIG_FDCLONE_DISABLE=y
CONFIG_FDCLONE_STDIO=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=316
CONFIG_INIT_ENTRYPOINT="user_start"
CONFIG_INIT_STACKSIZE=1100
CONFIG_MM_FILL_ALLOCATIONS=y
CONFIG_MM_SMALL=y
CONFIG_NAME_MAX=12
CONFIG_PREALLOC_TIMERS=0
CONFIG_RAM_SIZE=8192
CONFIG_RAM_START=0x20000000
CONFIG_RAW_BINARY=y
CONFIG_SERIAL_TERMIOS=y
CONFIG_STACK_COLORATION=y
CONFIG_START_DAY=30
CONFIG_START_MONTH=11
CONFIG_STDIO_DISABLE_BUFFERING=y
CONFIG_STM32_ADC1=y
CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG=y
CONFIG_STM32_DMA1=y
CONFIG_STM32_JTAG_SW_ENABLE=y
CONFIG_STM32_USART1=y
CONFIG_STM32_USART2=y
CONFIG_STM32_USART3=y
CONFIG_STM32_USART_SINGLEWIRE=y
CONFIG_TASK_NAME_SIZE=0
CONFIG_USART1_RXBUFSIZE=64
CONFIG_USART1_RXDMA=y
CONFIG_USART1_SERIAL_CONSOLE=y
CONFIG_USART1_TXBUFSIZE=32
CONFIG_USART2_RXBUFSIZE=64
CONFIG_USART2_TXBUFSIZE=64
CONFIG_USART3_RXBUFSIZE=64
CONFIG_USART3_RXDMA=y
CONFIG_USART3_TXBUFSIZE=64
CONFIG_USEC_PER_TICK=1000
@@ -1,131 +0,0 @@
/****************************************************************************
* configs/px4io-v2/scripts/ld.script
*
* Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/* The STM32F100C8 has 64Kb of FLASH beginning at address 0x0800:0000 and
* 8Kb of SRAM beginning at address 0x2000:0000. When booting from FLASH,
* FLASH memory is aliased to address 0x0000:0000 where the code expects to
* begin execution by jumping to the entry point in the 0x0800:0000 address
* range.
*/
MEMORY
{
flash (rx) : ORIGIN = 0x08001000, LENGTH = 60K
sram (rwx) : ORIGIN = 0x20000000, LENGTH = 8K
}
OUTPUT_ARCH(arm)
ENTRY(__start) /* treat __start as the anchor for dead code stripping */
EXTERN(_vectors) /* force the vectors to be included in the output */
/*
* Ensure that abort() is present in the final object. The exception handling
* code pulled in by libgcc.a requires it (and that code cannot be easily avoided).
*/
EXTERN(abort)
SECTIONS
{
.text : {
_stext = ABSOLUTE(.);
*(.vectors)
*(.text .text.*)
*(.fixup)
*(.gnu.warning)
*(.rodata .rodata.*)
*(.gnu.linkonce.t.*)
*(.glue_7)
*(.glue_7t)
*(.got)
*(.gcc_except_table)
*(.gnu.linkonce.r.*)
_etext = ABSOLUTE(.);
} > flash
/*
* Init functions (static constructors and the like)
*/
.init_section : {
_sinit = ABSOLUTE(.);
KEEP(*(.init_array .init_array.*))
_einit = ABSOLUTE(.);
} > flash
.ARM.extab : {
*(.ARM.extab*)
} > flash
__exidx_start = ABSOLUTE(.);
.ARM.exidx : {
*(.ARM.exidx*)
} > flash
__exidx_end = ABSOLUTE(.);
_eronly = ABSOLUTE(.);
/* The STM32F100CB has 8Kb of SRAM beginning at the following address */
.data : {
_sdata = ABSOLUTE(.);
*(.data .data.*)
*(.gnu.linkonce.d.*)
CONSTRUCTORS
_edata = ABSOLUTE(.);
. = ALIGN(4);
} > sram AT > flash
.bss : {
_sbss = ABSOLUTE(.);
*(.bss .bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
. = ALIGN(4);
_ebss = ABSOLUTE(.);
} > sram
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_info 0 : { *(.debug_info) }
.debug_line 0 : { *(.debug_line) }
.debug_pubnames 0 : { *(.debug_pubnames) }
.debug_aranges 0 : { *(.debug_aranges) }
}
-157
View File
@@ -1,157 +0,0 @@
/****************************************************************************
*
* Copyright (c) 2013, 2014 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/**
* @file board_config.h
*
* PX4IOV2 internal definitions
*/
#pragma once
/******************************************************************************
* Included Files
******************************************************************************/
#include <px4_platform_common/px4_config.h>
#include <nuttx/compiler.h>
#include <stdint.h>
/******************************************************************************
* Definitions
******************************************************************************/
/* Configuration **************************************************************/
/******************************************************************************
* Serial
******************************************************************************/
#define PX4FMU_SERIAL_BASE STM32_USART2_BASE
#define PX4FMU_SERIAL_VECTOR STM32_IRQ_USART2
#define PX4FMU_SERIAL_TX_GPIO GPIO_USART2_TX
#define PX4FMU_SERIAL_RX_GPIO GPIO_USART2_RX
#define PX4FMU_SERIAL_TX_DMA DMACHAN_USART2_TX
#define PX4FMU_SERIAL_RX_DMA DMACHAN_USART2_RX
#define PX4FMU_SERIAL_CLOCK STM32_PCLK1_FREQUENCY
#define PX4FMU_SERIAL_BITRATE 921600
/******************************************************************************
* GPIOS
******************************************************************************/
/* LEDS **********************************************************************/
#define GPIO_LED_BLUE (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN14)
#define GPIO_LED_AMBER (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN15)
#define GPIO_LED_SAFETY (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN13)
#define LED_BLUE(on_true) stm32_gpiowrite(GPIO_LED_BLUE, !(on_true))
#define LED_AMBER(on_true) stm32_gpiowrite(GPIO_LED_AMBER, !(on_true))
#define LED_SAFETY(on_true) stm32_gpiowrite(GPIO_LED_SAFETY, !(on_true))
//#define GPIO_LED4 (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN11)
//#define GPIO_HEATER_OFF 0 // (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN14)
#define GPIO_PC14 (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN14)
#define GPIO_PC15 (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN15)
#define GPIO_SENSE_PC14_DN (GPIO_INPUT|GPIO_CNF_INPULLDWN|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN14)
#define GPIO_SENSE_PC15_UP (GPIO_INPUT|GPIO_CNF_INPULLUP|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN15)
# define SENSE_PH1 0b10 /* Floating pulled as set */
# define SENSE_PH2 0b01 /* Driven as tied */
#define GPIO_USART1_RX_SPEKTRUM (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN10)
/* Safety switch button *******************************************************/
/* CONNECTED TO TP8 - pulled down via SW */
#define GPIO_BTN_SAFETY (GPIO_INPUT|GPIO_CNF_INPULLDWN|GPIO_MODE_INPUT|GPIO_PORTB|GPIO_PIN5)
/* Power switch controls ******************************************************/
#define GPIO_SPEKTRUM_PWR_EN (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTC|GPIO_PIN13)
#define SPEKTRUM_POWER(_on_true) px4_arch_gpiowrite(GPIO_SPEKTRUM_PWR_EN, (_on_true))
#define SPEKTRUM_OUT(_one_true) px4_arch_gpiowrite(GPIO_USART1_RX_SPEKTRUM, (_one_true))
#define SPEKTRUM_RX_AS_UART() px4_arch_configgpio(GPIO_USART1_RX)
#define SPEKTRUM_RX_AS_GPIO_OUTPUT() px4_arch_configgpio(GPIO_USART1_RX_SPEKTRUM)
#define GPIO_SERVO_FAULT_DETECT 0 // (GPIO_INPUT|GPIO_CNF_INPULLUP|GPIO_MODE_INPUT|GPIO_PORTA|GPIO_PIN15)
/* Analog inputs **************************************************************/
/* PWM pins **************************************************************/
#define GPIO_PWM1 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN0)
#define GPIO_PWM2 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN1)
#define GPIO_PWM3 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN8)
#define GPIO_PWM4 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN9)
#define GPIO_PWM5 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN6)
#define GPIO_PWM6 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN7)
#define GPIO_PWM7 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN0)
#define GPIO_PWM8 (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN1)
#define DIRECT_PWM_OUTPUT_CHANNELS 8
#define BOARD_HAS_NO_CAPTURE
/* SBUS pins *************************************************************/
/* XXX these should be UART pins */
#define GPIO_SBUS_INPUT (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_MODE_INPUT|GPIO_PORTB|GPIO_PIN11)
#define GPIO_SBUS_OUTPUT (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTB|GPIO_PIN10)
#define GPIO_SBUS_OENABLE 0 // (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN4)
/*
* High-resolution timer
*/
#define HRT_TIMER 1 /* use timer1 for the HRT */
#define HRT_TIMER_CHANNEL 2 /* use capture/compare channel 2 */
#define HRT_PPM_CHANNEL 1 /* use capture/compare channel 1 PA8 */
#define GPIO_PPM_IN (GPIO_ALT|GPIO_CNF_INPULLUP|GPIO_PORTA|GPIO_PIN8)
/* LED definitions ******************************************************************/
/* PX4 has two LEDs that we will encode as: */
#define LED_STARTED 0 /* LED? */
#define LED_HEAPALLOCATE 1 /* LED? */
#define LED_IRQSENABLED 2 /* LED? + LED? */
#define LED_STACKCREATED 3 /* LED? */
#define LED_INIRQ 4 /* LED? + LED? */
#define LED_SIGNAL 5 /* LED? + LED? */
#define LED_ASSERTION 6 /* LED? + LED? + LED? */
#define LED_PANIC 7 /* N/C + N/C + N/C + LED? */
#define BOARD_NUM_IO_TIMERS 3
#include <px4_platform_common/board_common.h>
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -113,7 +113,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1
@@ -48,7 +48,7 @@ CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="bootloader_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_STRERROR=y
@@ -111,7 +111,7 @@ CONFIG_I2C=y
CONFIG_I2C_RESET=y
CONFIG_IDLETHREAD_STACKSIZE=750
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=2944
CONFIG_INIT_STACKSIZE=3094
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_LIBC_MAX_EXITFUNS=1

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