In order to use upstart to run PX4 it needs to run in daemon mode.
Added ability to test if a task is running in order to gracefully
shut down muorb.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Workaround required Eigen downgrade to 3.2. Hexagon toolchain does
not support C++11 features of newest version of Eigen.
Running make qurt_fixup will downgrade and patch Eigen for qurt.
Running make restore will revert the patch and do a git submodule update
to restore the expected Eigen version.
Added a "restore" target to undo qurt_fixup
Before doing a qurt build run:
make qurt_fixup
That will downgrade Eigen to 3.2 and apply the require patch.
To build another target after downgrading:
make restore
Them make the desired target (other than qurt).
Fixed type used in orb_priority to be consistent with the code
(int* was used in declaration but int32_t* used in code)
Removed unused class member variable in sensors.cpp
Added cmake fix for unit tests. The location of px4_log.c changed.
Fixed the qurt drv_hrt.c implementation to use us instead of ms for time resolution
Added px4_led.c to nuttx platform layer
Use the posix version of px4_led.c for nuttx so we don't end up with
duplicate files. It was moved out of common because it is not used by qurt.
Changed PX4_DEBUG to PX4_WARN when checking for the error condition for store_poll_waiter in vdev.cpp
Updated the px4_log.h file to make calls to the qurt_log functions.
The qurt_log function is defined in the platforms/qurt layer.
Added an option to control starting the commander module in HIL mode.
Moved the flight specific drivers to the configuration file instead of adding them
to the common tool chain file because HIL mode does not need them.
Added the uorb Subscriber and Publisher classes
Call PX4_ISFINITE macro instead of isfinite().
Added px4_led.c to nuttx platform layer
Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files.
It was moved out of common because it is not used by qurt.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
Ifdefed out deadcode in position_estimator_inav_main.c as the
deadcode does not compile for qurt.
Added fixes to get a successful build for posix-arm and qurt targets.
Removed CLOCK_REALTIME def from px4_time.h for qurt and removed unused
variables in att_est_q and mc_att_control.
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>
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>
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>
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>
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>
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>
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 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>
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>
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>
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>
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 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>
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>
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>