Skip to content

Commit ca4dea0

Browse files
committed
feat: more flexible code gen
1 parent 1d6616d commit ca4dea0

6 files changed

Lines changed: 28 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@ add_library(${PROJECT_NAME} STATIC
2727
)
2828
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
2929

30-
target_include_directories(${PROJECT_NAME}
31-
PUBLIC
32-
${CMAKE_CURRENT_LIST_DIR}/include
33-
${CMAKE_CURRENT_LIST_DIR}/Libs/libcanard_v0
34-
${CMAKE_CURRENT_LIST_DIR}/Libs
3530

36-
${DSDL_OUT_DIR}/include
31+
32+
target_include_directories(libdcnode PUBLIC
33+
${CMAKE_CURRENT_LIST_DIR}/include
34+
${CMAKE_CURRENT_LIST_DIR}/Libs
35+
${DSDL_OUT_DIR}/include
36+
)
37+
38+
39+
set_source_files_properties(${SERIALIZATION_SOURCES}
40+
PROPERTIES
41+
LANGUAGE C
42+
COMPILE_FLAGS "-Wno-switch-default -fno-strict-aliasing -Wno-undef"
3743
)
3844
target_compile_options(${PROJECT_NAME} PRIVATE
3945
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-address-of-packed-member>

cmake/generate_dsdl.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,11 @@ if(_run_dsdlc)
3030
else()
3131
message(STATUS "DSDL output exists and is not empty, skipping generation: ${DSDL_OUT_DIR}")
3232
endif()
33+
34+
file(GLOB_RECURSE _dc_gen_headers "${DSDL_OUT_DIR}/include/*.h")
35+
foreach(_h ${_dc_gen_headers})
36+
file(READ "${_h}" _txt)
37+
string(REPLACE "#include <canard.h>" "#include \"libcanard_v0/canard.h\"" _txt "${_txt}")
38+
file(WRITE "${_h}" "${_txt}")
39+
endforeach()
40+

include/libdcnode/platform.hpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,7 @@ namespace libdcnode
5454
// Get the platform api (throws if not initialized)
5555
const PlatformApi &getPlatformApi() const
5656
{
57-
if (!_initialized || _platform == nullptr)
58-
{
59-
throw std::runtime_error(
60-
"PlatformManager not initialized. "
61-
"Call PlatformManager::instance().init(api) first!");
62-
}
57+
assert(_initialized && _platform != nullptr);
6358
return *_platform;
6459
}
6560

include/libdcnode/pub.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ namespace libdcnode
5555

5656
LIBDCNODE_DEFINE_PUB_TRAITS(::uavcan_equipment_power_CircuitStatus, UAVCAN_EQUIPMENT_POWER_CIRCUITSTATUS)
5757
LIBDCNODE_DEFINE_PUB_TRAITS(::uavcan_equipment_power_BatteryInfo, UAVCAN_EQUIPMENT_POWER_BATTERYINFO)
58+
LIBDCNODE_DEFINE_PUB_TRAITS(::uavcan_equipment_ahrs_RawIMU, UAVCAN_EQUIPMENT_AHRS_RAWIMU)
59+
LIBDCNODE_DEFINE_PUB_TRAITS(::uavcan_equipment_ahrs_MagneticFieldStrength2, UAVCAN_EQUIPMENT_AHRS_MAGNETICFIELDSTRENGTH2)
5860

5961
template <typename MessageType>
6062
class DronecanPub

include/libdcnode/subscriber.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ DEFINE_SUBSCRIBER_TRAITS(AhrsSolution_t,
6060
dronecan_equipment_ahrs_solution_deserialize)
6161

6262
template <typename MessageType>
63-
class DronecanSubscribe
63+
class DronecanSubscriber
6464
{
6565
public:
66-
DronecanSubscribe() = default;
66+
DronecanSubscriber() = default;
6767

6868
int8_t init(void (*callback)(const MessageType &), bool (*filter_)(const MessageType &) = nullptr)
6969
{
@@ -82,7 +82,7 @@ class DronecanSubscribe
8282
return;
8383
}
8484

85-
auto instance = static_cast<DronecanSubscribe *>(instances[transfer->sub_id]);
85+
auto instance = static_cast<DronecanSubscriber *>(instances[transfer->sub_id]);
8686
if (instance == nullptr)
8787
{
8888
return;

src/dronecan.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ static bool shouldAcceptTransfer(const CanardInstance *ins,
8383
uint8_t source_node_id);
8484
static void onTransferReceived(CanardInstance *ins, CanardRxTransfer *transfer);
8585
static uint8_t uavcanProcessSending();
86-
static bool uavcanProcessReceiving();
87-
static void uavcanSpinNodeStatus();
86+
static bool uavcanProcessReceiving(uint32_t crnt_time_ms);
87+
static void uavcanSpinNodeStatus(uint32_t now_ms);
8888

8989
static void uavcanProtocolGetNodeInfoHandle(CanardRxTransfer *transfer);
9090
static void uavcanProtocolParamGetSetHandle(CanardRxTransfer *transfer);

0 commit comments

Comments
 (0)