Added DSPAL header paths to toolchain_hexagon.mk.
Made changes to build configuraion for QuRT to support HIL testing.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The POSIX and QURT platforms contain several duplicate files.
These files have been factored out into platforms/posix/work_queue.
The config files have been updated to include the
platforms/posix/work_queue module.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Changed muorb_fastrpc.cpp to px4muorb.cpp to match the name of the
library that implements the FastRPC calls.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The simulator uses this messgage to get incoming data from
jMAVSim that it publishes as sensor data that is consumed by the
sensors module.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The simulator was changed to publish the sensor data that is read
by the sensors module when the -p flag is passed.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The Eagle HW platform contains both a Krait (ARMv4hf compatible) cpu
cluster and a Hexagon DSP running QuRT.
These changes support the PX4 build for Eagle.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Most of the systemcmds tests run in the posix build. The UART tests
fail for me as I do not have a UART connected.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
GCC requires a declaration of a static inline function prior to its
definition when strict-prototypes warning is enabled.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Last fix for vdev_posix.cpp introduced a sleep from within
a HRT work item callback which blocks the HRT queue.
The code in uORBDevices_posix.cpp that handles message
throttling was commented out for posix. The code was re-enabled
and now seems to work.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Removed unused code. Reset reschedule interval for sampling when the
sampling rate is changed.
The rate is always 1000Hz as it is set to the default value.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
QuRT needs to use the builtin version of isfinite so for the qurt
build PX4_ISFINITE(x) is defined as __builtin_isfinite(x).
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
QuRT's pthread_cancel implementation is lacking, and causes px4_poll to
always wait for the maximumn timeout. A cleaner implementation is provided
that uses the HRT work queue for posix targets.
In the future the posix code should be rtefactiored so that qurt (and other)
implementations that are duplicated, use the posix implementation.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Used a do_nothing() function for px4_omit() that will satisfy the
compiler so it will not report unused variables when a debug
message is compiled out.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The gpssim code was named gps_sim vs being consistent with other
simulators (gpssim). It also used warnx and errx and had lots of
commeted out code.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
If __px4_log_level_current is unsigned then the runtime filter
comparison warns because an unsigned value can't be less than zero.
Changed typed to signed so compiler will not issue a warning.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
px4_log.c was added to px4_platform library and the library was added
to unit tests that use the log macros.
There is also a dependency on hrt_absolute_time() as well which requires
px4_platform.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added __attribute__ ((unused)) for variables used only for log
output and flagged as unused if the message log level is compiled out.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The device level debug will have to be removed and the debugging
can be based on this new logging structure which can tell where
an error (or debug output) occured whch the current implmentation
cannot.
The one limitation is the new macros cannot take a char* for the
format parameter. It must be an actual string literal because it
is concatenated with other strings.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
APU requires the use of ?= for MK_DIR but the use of lastword was
causing MK_DIR to be a subdir of makefiles. Changed lastword to
firstword (which is always the path to firmware.mk) which fixed
the problem.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Moved nuttx specific make rules to files in makefiles/nuttx.
All target specific makefiles are in their target sub directories.
To minimize file duplication, targets that share rules include a
common file. For example the posix and posix-arm targets both use
makefiles/posix/posix_elf.mk
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Changed rc.S to rcS.
Updated README.md to explain the require directory structure and
where to run mainapp from for SITL to work correctly.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The SITL build is now the default posix build.
The linker script for posix was moved to makefiles/posix.
The rc.S file was moved to posix-configs/SITL/init/
The POSIXTEST board definition is now SITL
To run the SITL test run:
make sitlrun
This replaces the make posixrun target.
The build directory is now Build/posix_sitl.build/
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
before an advertiser for multi_pub/subs.
This is achieved using
- A "published" flag for each uORB device node
- A check before increasing the instance count (basically, a node is
re-used if nothing has been published on it before which means that it
has been created by a subscriber.
Since the PX4 code uses both px4_task and pthread APIs,
px4_getpid() must be save to call from either context.
On posix, this means we have to always return the pthread ID.
Reverted simulator change of pthread to px4_task
There may have been side effects if this was build for a target that
has process/task scoped file descriptors. It is now safe to call
px4_getpid() from this pthread context with this change for the
posix build for px4_getpid().
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
In nuttx the mode parameter to open is not required but in Linux,
and per the POSIX spec, mode is required if the O_CREAT flag is
passed.
The mode flags are different for NuttX and Linux so a new set of
PX4 defines was added:
PX4_O_MODE_777 - read, write, execute for user, group and other
PX4_O_MODE_666 - read, and write for user, group and other
PX4_O_MODE_600 - read, and write for user
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
mcu_unique_id() reads registers at an invalid address in non-nuttx builds.
Added ifdef to return a dummy value for non-nuttx builds.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The simulator was using pthread APIs directly so calls to px4_getpid()
would fail since the task ID was not known. Changed simulator to use
px4_task_spawn_cmd.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
If the posix target is run and the rootfs is not created, then
there is an fopen in mavlink without a return value check and then a write
to the fd. When this condition occurs it tries to write to NULL and will
segfault.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The default rootfs is now in:
Build/posix_default.build/rootfs/
The subdirs fs/microsd and eeprom are now created if they do not exist.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Set a default path relative to current dir for the posix target.
Running make posixrun will create the required directoroes and then run
mainapp from its build location.
PX4_ROOTFSDIR is set to nothing for nuttx.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The addition of the hrt workqueue required adding some additional files to
unittests/CMakeLists.txt
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The tone_alarm simulator was added to rc.S and the warning output for a
hrt_timer with a 0 expiry times was disabled.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The baro was not fully initialized when the sensors module tried to
open it. Added a sleep command and a sleep 2 to rc.S so the baro
is initialized by the time the sensors module tried to read it.
Fixed other noisy errors
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
When px4_getpid() was called from the shell, there was no opaque
thread ID to return. Added a special thread ID for the shell
context. This ID only works for px4_getpid() and cannot be used
for other px4_task_*() calls.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
* The `print """` syntax appears invalid in Python 3 which is the
default for the Python binary on my system (and soon many more).
* Convert the file (using `2to3`) to a version that's compatible with
Python 2 and Python 3.
* Tested against Python 2.7.10 and 3.4.3.
Nuttx complains about an unresolved _impure_ptr at link time.
This is a known issue when using STL templates in NuttX on ARM.
Created new ORBMap and ORBSet classes for NuttX.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
QuRT doesn't support unlink and does not provide getpid().
The DSPAL layer provides access to usleep so an implementation is
no longer needed.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The toolchain_* files are target OS specific so they were moved to
the target OS subdir.
The gcc_version.* files are only cleared once per make instantiation so
a build that creates multiple HW targets will try to link with an
incompatible .o file (i.e. x86 build linking ARM .o). I created
posix-arm as a separate target to fix this problem.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Usage is: -d udp[:<port>] If no port is specified, default port is
set to 14556. If -d isn’t specified then default is serial.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This adds support for a dynamic build for QuRT and initial
Multi-uORB changes to enable communication between the DSP and
the application processor.
This part of the changes do not affect the POSIX build. This is
enablement for the QuRT build using Multi-uORB. The second part
of the changes will be added in a new module under src/modules.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
- wait for first message from jMAVSim
before sending data
- publish raw rc data coming from PIXHAWK (temporary)
- send some interesting messages to jMAVSim
- prepare sensor data for sim drivers to read
There is a race condition for the accel and mag polling rates.
Whichever one gets set first, the other will be uninitialized.
Set the mag polling rate to 1ms if uninitilized.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The workqueues measure time in ticks which is typically 10ms.
Some interrupt events in Nuttx occur at about 1ms so a more
granular workqueue is needed for POSIX.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
uORBManager_posix.cpp did a stat to see if a file exists but the
file is actually a virtual file. Using stat was incorrect because
it required a stat buffer that was never used. The POSIX access
function is a better choice so I created a px4_access version to
handle virtual files.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The macro was using a constant defined as a long instead on an
unsigned long. Made corresponsing changes to barosim.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
There is a race condition for the accel and mag polling rates.
Whichever one gets set first, the other will be uninitialized.
Set the mag polling rate to 1ms if uninitilized.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The workqueues measure time in ticks which is typically 10ms.
Some interrupt events in Nuttx occur at about 1ms so a more
granular workqueue is needed for POSIX.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
There was a conversion error in the timeout (in ms)
passed in and the ts.tv_nsec field of the struct timeval.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The use of a non-static function without a declaration generates a
warning for gcc 4.8.
Clang-3.4 does not work when compiling for gprof. The executable always
generates a segv.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Remove ioctl calls by always starting cycling
Remove unused orb variables and includes
Remove unused angle from irlock_s structure
Add test and set I2C address to pixy default
Reduce max num objects to 5
Add read errors reporting via nsh
Gyrosim would call measure continuously because the write_checked_reg
was failing. There is no need to check faked reg writes in the
simulator so that code was removed.
The delay that was added to the simulator to pace the gyrosim reads
was also removed now that the source of the problem was determined.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The Build/git_version.d and Build/git_version.o files need to be
removed on each make to prevent confusion from a previously
generated dependency file for a different target.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
VEHICLE_CMD_START_RX_PAIR is defined as uint32 and is being compared to an int.
GCC complains about this and fails. Changed int cast to a unsigned int.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reviewed all changes in pull request and made sure all cpp files
check orb_advert_t types against nullptr and c files check against
NULL.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The existing orb_advert_t use thoughout the code sometimes tries
to treat it as a file descriptor and there are checks for < 0
and ::close calls on orb_advert_t types which is an invalid use
of an object pointer, which is what orb_advert_t really is.
Initially I had changed the -1 initializations to 0 but it was
suggested that this should be nullptr. That was a good recommendation
but the definition of orb_advert_t had to change to void * because
you cannot initialize a uintptr_t as nullptr.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The calls to orb_advertise were being mishandled throughout the code.
There were ::close() calls on memory pointers, there were checks
against < 0 when it is a pointer to a object and values larger than
0x7ffffffff are valid. Some places orb_advert_t variables were
being initialized as 0 other places as -1.
The orb_advert_t type was changed to uintptr_t so the pointer value
would not be wrapped as a negative number. This was causing a failure
on ARM.
Tests for < 0 were changed to == 0 since a null pointer is the valid
representation for error, or uninitialized.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The orb_advertise and/or orb_publish calls were failing because
there were not enough devmap entries allocated for all the orb
topics advertised.
The number of entries was increased from 50 to 100.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
There were an insufficient number of devmap entries allocated and
when they ran out, new orb_advertise requests would fail.
Also added a new logging macro for the Linux build to show the
calling pthread if enabled.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
When make is invoked as "make posix posix_default"
it will build the posix_default target twice. The Makefile was
fixed to correct this.
If "make posix" is run, the Makefile still calls "make PX4_TARGET_OS=posix".
If "make posix posix_default" is run, the posix target just exports
PX4_TARGET_OS=posix and then make evaluates the next goal (posix_default).
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The QuRT build was broken from the call to exit. While fixing
the code to clean up before returning, I found a missed call
to px4_close.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
NuttX is still the default target and all NuttX configs can still
be built with:
make
Individual NuttX, POSIX, and QuRT configs can now be built more
easily by specifying the target and configs:
make posix posix_default
make qurt qurt_hello
make nuttx aerocore_default
Running make with just the target will make all the configs for
that target:
make nuttx
make qurt
make posix
The help is also target specific:
make nuttx help
make qurt help
make posix help
"make help" will still assume you want help for the NuttX target
Added a new QuRT config called qurt_hello as a sample config to
test buiding in different commands for separate configs.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
NuttX is still the default target and all NuttX configs can still
be built with:
make
Individual NuttX, POSIX, and QuRT configs can now be built more
easily by specifying the target and configs:
make posix posix_default
make qurt qurt_hello
make nuttx aerocore_default
Running make with just the target will make all the configs for
that target:
make nuttx
make qurt
make posix
The help is also target specific:
make nuttx help
make qurt help
make posix help
"make help" will still assume you want help for the NuttX target
Added a new QuRT config called qurt_hello as a sample config to
test buiding in different commands for separate configs.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Unit tests now work. The linux build was failing saving params
because it was using the changes for QuRT that fake out the
filesystem.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
A new poll command was added in accelerometer_calibration.cpp
that needed to be converted to a px4_poll.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Made the logging macros generic so they can be used for multiple targets.
Fixed toolchain_native.mk so err.h is included from src/systemlib for posix.
Reduced debug output for uORB.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
In QuRT, this is a long but the variable was being printed with "%d"
Need to cast variable as long and use "%ld"
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Using %llu or %lu will break one of the build targets. The "right way"
to print a uint64_t is via the PRIU64 macro defined in C99.
This wasn't defined for the NuttX compiler so it was added to px4_defines.h
for NuttX.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The ROS build included some files that used isfinite vs PX4_ISFINITE.
The AppState class also needed to be supported for ROS.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The warnx and warn calls map to PX4_WARN.
Calls to errx or err genrtate a compile error.
The px4_log.h file implements a new log format:
For DEBUG and INFO:
<level> <msg>
For ERROR and WARN:
<level> <msg> (file filepath line linenum)
The verbosity can be changed by setting the macro to use
either linux_log or linux_log_verbose in px4_log.h
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The transfer function would previously return error if the receive
buffer length was 0. This appears to be a valid condition for
requesting a measurmement be taken but no data returned.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added -D__QDSP6_DINKUM_PTHREAD_TYPES__ to makefiles/toolchain_hexagon.mk
so the pthreads functions are properly defined.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
In the upstream tree ringbuffer.h includes the method implementations
in the header file which causes multiple definitions in the link for
other targets. Changed so ringbuffer.cpp is build separately for other
platforms and is included by ringbuffer.h on NuttX.
uORB changes do not link without uORBTest_UnitTest.cpp enabled for
the NuttX build.
px4_getopt was not exported and wasn't visible in NuttX build.
The makefiles were restored to be as close as possible to upstream
so the NuttX build builtin's work again. The code will have to be
refactored after the merge.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The use of std::map and static initialization was an issue.
The code was refactored to not use static initialization.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Reworking toolchain and main.cpp for QuRT to a final link can be
done and the apps.h file is autogenerated.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
QuRT does not support UDP so moved the mavlink specific code
to a new file that is not built for the qurt target
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The posix layer implementations should work on QuRT.
QuRT needs to provide a way for getting the current time.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The inclusion of px4.h requires C++ features not supported in the
Hexagon toolchain. The features are not required so the required
headers are used instead.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Most of the current POSIX builds will not use the UART and it
is just a unnecessary dependency to satisfy when running in a
test environment.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
px4_read, px4_write, and px4_opctl were not returning the correct
value on error. They were returning -errno vs -1.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
QuRT does not have a filesystem, so creating a virtual filesystem
that could be implemented as an in-memory file or a remote file
over fastRPC.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
ld.gold does not support the -Ur flags and it seems some people have
ld as a link to ld.gold.
Made LD = ld.bfd to avoid confusion.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The calls to task_spawn_cmd, kill_all, and systemreset were wrappers
around the px4_{task_spawn_cmd|kill_all|systemreset} implementations.
Removed the wrappers and changed all calls to the px4_ equivalents.
NuttX specific code was moved into px4_tasks.h
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The latency_test used to pass an object pointer as argv which
won't work in the posix port because it expects argv to be a
null terminated array of character pointers (which it makes a
copy of).
The test was refactored to use a singleton pattern and avoid
having to pass the object pointer to the thread.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
GCC was more picky about prototypes for inlines being required.
The generate_listener.py script used incorrect printf formats and
was casting %f params to float, but printf casts all %f params to
double per the spec.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The initialization functions were called after the script
commands were run causing a deadlock waiting for an
uninitialized semaphore.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The build fails when modules override this flag with a larger value,
and this lower value is still checked. The new flag seems to be in
addition to the old flag, not a replacement.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
There were some missed calls to open and ioctl that need to be
px4_open and px4_ioctl.
QuRT also does not provide usleep() so px4_time.h has to be included
in files calling usleep.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The unit test was not passing a null pointer terminated argv.
The posix port depends on argv being null terminated to
determine how may args were passed since PX4 API doesn't
pass argc when spawning a new task.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
uORB was refactored in order to support the MuORB changes required
for QURT. Those changes wil be added in a subsequent commit.
The files are split out by posix and nuttx so the changes are visible.
When this has been tested, the files can be re-merged and re-tested.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The HRT call processing normally happens via HW timer interrupt
handler. Since the POSIX port has no ISR handling, the HP work
queue is used.
Instead of irq_save() and irq_restore() calls to disable/enable
interrupts, a mutex is used to protect each queue.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
In STM32, the ISR handler calls hrt_call_invoke(). There is no
interrupt timer inthe POSIX port so a work item is put on the
high priority work queue to expire at the next event (in ticks)
or at the next max delay interval.
Counter wrapping is likely still not handled properly in this code.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The variable MAVLINK_SRC was defined and then redefined.
Commented out the first definition and moved beside that overriding
definition for visibility.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The changes to the simulator added an include of
mavlink/include/v1.0/... to simulator.h which was not in the included paths.
The included header file also causes clang to issue a -Wpacked warning that
had to be silenced.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The debug message made it difficult to use the shell for the
posix build. Commented out the debug line.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Sensor combined topic notification wasnot working because
the calls to hrt_called() and hrt_call_after() in
ORBDevNode::appears_updated() are not working correctly.
This commit ifdefs out those calls, and the poling seems
to work correctly. This is a workaround until the issue is
resolved.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Simulator can work as before with -s flag or with Roman's additions to
publish the sensors combined topic using -p flag.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The commented out lock and unlock were determined to be needed and added back.
The unit test for VDev was updated. It showed the race between the poll and a
write that only does a poll_notify().
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Clang build fails due to -Werr and warning on use of
if (!condition != other_condition && some_condition)
Clang wants to be clear that the initial '!' wasn't
intended for the whole expression.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
MuORB was missing the orb_exists() function added to uORB.cpp
gyro_calibration.cpp still had some merge conflicts that had not been resolved.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Fixed print format for __LINE__ to %d
Fixed if/else that breaks with the debug macro expansion. The if/else
needs to use braces to allow macro expansion.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
sim.cpp was causing the posix shell to have continuous debug output.
Used debug macros to suppress output
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Created px4_debug,h to define:
PX4_DBG
PX4_INFO
PX4_WARN
PX4_ERR
These enable OS specific mappings to be made, filtering, etc.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added simulated tone_alarm class and enabled led class for posix build.
The simulator implements the led_init, led_on, led_off, led_toggle calls.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Moved the generated topic_listener.cpp to the Build tree so it is
cleaned when make clean is called.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The posix build would complain that toipc_listener.cpp did not exist
and there was no rule to create it.
The required rule was added to src/systemcmds/topic_listener/module.mk
The script generate_listener.py is run from the Build tree and needs to
access $(PX4_BASE)/msgs so $(PX4_BASE) is now passed as an argument to
generate_listener.py
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Removed obsolete porting cruft from px4_XXX.h files and merged the
POSIX changes in PreflightCheck_posix.cpp back to PreflightCheck.cpp
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This patch is required for QuRT. comlpex.h defines "I" and it replaces "I" in the
enum definition without this patch creating an error.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The function calls ceil() and floor() but passes an int and there
is obviously no implementation for that so clang fails.
It seems like exp should be a float from this code.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
DSPAL for QuRT is still missing the pthreads exports and there is no
exported sleep function. These functions are stubbed out for the time being.
This is based on the 6.4.05 version of the Hexagon tools.
The Hexagon tools and DSPAL are needed to build the qurt target.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
To facilitate testing, the simulated devices always return OK for
self tests.
rc.S was also upated to set CAL_XXXY_ID to the devid so tests pass the
calibration check.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The following should not have been defined:
PX4_DIOC_GETPRIV
PX4_DEVIOCSPUBBLOCK
PX4_DEVIOCGPUBBLOCK
PX4_DEVIOCGDEVICEID
The actual defines are in drv_device.h and are:
DEVIOCSPUBBLOCK
DEVIOCGPUBBLOCK
DEVIOCGDEVICEID
DIOC_GETPRIV is defined by Nuttx, so mapped to SIOCDEVPRIVATE for POSIX
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
state_machine_helper_posix.cpp was out of sync with
state_machine_helper_posix.cpp.
Added debug to detect when sensors is started before uorb.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
PreflightCheck was failing because it was trying to read actual
devices instad of virtual devices.
ADCSIM had a LINUXTEST ifdef that was removed.
posix_run.sh was using the wrong path
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Changed "linux" target to "posix". Most of the changes are shared with
QuRT and with OSX. The Linux specific parts are in for i2c which uses
<linux/i2c.h> and <linux/i2c-dev.h>.
There is also a check for __PX4_LINUX in mavlink for a tty ioctl that is
not supported.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Seems that mavlink_receiver_linux.cpp inherited the history
from mavlink_receiver.cpp so updates went to it vs mavlink_receiver_nuttx.cpp
Two module.mk files used ifdef instead of ifeq.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Clang found the following:
if (fabsf(airspeed.indicated_airspeed_m_s > 6.0f))
which is doing fsbsf( bool )
Fixed to be:
if (fabsf(airspeed.indicated_airspeed_m_s) > 6.0f)
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
If simulate is not true, then a read I2C device is present.
The global scope ioctl should be called on _fd, not px4_ioctl.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
list_devices will list virtual devices starting with "/dev/".
list_topics will list topics ("/obj/")
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The commander module now compiles for Linux.
state_machine_helper_linux.cpp iterates over the virtual devices vs
all devices under /dev as per NuttX when disabling publishing.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Simulator listens for UDP input data at port 9876.
Data is for now comma separated. Not yet connected to the various sim
classes: accelsim, gyrosim, magsim.
Barometer measurements not yet supported.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
px4_task_t is negative for failure conditions. It was set mistakenly to
pthread_t (which is unsigned) for LInux.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Converted px4_linux_tasks to C++ so the task struct can use a
string. Sometimes the name string was in the stack of the calling
function and goes out of scope.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The name of the app was adc but should have been adcsim.
Added a barometer simulator.
This will allow ms56711_linux to depend on real devices and not
simulation.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
GCC 4.8 and higher implement 16 byte static data alignment on 64-bit.
This means that the 24-byte param_info_s variables are 16 byte aligned
by GCC and that messes up the assumption that the address of the second
parameter is at ¶m[0]+sizeof(param[0]).
When compiled with clang it is true, with gcc is is not true.
See https://llvm.org/bugs/show_bug.cgi?format=multiple&id=18006
The fix is needed for GCC >=4.8 only. Clang works fine without this.
Added __attribute__((aligned(16))) to first member of param_info_s.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This is a bug and is unsafe. I am not going to change the code but
it needs to be changed to a cast to int or a <= as it is unsafe to
check for equality with 0.0F.
Disabled warning for GCC 4.9 for now.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The list_tasks and list_devices commands will show
lists of running px4 threads and created virtual device nodes.
The list_builtins command was removes and the list of commands
will be shown if return is pressed.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The MS5611_SIM class is supposed to simulate data from a real
ms5611. An externl simulator could provide an interface to
call to get data that would be returned from a transfer() call.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The getopt command uses global variables and is not thread safe.
Created a minimal px4_getopt version that supports options with
or without an arg, and random placement of options on the command line.
This version modifies the order of the args in argv as does the
POSIX version of getopt.
This assumes that argv[0] is the program name. Nuttx may not support
that properly in task_spawn.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The simulator satisfies the dependencies for an accelerometer
being present.
The accel code compiles but is not fully functional.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The simulated device satisfies the factory pattern used by
MS5611 to create a specific I2C or SPI device instance.
For now the functions just return true, but should/could
return simulated data.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
I have not been able to unravel why nullptr is passed as the device
path to the constructor of ms5611_i2c.
This crashes the VDev code as it expects to create a virtual driver
with the device path passed as devname. It causes VDev to do a
strncmp with null.
Using /vdev/ms5611_i2c as the name for the now.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The command shell was spewing debug infor about the command and
parameters. Removed the debug output.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
If PX4_I2C_SIMULATE is set to 1, then the actual I2C device will
not be opened and all transfers will succeed.
If PX4_I2C_SIMULATE is false and transfer() is called, then the
appropriate ioctl is make on the actual device.
if I2C::ioctl is called via px4_ioctl() then the command fails and
a warning is printed to use I2C::transfer
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The parameter is not present in the linux implementation so removed
the documentation for the parameter.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
To avoid confusion when a real device and a virtual device is
being used, changed CDev to VDev for Linux.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added PX4_ISFINITE(x) to px4_defines.h to handle the differences on
NuttX and Linux.
This change also picked up some file renaming for virtual character devices
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
px4_errx kills the process, so if possible we want to end the thread
but not the process. Using warnx and return exits gracefully.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The build will now fail if clang is not found. To force the use
of GCC, use:
make USE_GCC=1
The toolchain makefile was modified so it no longer checks for
various versions of clang if USE_GCC=1 is passed.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
__param_start and __param end need to be 8 byte aligned on
64bit machines. Changed linker script to 8 byte align __param
section.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Disabled gcc warnings that are tripped by Eigen.
Removed signal code that is not needed in Linux port and was
causing gcc warnings.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
PX4 uses NuttX data structures throughout so those data structures
were preserved and used to implement high and low priority queues.
A unit test for the work queues was added.
The polling rate of the queues are set in px4_config.h in
CONFIG_SCHED_WORKPERIOD. The units are milliseconds.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Now run:
make PX4_TARGET_OS=nuttx
or
make PX4_TARGET_OS=linux
To test the linux build and make sure that the required directories
exist, run:
make linuxrun
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added linker script to resolve __param_start and __param_end.
Added mc_att_control to list of supported builtins.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The builtin commands all have _main suffix by convention so
no need to show _main. Also nsh calls the commmands without the
_main suffix.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
If the topic has not been published, orb_copy returns a
negative number which causes update() to memset the data
contents to zero.
In some instances data is a null pointer. This causes a
segment violation crash.
Added a check for data != 0
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
I2C class derives from CDev class which requires a devname
but in at least some instances, a nullptr is passed for devname.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
When printing a uint64_t type using %llu, this works on a 32bit
system, but on a 64bit machine uint64_t is an unsigned long.
The compiler complains about unmatching types.
The time times in PX4 should likely have been unsigned long long
and not uint64_t as that type changes per architecture.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
For now it uses the bus number as the id. Not sure how this should
actually be mapped.
Seems like the I2C devices come up in random order and have random
id but that a specific device can be found in the /sys/bus/i2c
interface.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
if termios.h is included before mathlib.h then BO is undefined.
Since mathlib.h is not needed it was removed but I still don't
know why this error occurs.
Also added -lrt to link flags for clock_gettime
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Not yet functional. Full implementation will provide an IOCTL interface to
do bi-directional transfer. will model the interface after Linux.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
When running the process without sufficient privilege to use
real time scheduling, warn the user and run with SCHED_OTHER.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
ms5611 uses getopt to parse args but the static variable
optind was not being properly updated.
Replaced use of external getopt call with simple parser;
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Added more queue support to linux/px4_layer.
Use virt char devices for ms5611, and mavlink.
Added more HRT functionality. uORB latency test
now fails. Likely due to bad HRT impl for Linux.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The dataman module now works under linux using /tmp/dataman as the
file path. Two files from NuttX were added to the Linux impl for
single linked queue handling.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The previous name implied some kind of daemon. AppState is
aggregated state of an application's running state and interfaces
to request app termination, and check app state.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The High Resilution Timer functions are stubbed out for now.
Certain queue functions are required to compile uORB so adding
the queue.c from NuttX.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Moved posix-like functions to vcdev_posix.cpp and updated the
copyright notice.
Added test case to make sure poll unblocks when a write occurs.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Modified uint32_t casts of pointers to unsigned long for portability.
It otherwise breaks on x86_64.
Added _PX4_IOC to handle the conflice between _IOC on Linux and NuttX.
Removed use of px4::ok() because it cannot be used in a thread based
implementation. Changed to use px4::AppMgr which uses ok() on ROS.
Removed up_cxxinitialize.c from Linux build.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The following libs can now be built under Linux:
lib/mathlib
lib/geo
lib/geo_lookup
The constants used for ROS are now shared with Linux in
px4_defines.h
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Keep existing API use in code. Bind the use of the OS independent
implementation in the systemlib layer.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Calls to task_delete and task_spawn_cmd are now
px4_task_delete and px4_task_spawn_cmd respectively.
The px4_tasks.h header was added to the affected files
and incusions of nuttx/config.h were removed.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Moved checksubmodules target back to Makefile.
NuttX download still done for Linux as it would require
too much surgery to remove it.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Uncomment the following line in setup.mk and comment out the line above
to enable the Linux build.
export PX4_TARGET_OS = linux
The build uses the clang compiler by default. The final bundled executable
is mainapp located in:
Build/linux_default.build/mainapp
When you run mainapp it will provide a list of the built-in apps. You can
type in the commands to run such as:
hello_main start
Because the Linux build is threaded and does not support tasks or processes,
it cannot call errx, exit() _exit(), etc. It also requires unique scoped
variables to test if a thread is running or if an application should exit.
The px4::AppMgr class was added in px4_app.h for this purpose. The
hello sample app demonstrates how this is used.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Moved the NuttX specific board files to makefiles/nuttx and added
a makfiles/linux directory with sample config and board files.
Created a makefiles/toolchain_native.mk file for building for Linux
with the native system compiler. GCC or clang can be used by setting
a flag in the file.
The Linux build creates an archive file and will build the tasks as
threads. Other code changes are required to support both task based
and thread based builds.
The NuttX source should not be required for the Linux build. The
target OS (NuttX or Linux) is selected by commenting out the desired
line in setup.mk
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
The HIL architecture allows you to test the flight stack replacing the real physical vehicle and sensors with a simulator of vehicle dynamics and sensor outputs. The flight stack "is not aware" that it is not on a real vehicle. This is a powerful tool for develping and testing code rapidly in a benchtop environment.
The flight stack can be run anywhere that supports a network connection to the simulator (with sufficient bandwidth and latency to transport the sensor and actuator messages). This can be on a standard linux workstation, an on-target linux image, or the on-target DSP image. These modes can be selected based on the goals of the testing. Workstation is useful for rapid testing in a tool-rich environment. DSP image testing is the closest to the final implementation, so is useful for testing actual HW operation, other than the physical sensing and actuation.
## Px4 High-level HIL Architecture
A diagram of the setup described is shown here. Note that UDP port numbers are only displayed on the socket server and are left blank on the socket client.
(???NOTES: This diagram needs to be updated to use control inputs over UDP, either from QGC or from other)
The simulator that is currently supported is jMAVSim. The setup described here requires PX4 and jMAVSim installed and running. qGroundControl (QGC) is also required because it is the supported method of providing manual control commands.
## Assumptions
# Compiling Code
## JMAVSim
### Platform Requirements
Linux with java-1.7.x or greater
### Build Instructions
In a clean directory
```
> git clone https://github.com/PX4/jMAVSim.git
> cd jMAVSim
> git submodule init
> git submodule update
> ant
```
## qGroundControl
### Platform Requirements
Windows 7
Logitech Gamepad F310 joystick controller
### Download/Install Instructions
Download QGC from http://qgroundcontrol.org/downloads and install using the windows executable.
## PX4
### Platfrom Requirements
Linux or Eagle with a working IP interface (?? does this need further instructions?)
replacing <IPADDR> with the IP address of the machine running PX4 (Eagle). This can be found by running "ifconfig" on that machine.
## Starting qGroundControl
Launch the qGroundControl application
1. Set up the communication to the flight stack. In the menu File:Settings:CommLinks, select Add. Enter a Link Name of your choice. Select Link Type: UDP. Set the listening port to an unused port (example: 14561). Select Add. Enter the IP address and port of the PX4 Mavlink app, which is <IPADDR>:14556 with <IPADDR> being the IP address of the Eagle board. Select OK.
1. Set up the joystick. Plug in the joystick to your Windows machine. In the menu File:Settings:CommLinks, check Enable Controllers. Select "Gamepad F310". Select "Manual". Set the axes/channel mapping to 0:Yaw, 1:Throttle, 2:unset, 3:Pitch, 4:Roll. Seletct "Inverted" for the throttle axis. Click "Calibrate range". Move the right joystick through its full range of motion. Move the left joystick full left then full right. Move the left joystick full forward (but not full backward). Click "end calibration."
1. Connect to the flight stack. Click Analyze. Click the "Connect" button in the upper right, and select the connection that you created in the first step.
You should now be connected to the flight stack. You can see incoming Mavlink packets using the MAVLink Instpector (from Advanced:Tool Widgets)
## Controlling PX4 flight in HIL Mode
The joystick can now be used to fly the simulated vehicle. The jMAVSim world visualization gives a FPV view, and QGC can be used to display instruments such as artificial horizon and maps (if GPS simulation is enabled).
* Copyright (c) 2012-2014 PX4 Development Team. All rights reserved.
* Copyright (c) 2012-2015 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
@@ -38,4 +38,4 @@ to be made under the same license. Any exception to this general rule is listed
- PX4 middleware: BSD 3-clause
- PX4 flight control stack: BSD 3-clause
- NuttX operating system: BSD 3-clause
- Exceptions: Currently only this [400 LOC file](https://github.com/PX4/Firmware/blob/master/src/lib/external_lgpl/tecs/tecs.cpp) remains LGPL, but will be replaced with a BSD implementation.
- Exceptions: Currently only this [400 LOC file](https://github.com/PX4/Firmware/blob/master/src/lib/external_lgpl/tecs/tecs.cpp) remains LGPL, but will be replaced with a BSD implementation.
This repository contains the PX4 Flight Core, with the main applications located in the src/modules directory. It also contains the PX4 Drone Platform, which contains drivers and middleware to run drones.
This repository contains the PX4 Flight Core, with the main applications located in the src/modules directory. It also contains the PX4 Drone Platform, which contains drivers and middleware to run drones.
* Official Website: http://px4.io
* License: BSD 3-clause (see LICENSE.md)
* License: BSD 3-clause (see [LICENSE.md](https://github.com/PX4/Firmware/blob/master/LICENSE.md))
* Supported airframes (more experimental are supported):
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.