diff --git a/boards/airmind/mindpx-v2/default.cmake b/boards/airmind/mindpx-v2/default.cmake index d38f6617d4..4847f53909 100644 --- a/boards/airmind/mindpx-v2/default.cmake +++ b/boards/airmind/mindpx-v2/default.cmake @@ -117,4 +117,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/atlflight/eagle/default.cmake b/boards/atlflight/eagle/default.cmake index a20c6ba605..31ffca63d2 100644 --- a/boards/atlflight/eagle/default.cmake +++ b/boards/atlflight/eagle/default.cmake @@ -120,4 +120,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/atlflight/excelsior/default.cmake b/boards/atlflight/excelsior/default.cmake index 0867448924..ef8ef133c1 100644 --- a/boards/atlflight/excelsior/default.cmake +++ b/boards/atlflight/excelsior/default.cmake @@ -119,4 +119,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/av/x-v1/default.cmake b/boards/av/x-v1/default.cmake index 78e8091f8e..103086868f 100644 --- a/boards/av/x-v1/default.cmake +++ b/boards/av/x-v1/default.cmake @@ -115,4 +115,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/beaglebone/blue/default.cmake b/boards/beaglebone/blue/default.cmake index e6d70ef25f..0d095d38dc 100644 --- a/boards/beaglebone/blue/default.cmake +++ b/boards/beaglebone/blue/default.cmake @@ -89,4 +89,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/emlid/navio2/default.cmake b/boards/emlid/navio2/default.cmake index 0659dc979a..81278aff30 100644 --- a/boards/emlid/navio2/default.cmake +++ b/boards/emlid/navio2/default.cmake @@ -89,4 +89,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/holybro/durandal-v1/default.cmake b/boards/holybro/durandal-v1/default.cmake index 7d004966d3..2cc2b2a474 100644 --- a/boards/holybro/durandal-v1/default.cmake +++ b/boards/holybro/durandal-v1/default.cmake @@ -122,4 +122,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/holybro/durandal-v1/stackcheck.cmake b/boards/holybro/durandal-v1/stackcheck.cmake index d200ccc629..035536c4be 100644 --- a/boards/holybro/durandal-v1/stackcheck.cmake +++ b/boards/holybro/durandal-v1/stackcheck.cmake @@ -123,4 +123,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/intel/aerofc-v1/default.cmake b/boards/intel/aerofc-v1/default.cmake index 51eb435b36..dbcde66b37 100644 --- a/boards/intel/aerofc-v1/default.cmake +++ b/boards/intel/aerofc-v1/default.cmake @@ -96,4 +96,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/intel/aerofc-v1/rtps.cmake b/boards/intel/aerofc-v1/rtps.cmake index 245b60a165..caa1cfde60 100644 --- a/boards/intel/aerofc-v1/rtps.cmake +++ b/boards/intel/aerofc-v1/rtps.cmake @@ -96,4 +96,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/modalai/fc-v1/default.cmake b/boards/modalai/fc-v1/default.cmake index 7d70ac4e5a..2a55fabab1 100644 --- a/boards/modalai/fc-v1/default.cmake +++ b/boards/modalai/fc-v1/default.cmake @@ -116,4 +116,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/mro/ctrl-zero-f7/default.cmake b/boards/mro/ctrl-zero-f7/default.cmake index 189cf85ea4..95e58e98f2 100644 --- a/boards/mro/ctrl-zero-f7/default.cmake +++ b/boards/mro/ctrl-zero-f7/default.cmake @@ -121,4 +121,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/mro/x21-777/default.cmake b/boards/mro/x21-777/default.cmake index 633cc19bc6..17bcbf212c 100644 --- a/boards/mro/x21-777/default.cmake +++ b/boards/mro/x21-777/default.cmake @@ -115,4 +115,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/mro/x21/default.cmake b/boards/mro/x21/default.cmake index d35df95d18..c24fa34f28 100644 --- a/boards/mro/x21/default.cmake +++ b/boards/mro/x21/default.cmake @@ -118,4 +118,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/nxp/fmuk66-v3/default.cmake b/boards/nxp/fmuk66-v3/default.cmake index 8a29200831..351a35dcb7 100644 --- a/boards/nxp/fmuk66-v3/default.cmake +++ b/boards/nxp/fmuk66-v3/default.cmake @@ -119,4 +119,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/omnibus/f4sd/default.cmake b/boards/omnibus/f4sd/default.cmake index 2b899c071a..03c6a80b60 100644 --- a/boards/omnibus/f4sd/default.cmake +++ b/boards/omnibus/f4sd/default.cmake @@ -105,4 +105,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/px4/fmu-v2/default.cmake b/boards/px4/fmu-v2/default.cmake index bbcdb0fa96..02dd087096 100644 --- a/boards/px4/fmu-v2/default.cmake +++ b/boards/px4/fmu-v2/default.cmake @@ -129,4 +129,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/px4/fmu-v2/test.cmake b/boards/px4/fmu-v2/test.cmake index 18168e49bf..defebefaeb 100644 --- a/boards/px4/fmu-v2/test.cmake +++ b/boards/px4/fmu-v2/test.cmake @@ -127,4 +127,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/px4/fmu-v3/default.cmake b/boards/px4/fmu-v3/default.cmake index 8b91b5f565..5b609fe737 100644 --- a/boards/px4/fmu-v3/default.cmake +++ b/boards/px4/fmu-v3/default.cmake @@ -127,4 +127,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v3/rtps.cmake b/boards/px4/fmu-v3/rtps.cmake index 795910a48d..e448b1c44a 100644 --- a/boards/px4/fmu-v3/rtps.cmake +++ b/boards/px4/fmu-v3/rtps.cmake @@ -127,4 +127,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v4/default.cmake b/boards/px4/fmu-v4/default.cmake index ba3d1b1a20..b39ce15397 100644 --- a/boards/px4/fmu-v4/default.cmake +++ b/boards/px4/fmu-v4/default.cmake @@ -123,4 +123,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v4/rtps.cmake b/boards/px4/fmu-v4/rtps.cmake index 539043bbd5..20fbff94d6 100644 --- a/boards/px4/fmu-v4/rtps.cmake +++ b/boards/px4/fmu-v4/rtps.cmake @@ -122,4 +122,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v4/stackcheck.cmake b/boards/px4/fmu-v4/stackcheck.cmake index 46522497f0..477ec86260 100644 --- a/boards/px4/fmu-v4/stackcheck.cmake +++ b/boards/px4/fmu-v4/stackcheck.cmake @@ -122,4 +122,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/px4/fmu-v4pro/default.cmake b/boards/px4/fmu-v4pro/default.cmake index 7ec90e3a76..1e063eb38f 100644 --- a/boards/px4/fmu-v4pro/default.cmake +++ b/boards/px4/fmu-v4pro/default.cmake @@ -124,4 +124,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v4pro/rtps.cmake b/boards/px4/fmu-v4pro/rtps.cmake index 67b427be08..ffd03ce62c 100644 --- a/boards/px4/fmu-v4pro/rtps.cmake +++ b/boards/px4/fmu-v4pro/rtps.cmake @@ -124,4 +124,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5/critmonitor.cmake b/boards/px4/fmu-v5/critmonitor.cmake index 199f59be2a..fdcc94df04 100644 --- a/boards/px4/fmu-v5/critmonitor.cmake +++ b/boards/px4/fmu-v5/critmonitor.cmake @@ -123,4 +123,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5/default.cmake b/boards/px4/fmu-v5/default.cmake index f462445ff2..fbf68f5823 100644 --- a/boards/px4/fmu-v5/default.cmake +++ b/boards/px4/fmu-v5/default.cmake @@ -126,4 +126,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5/irqmonitor.cmake b/boards/px4/fmu-v5/irqmonitor.cmake index f7e031736c..c435d510ab 100644 --- a/boards/px4/fmu-v5/irqmonitor.cmake +++ b/boards/px4/fmu-v5/irqmonitor.cmake @@ -123,4 +123,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5/rtps.cmake b/boards/px4/fmu-v5/rtps.cmake index f0ae7d2368..e3058ae9f3 100644 --- a/boards/px4/fmu-v5/rtps.cmake +++ b/boards/px4/fmu-v5/rtps.cmake @@ -123,4 +123,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5/stackcheck.cmake b/boards/px4/fmu-v5/stackcheck.cmake index b86ff4d42a..6af0b0cd99 100644 --- a/boards/px4/fmu-v5/stackcheck.cmake +++ b/boards/px4/fmu-v5/stackcheck.cmake @@ -124,4 +124,5 @@ px4_add_board( #px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html #rover_steering_control # Rover example app #uuv_example_app + #work_item ) diff --git a/boards/px4/fmu-v5x/default.cmake b/boards/px4/fmu-v5x/default.cmake index fe5d7b16b2..a18a2e677f 100644 --- a/boards/px4/fmu-v5x/default.cmake +++ b/boards/px4/fmu-v5x/default.cmake @@ -124,4 +124,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/fmu-v5x/p2_base_phy_LAN8742Ai.cmake b/boards/px4/fmu-v5x/p2_base_phy_LAN8742Ai.cmake index 04f093581a..f0e2ef2baa 100644 --- a/boards/px4/fmu-v5x/p2_base_phy_LAN8742Ai.cmake +++ b/boards/px4/fmu-v5x/p2_base_phy_LAN8742Ai.cmake @@ -125,4 +125,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/raspberrypi/default.cmake b/boards/px4/raspberrypi/default.cmake index 279a8438c6..6e5d778a2e 100644 --- a/boards/px4/raspberrypi/default.cmake +++ b/boards/px4/raspberrypi/default.cmake @@ -88,4 +88,5 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) diff --git a/boards/px4/sitl/default.cmake b/boards/px4/sitl/default.cmake index d93074c592..d7480506d1 100644 --- a/boards/px4/sitl/default.cmake +++ b/boards/px4/sitl/default.cmake @@ -84,6 +84,7 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) set(config_sitl_viewer jmavsim CACHE STRING "viewer for sitl") diff --git a/boards/px4/sitl/rtps.cmake b/boards/px4/sitl/rtps.cmake index 8af7c7fba6..d764464867 100644 --- a/boards/px4/sitl/rtps.cmake +++ b/boards/px4/sitl/rtps.cmake @@ -84,6 +84,7 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) set(config_sitl_viewer jmavsim CACHE STRING "viewer for sitl") diff --git a/boards/px4/sitl/test.cmake b/boards/px4/sitl/test.cmake index ab36932b58..bd003ba060 100644 --- a/boards/px4/sitl/test.cmake +++ b/boards/px4/sitl/test.cmake @@ -82,6 +82,7 @@ px4_add_board( px4_simple_app # Tutorial code from http://dev.px4.io/en/apps/hello_sky.html rover_steering_control # Rover example app uuv_example_app + work_item ) set(config_sitl_viewer jmavsim CACHE STRING "viewer for sitl") diff --git a/platforms/common/include/px4_platform_common/px4_work_queue/WorkQueueManager.hpp b/platforms/common/include/px4_platform_common/px4_work_queue/WorkQueueManager.hpp index 56131f33a8..1804bd6646 100644 --- a/platforms/common/include/px4_platform_common/px4_work_queue/WorkQueueManager.hpp +++ b/platforms/common/include/px4_platform_common/px4_work_queue/WorkQueueManager.hpp @@ -84,8 +84,8 @@ static constexpr wq_config_t UART_UNKNOWN{"wq:UART_UNKNOWN", 1400, -25}; static constexpr wq_config_t lp_default{"wq:lp_default", 1700, -50}; -static constexpr wq_config_t test1{"wq:test1", 800, 0}; -static constexpr wq_config_t test2{"wq:test2", 800, 0}; +static constexpr wq_config_t test1{"wq:test1", 2000, 0}; +static constexpr wq_config_t test2{"wq:test2", 2000, 0}; } // namespace wq_configurations diff --git a/src/examples/work_item/CMakeLists.txt b/src/examples/work_item/CMakeLists.txt new file mode 100644 index 0000000000..4b4f518c3e --- /dev/null +++ b/src/examples/work_item/CMakeLists.txt @@ -0,0 +1,43 @@ +############################################################################ +# +# Copyright (c) 2020 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. +# +############################################################################ + +px4_add_module( + MODULE examples__work_item + MAIN work_item_example + COMPILE_FLAGS + SRCS + WorkItemExample.cpp + WorkItemExample.hpp + DEPENDS + px4_work_queue + ) diff --git a/src/examples/work_item/WorkItemExample.cpp b/src/examples/work_item/WorkItemExample.cpp new file mode 100644 index 0000000000..674c174228 --- /dev/null +++ b/src/examples/work_item/WorkItemExample.cpp @@ -0,0 +1,152 @@ +/**************************************************************************** + * + * Copyright (c) 2020 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. + * + ****************************************************************************/ + +#include "WorkItemExample.hpp" + +#include + +using namespace time_literals; + +WorkItemExample::WorkItemExample() : + ModuleParams(nullptr), + ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::test1) +{ +} + +WorkItemExample::~WorkItemExample() +{ + perf_free(_loop_perf); + perf_free(_loop_interval_perf); +} + +bool WorkItemExample::init() +{ + ScheduleOnInterval(1000_us); // 1000 us interval, 1000 Hz rate + + return true; +} + +void WorkItemExample::Run() +{ + if (should_exit()) { + ScheduleClear(); + exit_and_cleanup(); + return; + } + + perf_begin(_loop_perf); + perf_count(_loop_interval_perf); + + + // DO WORK + + + + // Example + // grab latest accelerometer data + _sensor_accel_sub.update(); + const sensor_accel_s &accel = _sensor_accel_sub.get(); + + + // Example + // publish some data + orb_test_s data{}; + data.timestamp = hrt_absolute_time(); + data.val = accel.device_id; + _orb_test_pub.publish(data); + + + + + perf_end(_loop_perf); +} + +int WorkItemExample::task_spawn(int argc, char *argv[]) +{ + WorkItemExample *instance = new WorkItemExample(); + + if (instance) { + _object.store(instance); + _task_id = task_id_is_work_queue; + + if (instance->init()) { + return PX4_OK; + } + + } else { + PX4_ERR("alloc failed"); + } + + delete instance; + _object.store(nullptr); + _task_id = -1; + + return PX4_ERROR; +} + +int WorkItemExample::print_status() +{ + perf_print_counter(_loop_perf); + perf_print_counter(_loop_interval_perf); + return 0; +} + +int WorkItemExample::custom_command(int argc, char *argv[]) +{ + return print_usage("unknown command"); +} + +int WorkItemExample::print_usage(const char *reason) +{ + if (reason) { + PX4_WARN("%s\n", reason); + } + + PRINT_MODULE_DESCRIPTION( + R"DESCR_STR( +### Description +Example of a simple module running out of a work queue. + +)DESCR_STR"); + + PRINT_MODULE_USAGE_NAME("work_item_example", "template"); + PRINT_MODULE_USAGE_COMMAND("start"); + PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); + + return 0; +} + +extern "C" __EXPORT int work_item_example_main(int argc, char *argv[]) +{ + return WorkItemExample::main(argc, argv); +} diff --git a/src/examples/work_item/WorkItemExample.hpp b/src/examples/work_item/WorkItemExample.hpp new file mode 100644 index 0000000000..a38e03ac3f --- /dev/null +++ b/src/examples/work_item/WorkItemExample.hpp @@ -0,0 +1,76 @@ +/**************************************************************************** + * + * Copyright (c) 2020 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. + * + ****************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class WorkItemExample : public ModuleBase, public ModuleParams, public px4::ScheduledWorkItem +{ +public: + WorkItemExample(); + ~WorkItemExample() override; + + /** @see ModuleBase */ + static int task_spawn(int argc, char *argv[]); + + /** @see ModuleBase */ + static int custom_command(int argc, char *argv[]); + + /** @see ModuleBase */ + static int print_usage(const char *reason = nullptr); + + bool init(); + + int print_status() override; + +private: + void Run() override; + + uORB::Publication _orb_test_pub{ORB_ID(orb_test)}; + + uORB::SubscriptionData _sensor_accel_sub{ORB_ID(sensor_accel)}; + + perf_counter_t _loop_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")}; + perf_counter_t _loop_interval_perf{perf_alloc(PC_INTERVAL, MODULE_NAME": interval")}; +};