These are some changes that I needed to compile
most of the unsupported targets.
After this all (make list_config_targets) compile
for me except: posix_eagle_muorb, posix_sdflight_default
and qurt_eagle_legacy_driver_default.
app.h, generated from app.h_in, has unnecessary code duplication
and isn't a header file (it defines globals, static functions
and doesn't have a header guard, moreover, it has a 'using namespace
std;'). Because of this, a real headerfile that declares the stuff
defined in apps.h was missing leading to even more code duplication:
scattered forward declarations in .cpp files and an often repeated
type of std::map<std::string, px4_main_t>.
This patch moves cmake/qurt/apps.h_in to src/platforms/apps.cpp.in
(with some changes) and removes cmake/posix/apps.h_in.
Then src/platforms/apps.cpp.in is split into src/platforms/apps.cpp.in
and src/platforms/apps.h.in, splitting declarations from definitions.
A typedef is defined for the map (apps_map_type).
The main difference between cmake/posix/apps.h_in and
cmake/qurt/apps.h_in was that the first defined a global 'apps',
while qurt stores the apps in QShell. I opted to get rid of
the global variable (which are in general evil for various reasons)
and used the API of cmake/qurt/apps.h_in where a provided 'apps'
map is initialized with a call to init_app_map. Thus removing
the existing code duplication.
The firmware binary is to large to fit into the onboard memory of the Parrot
Bebop. It could be uploaded to the emmc, but for ease of use it would be nice
to have it in /usr/bin. To strip the binary seems to be the best option right now.
The pthread linker flags were changed in c6a2641 and it was questioned in #5504 if the
exception for the Bebop is necessary. It is not, so remove those lines from the cmake
file.
With this change only builds for NuttX which are very much flash size
constraint are optimized for size. All other builds (e.g. SITL,
Snapdragon, etc.) are left at the default for debugging or -O2 for the
usual use.
The px4_os_add_flags defined in cmake/posix/px4_impl_posix.cmake did
add (threading) libraries to added_exe_linker_flags, which subsequently
end up in CMAKE_EXE_LINKER_FLAGS and then have no effect because those
flags are passed to the linker before any of the object files and static
libraries.
Those libraries are already added correctly in the corresponding
src/firmware/*/CMakeLists.txt files (for qurt, nuttx AND posix).
I left in the non-library linker flag '-pthread' for the bebop board,
although it seems very weird to me that this is needed (is it?).
If that is needed then it seems weird to link manually (that is,
src/firmware/*/CMakeLists.txt) with -lpthread.
For linux/g++ -pthread is added to the CXXFLAGS as it should be:
this causes the compiler to define _REENTRANT which is needed
for (the interface of) certain libraries to become thread-safe.
Offically one also can just pass -pthread to the linker, which then
causes the right libraries to be linked, but just linking with
-lpthread -lm -lrt works too.
I ran into this while adding support for libcwd, which explicitly
complains that _REENTRANT isn't defined when trying to link with
the thread-safe version of libcwd (-lcwd_r) and then tells you
to use -pthread.
* This allows one to run 'make posix list_vmd_make_targets' and get output like
>make posix list_vmd_make_targets
[...]
-- Build files have been written to:
/usr/src/debian/px4/Firmware/Firmware.git/build_posix_sitl_default
PX4 CONFIG: /usr/src/debian/px4/Firmware/Firmware.git/build_posix_sitl_default
Scanning dependencies of target list_vmd_make_targets
[100%] List of acceptable 'posix_sitl_default' <viewer_model_debugger> targets:
none
none_iris
none_iris_opt_flow
none_tailsitter
[...]
replay_solo_valgrind
replay_typhoon_h480_valgrind
[100%] Built target list_vmd_make_targets
Or, run 'make list_vmd_make_targets' from the build_posix_* directory.
* This adds the list_cmake_targets make target to print all
cmake targets that one can match with PX4_NO_OPTIMIZATION.
PX4_NO_OPTIMIZATION is ignored (do optimization as normal)
when the CONFIG isn't posix_sitl_*.
* Add comment in Makefile on how/where to find all targets.
This allows one to set a semi-colon separated list of regular
expressions in the environment variable PX4_NO_OPTIMIZATION
to control which (cmake generated) targets should be compiled
without optimization.
Suppressing optimization can be necessary for debugging in
a debugger, especially when trying to step through the code
or needing to print variables that otherwise are optimized out.
EXAMPLE
export PX4_NO_OPTIMIZATION="px4;^modules__uORB;^modules__systemlib$"
will result in the following messages during cmake configuration:
[...]
-- Disabling optimization for target 'platforms__posix__px4_layer'
because it matches the regexp 'px4' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__systemlib' because it
matches the regexp '^modules__systemlib$' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__uORB' because it matches
the regexp '^modules__uORB' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'examples__px4_simple_app' because
it matches the regexp 'px4' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'modules__uORB__uORB_tests' because
it matches the regexp '^modules__uORB' in env var PX4_NO_OPTIMIZATION
-- Disabling optimization for target 'px4' because it matches the regexp
'px4' in env var PX4_NO_OPTIMIZATION
Note that a list of all (currently used) target names can be printed
with the following command line from within the required build directory:
find . -wholename '*/CMakeFiles/*.dir/flags.make' | xargs dirname | xargs basename -a | sort -u | sed -e 's/.dir$//'
While the config_sitl_rcS_dir is used more extensively (and actually
only depending on the base cmake target), the variables
config_sitl_viewer and config_sitl_debugger are just used to be
passed on for the run_config target; config_sitl_debugger is even
*always* 'disable'. Hence, they don't really need to be cached
(INTERNAL or not). Before this patch FILEPATH was used instead
of INTERNAL, but I doubt very much that that was intended. That
only makes sense when cmake-gui would be used and then would pop-up
a file browser to let the user pick a file (while really they
need to pick a directory, so it's wrong either way).
The ONLY reason caching would be used is when a developer edits
the build_posix_sitl_*/CMakeCache.txt files, changes these values
and then runs cmake in the build directory again, now overriding
the values intended here. Nevertheless, I left in the caching.
The main change in this commit (that theoretically has no real effect)
is that I removed the duplicated maintenance of
posix_sitl_broadcast.cmake. When that file was added, it was an
exact copy of posix_sitl_default.cmake and is since not always
maintained to remain the same. I don't think that difference is
in anyway relevant for the broadcasting part though.
Note that I think that something like that also holds for the
posix_sitl_replay.cmake; it would be a lot better - maintenance-wise
- when it was just derived from (or the same as) posix_sitl_default,
I think.
Over time I made a few changes unrelated to what I'm really working on.
These changes are hereby committed first. The bug fixes are related to
what I'm doing in that I need them to be fixed for future commits.
Tools/sitl_run.sh: rename label to rcS_dir and fix usage help.
cmake/common/px4_base.cmake: Remove the check on OUT_UNPARSED_ARGUMENTS,
and a few typos and indentation issues.
cmake/configs/posix_sitl_replay.cmake: Set the correct variable
(config_sitl_rcS_dir) to the correct directory.
cmake/nuttx/px4_impl_nuttx.cmake: typos and indentation issues,
and removal of a redundant FORCE (INTERNAL implies FORCE).
cmake/posix/px4_impl_posix.cmake: typos and indentation issues.
cmake/qurt/px4_impl_qurt.cmake: typos and indentation issues.
src/modules/mavlink/mavlink_ftp.cpp : possible strict-aliasing breakage.
NOTES
The second argument passed to sitl_run.sh is the value of
config_sitl_rcS_dir. This fact is missing from the usage help.
I renamed 'label' to 'rcS_dir' to better reflect this.
Also, for the 'replay' config the wrong variable was set causing
the call to sitl_run.sh to skip an argument and fail (ie the
debugger was passed as rcS_dir and so on).
The check on OUT_UNPARSED_ARGUMENTS in px4_parse_function_args
basically causes every passed IN variable to be REQUIRED and is
therefore a bug. The test for the presence of the REQUIRED arguments
follows directly after and is sufficient for this job. This bug went
unnoticed because currently every argument to OPTIONS, ONE_VALUE,
and MULTI_VALUE is actually passed to the function(s) calling
px4_parse_function_args (them being REQUIRED or not).
The changes in mavlink_ftp.cpp are to avoid a possible aliasing bug
and (mostly) to avoid the compiler warning/error: dereferencing type-
punned pointer will break strict-aliasing rules [-Werror=strict-aliasing].
MavLink spec implementation
implemented vehicle_roi topic
rename old gimbal to rc_gimbal
little changes
corrected RC Gimbal group
Starting ROI implementation in commander
implementation done, needs to be tested
uhm..
add todo
Change to float32 for x,y and z
remove mission topic again, not needed
change roi coordinates to lat, lon and alt
adjust to float64
starting mount implementation
correcting small mistakes, compiles now
add todos
further progress
implementing parameters
adjust default parameters
started implementation of mavlink
fix typo
change to lat, lon and alt
fix typo :D
change to double (to represent float64)
add global_position_
add mount topic
commander mount implementation done
cleanup
almost finished
little fix
codestyle fixes
leave pitch at 0 degrees
added pitch calculation
codestyle changes
Undo vehicle_mount, react to updated parameters, parsing of CMD_DO_MOUNT_* in mount.cpp
start implementing mode override
forgot a semikolon.
add debug
Finish implementation of mount override and manual control.
fix codestyle
correct cleanup
rename to vmount
works now
fix rebase error
fix polling
refactoring and custom airframe for gimbal
couple changes
remove warnx
almost done
finally
What is going on?
change back to actuator_controls_2
working
bump parameter version number and some clarification
fix submodules
Fix build error
Capitalization mistake for headers
Non-Mac compiler issue
Baudrate for crazyflie nrf and fix code style
Save space
Cleanup mpu9250 driver
Working crazyflie firmware build
* Console on USART3
* Could not disable building PX4IO firmware, currently commented out
Don't build PX4IO firmware if the board doesn't ask for it
Added crazyflie motor driver
Fixed wrong register
CLK_SEL is in PWR_MGMT_1
Initial I2C/SPI MPU9250 device
* Tested with I2C
* Need to add error checking
* Intermittent crash on stop call
Working ak8963 mag driver
Functional lps25h driver. Work in progress.
Works well enough to probe and allow sensors task to start.
Added serial port test module
HACK! Get sensors module working
Set crazyflie PWM range
Extend baudrate for Crazyflie's NRF radio
Added dummy tone alarm to allow for init
Added autostart script for Crazyflie
this lets a user select what msgs should be compiled for his project
Care must be taken though, to compile all orb_topcis that are required by the Rest of the Code.
Otherwise many compile errors will occur.
This commits adds by default the ./msg include path to reference to other msgs.
if an exisiting msg is used in another msg.
* Low impact changes from path_cleanup branch.
This is a step towards minimizing the diff with path_cleanup branch.
* Update ecl.
* Revert matrix update.
* Revert ecl and matrix.
* Update sitl gazebo.
* Revert sitl_gazebo and matrix changes.
The reason for this change is that RPi2 and RPi3 are compatible, and
hopefully all differences coming up can be resolved without ifdefs but
at runtime.
__STDC_FORMAT_MACROS changes the behavior of inttypes.h to allow
defining format macros for printf-like functions. It needs to be defined
before any include is done, otherwise due to include chains and header
guards it may not take effect.
Instead of having to define it everywhere it is used, move the define to the
build system. Also update ecl and DriverFramework submodules to deal with the
changed definitions.
This adds a new module that does:
- read an parse an ULog file, given via ENV variable 'replay'
- apply all parameters from the log file
- read and apply user-defined override parameters from a file
- publish all messages in 'real-time' from the log file and add a constant
offset to the timestamp to match the system time.
- apply changed parameters in the log (which are not overridden)
The inc and lib directories were renamed to incs and libs.
This requires an updated cmake_hexagon and come changes to qurt paths in
PX4.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The name uart_esc was initially taken by Qualcomm's UART ESC driver but
then got changed into the current mavlink ESC/RC helper. Since the
uart_esc is still around, we should prevent the names clashing.
GCC assumes that operator new never returns null, but throws an exception
instead. This is defined by the C++ standard, and thus ok. But we disable
exceptions with -fno-exceptions, so we break this assumption. GCC then goes
ahead and removes some of our nullptr checks. This flag removes the
assumption.
This adds ~1.4kB to the binary size of the px4fmu-v4 target.
* Removed release configs for eagle
These configs are only built for internal testing
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Removed release build for eagle from Makefile
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Use DriverFramework as a PX4 module
Targets wanting to use DriverFramework must add
lib/DriverFramework/framework
to their config file.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Removed spurious code
No need to add if check before for loop
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Added DriverFramework to NuttX configs
Added lib/DriverFramework/firmware to nuttx configs
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Updated src/lib/DriverFramework
* Removed DF_TARGET and __DF_${OS} defines
These are now handled inside DriverFramework
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Updated DriverFramework
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Restored __DF_${OS}
The include files in DriverFramwork need to know the target OS.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* Qflight: add intersil sensor driver
* df_isl_wrapper: change driver lib name to isl
* posix-config: add df_isl_wrapper start command to eagle startup
* isl_wrapper: cleanup isl wrapper
* isl: remove unused option -R
* isl: change the driver name to isl29501
* DriverFramework: updated submodule again
This is to get the latest `make fix-style` changes.
* df_isl29501_wrapper: rename wrapper all the way
- Note that the simulator still uses gpssim by default
- now the gps module can be used in the SITL. this makes it possible to test
the real gps HW under POSIX
additional steps needed to use it:
- in the rcS_jmavsim_iris, make sure to start the gps instead of gpssim:
gps start -d /dev/ttyACM0 -s
- disable the mavlink serial connection in simulator_mavlink.cpp,
openUart(PIXHAWK_DEVICE, 115200);
- this also fixes a memory leak in the gps module
This adds a a target `make eagle_default` to build both the POSIX and
the QURT side in one command. Also, it adds an upload target for both to
push the files over adb to the device. This doesn't just push the
executables and lib files, but also the startup config files.
The Toolchain-arm-linux-gnueabihf.cmake is currently used for
the SnapdragonFlight Apps processor.
The sysroot is required for cross building for Ubuntu 14.04 armhf.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The _skel lib created for the qurt build was failaing because
the loader could not find the un-exported global symbol because
default visibility was set to hidden. The define is used to
explicitly export the QAIC function needed bu the loader.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The Toolchain-arm-linux-gnueabihf.cmake is currently used for
the SnapdragonFlight Apps processor.
The sysroot is required for cross building for Ubuntu 14.04 armhf.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Nuttx now gets to link phase. But there are two unresolved symbols:
arm-none-eabi/include/c++/4.7.4/bits/basic_string.h:1128: undefined reference to `std::string::assign(char const*, unsigned int)'
arm-none-eabi/include/c++/4.7.4/bits/stl_list.h:1534: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)'
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
I am unable to get the nuttx build dependencies set up so that
it builds the export dir before it builds df_driver_framework.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The DF_TARGET cmake variable needs to be set to (linux, darwin, qurt, nuttx)
The define __DF_LINUX or __DF_QURT needs to be set.
The __DF_DARWIN target is untested
Signed-off-by: Mark Charlebois <charlebm@gmail.com>