diff --git a/src/drivers/auterion_autostarter/AuterionAutostarter.cpp b/src/drivers/auterion_autostarter/AuterionAutostarter.cpp index 7b22949891..6f4da6a510 100644 --- a/src/drivers/auterion_autostarter/AuterionAutostarter.cpp +++ b/src/drivers/auterion_autostarter/AuterionAutostarter.cpp @@ -393,7 +393,7 @@ int AuterionAutostarter::start(const char *start_command, const char **start_arg int status = PX4_ERROR; if (start_command != nullptr) { - int pid = exec_builtin(start_command, (char **)start_argv, NULL, 0); + int pid = exec_builtin(start_command, (char **)start_argv, NULL); if (pid != -1) { waitpid(pid, &status, WUNTRACED); diff --git a/src/drivers/cdcacm_autostart/cdcacm_autostart.cpp b/src/drivers/cdcacm_autostart/cdcacm_autostart.cpp index 2dc77aae42..86c1fd3d41 100644 --- a/src/drivers/cdcacm_autostart/cdcacm_autostart.cpp +++ b/src/drivers/cdcacm_autostart/cdcacm_autostart.cpp @@ -166,7 +166,7 @@ void CdcAcmAutostart::state_connected() sched_lock(); static const char app[] {"mavlink"}; static const char *stop_argv[] {"mavlink", "stop", "-d", USB_DEVICE_PATH, NULL}; - exec_builtin(app, (char **)stop_argv, NULL, 0); + exec_builtin(app, (char **)stop_argv, NULL); sched_unlock(); _state = UsbAutoStartState::disconnecting; } @@ -546,7 +546,7 @@ int CdcAcmAutostart::execute_process(char **argv) int pid = -1; sched_lock(); - pid = exec_builtin(argv[0], argv, nullptr, 0); + pid = exec_builtin(argv[0], argv, nullptr); sched_unlock(); return pid; diff --git a/src/drivers/cyphal/CanardSocketCAN.hpp b/src/drivers/cyphal/CanardSocketCAN.hpp index ba93b48dbe..f397e3f713 100644 --- a/src/drivers/cyphal/CanardSocketCAN.hpp +++ b/src/drivers/cyphal/CanardSocketCAN.hpp @@ -44,7 +44,6 @@ #include #include -#include #include diff --git a/src/drivers/cyphal/NodeClient.cpp b/src/drivers/cyphal/NodeClient.cpp index 0f2ae41076..88eda62fbc 100644 --- a/src/drivers/cyphal/NodeClient.cpp +++ b/src/drivers/cyphal/NodeClient.cpp @@ -41,7 +41,7 @@ #define PNP_UNIQUE_ID_SIZE 16 // 128 bit unique id -#include +#include #include "NodeClient.hpp" void NodeClient::callback(const CanardRxTransfer &receive) diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index 671651ed60..376ca5715c 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include diff --git a/src/drivers/px4io/px4io_uploader.cpp b/src/drivers/px4io/px4io_uploader.cpp index 62c699afdd..abafa7bbfc 100644 --- a/src/drivers/px4io/px4io_uploader.cpp +++ b/src/drivers/px4io/px4io_uploader.cpp @@ -55,7 +55,7 @@ #include #include -#include +#include #include "uploader.h" diff --git a/src/drivers/tap_esc/tap_esc_uploader.cpp b/src/drivers/tap_esc/tap_esc_uploader.cpp index 350e366b73..cf0f89a5df 100644 --- a/src/drivers/tap_esc/tap_esc_uploader.cpp +++ b/src/drivers/tap_esc/tap_esc_uploader.cpp @@ -58,7 +58,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/drivers/uavcan/CMakeLists.txt b/src/drivers/uavcan/CMakeLists.txt index 70512233cf..f25fa24206 100644 --- a/src/drivers/uavcan/CMakeLists.txt +++ b/src/drivers/uavcan/CMakeLists.txt @@ -71,6 +71,12 @@ if(NOT config_uavcan_num_ifaces) message(FATAL_ERROR "config_uavcan_num_ifaces not set") endif() +if(CONFIG_LIB_TFLM) + set(UAVCAN_IMPLEMENT_PLACEMENT_NEW 0) +else() + set(UAVCAN_IMPLEMENT_PLACEMENT_NEW 1) +endif() + string(TOUPPER "${PX4_PLATFORM}" OS_UPPER) string(TOUPPER "${UAVCAN_DRIVER}" UAVCAN_DRIVER_UPPER) add_definitions( @@ -80,7 +86,7 @@ add_definitions( -DUAVCAN_NUM_IFACES=${config_uavcan_num_ifaces} -DUAVCAN_CPP_VERSION=UAVCAN_CPP03 -DUAVCAN_DRIVER=uavcan_${UAVCAN_DRIVER} - -DUAVCAN_IMPLEMENT_PLACEMENT_NEW=1 + -DUAVCAN_IMPLEMENT_PLACEMENT_NEW=${UAVCAN_IMPLEMENT_PLACEMENT_NEW} -DUAVCAN_MEM_POOL_BLOCK_SIZE=48 -DUAVCAN_NO_ASSERTIONS -DUAVCAN_PLATFORM=${UAVCAN_PLATFORM} diff --git a/src/drivers/uavcan/uavcan_drivers/kinetis/driver/src/uc_kinetis_thread.cpp b/src/drivers/uavcan/uavcan_drivers/kinetis/driver/src/uc_kinetis_thread.cpp index a64826801c..894f89c674 100644 --- a/src/drivers/uavcan/uavcan_drivers/kinetis/driver/src/uc_kinetis_thread.cpp +++ b/src/drivers/uavcan/uavcan_drivers/kinetis/driver/src/uc_kinetis_thread.cpp @@ -51,7 +51,9 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration) void BusEvent::signalFromInterrupt() { - if (sem_.semcount <= 0) { + int semcount; + + if (sem_getvalue(&sem_, &semcount) == 0 && semcount <= 0) { (void)sem_post(&sem_); } diff --git a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/include/uavcan_nuttx/socketcan.hpp b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/include/uavcan_nuttx/socketcan.hpp index 12fc861400..2d212f7f32 100644 --- a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/include/uavcan_nuttx/socketcan.hpp +++ b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/include/uavcan_nuttx/socketcan.hpp @@ -42,7 +42,6 @@ #include #include -#include namespace uavcan_socketcan { diff --git a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/socketcan.cpp b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/socketcan.cpp index 8df5c21b5e..efea7c7a69 100644 --- a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/socketcan.cpp +++ b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/socketcan.cpp @@ -49,7 +49,6 @@ #include #include -#include #define MODULE_NAME "UAVCAN_SOCKETCAN" diff --git a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/thread.cpp b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/thread.cpp index 1060c611f2..8ae56867c5 100644 --- a/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/thread.cpp +++ b/src/drivers/uavcan/uavcan_drivers/socketcan/driver/src/thread.cpp @@ -79,7 +79,9 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration) void BusEvent::signalFromInterrupt() { - if (sem_.semcount <= 0) { + int semcount; + + if (sem_getvalue(&sem_, &semcount) == 0 && semcount <= 0) { (void)sem_post(&sem_); } diff --git a/src/drivers/uavcan/uavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp b/src/drivers/uavcan/uavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp index 7e1f21bc6e..8cb70afc0f 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32/driver/src/uc_stm32_thread.cpp @@ -53,7 +53,9 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration) void BusEvent::signalFromInterrupt() { - if (sem_.semcount <= 0) { + int semcount; + + if (sem_getvalue(&sem_, &semcount) == 0 && semcount <= 0) { (void)sem_post(&sem_); } diff --git a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_thread.cpp b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_thread.cpp index 9af0a40a53..6c4fb2b4dd 100644 --- a/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_thread.cpp +++ b/src/drivers/uavcan/uavcan_drivers/stm32h7/driver/src/uc_stm32h7_thread.cpp @@ -53,7 +53,9 @@ bool BusEvent::wait(uavcan::MonotonicDuration duration) void BusEvent::signalFromInterrupt() { - if (sem_.semcount <= 0) { + int semcount; + + if (sem_getvalue(&sem_, &semcount) == 0 && semcount <= 0) { (void)sem_post(&sem_); } diff --git a/src/lib/cdev/CDev.cpp b/src/lib/cdev/CDev.cpp index b5bcce2dd3..f7c0cfdbcc 100644 --- a/src/lib/cdev/CDev.cpp +++ b/src/lib/cdev/CDev.cpp @@ -287,11 +287,21 @@ CDev::poll(file_t *filep, px4_pollfd_struct_t *fds, bool setup) */ fds->revents |= fds->events & poll_state(filep); - /* yes? post the notification */ + /* yes? invoke the callback */ +#ifdef __PX4_NUTTX + + if (fds->revents != 0 && fds->cb != nullptr) { + fds->cb(fds); + } + +#else + if (fds->revents != 0) { px4_sem_post(fds->sem); } +#endif + } ATOMIC_LEAVE; @@ -335,9 +345,19 @@ CDev::poll_notify_one(px4_pollfd_struct_t *fds, px4_pollevent_t events) PX4_DEBUG(" Events fds=%p %0x %0x %0x", fds, fds->revents, fds->events, events); +#ifdef __PX4_NUTTX + + if (fds->revents != 0 && fds->cb != nullptr) { + fds->cb(fds); + } + +#else + if (fds->revents != 0) { px4_sem_post(fds->sem); } + +#endif } int diff --git a/src/lib/cdev/nuttx/cdev_platform.cpp b/src/lib/cdev/nuttx/cdev_platform.cpp index 39de49a55c..9116c1ee63 100644 --- a/src/lib/cdev/nuttx/cdev_platform.cpp +++ b/src/lib/cdev/nuttx/cdev_platform.cpp @@ -87,10 +87,6 @@ unlink : nullptr static int cdev_open(file_t *filp) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { - return -ENODEV; - } - cdev::CDev *cdev = (cdev::CDev *)(filp->f_inode->i_private); return cdev->open(filp); @@ -99,7 +95,7 @@ cdev_open(file_t *filp) static int cdev_close(file_t *filp) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } @@ -111,7 +107,7 @@ cdev_close(file_t *filp) static ssize_t cdev_read(file_t *filp, char *buffer, size_t buflen) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } @@ -123,7 +119,7 @@ cdev_read(file_t *filp, char *buffer, size_t buflen) static ssize_t cdev_write(file_t *filp, const char *buffer, size_t buflen) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } @@ -135,7 +131,7 @@ cdev_write(file_t *filp, const char *buffer, size_t buflen) static off_t cdev_seek(file_t *filp, off_t offset, int whence) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } @@ -147,7 +143,7 @@ cdev_seek(file_t *filp, off_t offset, int whence) static int cdev_ioctl(file_t *filp, int cmd, unsigned long arg) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } @@ -159,7 +155,7 @@ cdev_ioctl(file_t *filp, int cmd, unsigned long arg) static int cdev_poll(file_t *filp, px4_pollfd_struct_t *fds, bool setup) { - if ((filp->f_inode->i_flags & FSNODEFLAG_DELETED) != 0) { + if ((filp->f_inode->i_crefs) == 0) { return -ENODEV; } diff --git a/src/lib/parameters/flashparams/flashfs.c b/src/lib/parameters/flashparams/flashfs.c index 97847fa1a9..e9c2c4d363 100644 --- a/src/lib/parameters/flashparams/flashfs.c +++ b/src/lib/parameters/flashparams/flashfs.c @@ -44,7 +44,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/lib/parameters/flashparams/flashfs32.c b/src/lib/parameters/flashparams/flashfs32.c index 25e97d2563..8d3e703bc0 100644 --- a/src/lib/parameters/flashparams/flashfs32.c +++ b/src/lib/parameters/flashparams/flashfs32.c @@ -48,7 +48,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/lib/parameters/parameters.cpp b/src/lib/parameters/parameters.cpp index 772a5c2a9e..c08bca2984 100644 --- a/src/lib/parameters/parameters.cpp +++ b/src/lib/parameters/parameters.cpp @@ -47,7 +47,11 @@ #include #include +#if defined(__PX4_NUTTX) +#include +#else #include +#endif #include #include diff --git a/src/lib/systemlib/hardfault_log.h b/src/lib/systemlib/hardfault_log.h index 678a0398f3..0379c93668 100644 --- a/src/lib/systemlib/hardfault_log.h +++ b/src/lib/systemlib/hardfault_log.h @@ -258,7 +258,7 @@ typedef struct { _stack_s interrupt; #endif -} stack_t; +} px4_stack_t; /* Not Used for reference only */ @@ -371,7 +371,7 @@ typedef struct { int pid; /* Process ID */ uint32_t regs[XCPTCONTEXT_REGS]; /* Interrupt register save area */ fault_regs_s fault_regs; /* NVIC status */ - stack_t stacks; /* Stack info */ + px4_stack_t stacks; /* Stack info */ #if CONFIG_TASK_NAME_SIZE > 0 char name[CONFIG_TASK_NAME_SIZE + 1]; /* Task name (with NULL * terminator) */ diff --git a/src/modules/mavlink/mavlink_ftp.cpp b/src/modules/mavlink/mavlink_ftp.cpp index 142c7302dc..be13d27a9e 100644 --- a/src/modules/mavlink/mavlink_ftp.cpp +++ b/src/modules/mavlink/mavlink_ftp.cpp @@ -34,7 +34,11 @@ /// @file mavlink_ftp.cpp /// @author px4dev, Don Gagne +#if defined(__PX4_NUTTX) +#include +#else #include +#endif #include #include #include diff --git a/src/modules/mavlink/mavlink_ftp.h b/src/modules/mavlink/mavlink_ftp.h index 344a61997f..506ff6dcd7 100644 --- a/src/modules/mavlink/mavlink_ftp.h +++ b/src/modules/mavlink/mavlink_ftp.h @@ -37,7 +37,7 @@ /// @author px4dev, Don Gagne #include -#include +#include #include #include diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index b773641177..4f4a08d992 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -53,7 +53,11 @@ #include #include #include +#if defined(__PX4_NUTTX) +#include +#else #include +#endif using matrix::wrap_2pi; diff --git a/src/modules/navigator/geofence.cpp b/src/modules/navigator/geofence.cpp index 9d29586bcf..6283929a01 100644 --- a/src/modules/navigator/geofence.cpp +++ b/src/modules/navigator/geofence.cpp @@ -43,7 +43,11 @@ #include "navigation.h" #include +#if defined(__PX4_NUTTX) +#include +#else #include +#endif #include #include diff --git a/src/modules/px4iofirmware/px4io.cpp b/src/modules/px4iofirmware/px4io.cpp index 176d6bd1eb..3b2aa6b07d 100644 --- a/src/modules/px4iofirmware/px4io.cpp +++ b/src/modules/px4iofirmware/px4io.cpp @@ -48,7 +48,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/modules/uxrce_dds_client/CMakeLists.txt b/src/modules/uxrce_dds_client/CMakeLists.txt index fba4ca45cf..8947d3bdb4 100644 --- a/src/modules/uxrce_dds_client/CMakeLists.txt +++ b/src/modules/uxrce_dds_client/CMakeLists.txt @@ -62,6 +62,10 @@ else() set(lib_dir "lib") endif() + if(PX4_PLATFORM STREQUAL "nuttx") + set(c_flags_with_includes "${c_flags_with_includes} -Wno-cast-align -D__PX4_NUTTX") + endif() + include(ExternalProject) ExternalProject_Add( libmicroxrceddsclient_project