Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
8979697
switch to the latest `add_cyphal_library` on Nunavut
serges147 Dec 27, 2024
831d23e
fix PLATFORM_OS_TYPE
serges147 Dec 27, 2024
7ce6fae
added nunavut to the common lib
serges147 Dec 27, 2024
2585693
added nunavut to the common lib
serges147 Dec 30, 2024
8aea215
build fixes
serges147 Dec 31, 2024
428fb4a
remove de/serialization from socket client/server
serges147 Dec 31, 2024
f8ac79e
remove de/serialization from socket client/server
serges147 Dec 31, 2024
d73339f
format
serges147 Jan 2, 2025
db718d6
nolints
serges147 Jan 2, 2025
29450b3
clang-tidy fixes
serges147 Jan 2, 2025
2cf24a5
clang-tidy fixes
serges147 Jan 2, 2025
b51f036
add gtests
serges147 Jan 3, 2025
0e5b6bd
added test presets
serges147 Jan 3, 2025
fff4273
fix test presets
serges147 Jan 3, 2025
259753d
fix test presets
serges147 Jan 3, 2025
c994efb
try unit test failure
serges147 Jan 3, 2025
b8fb6d6
fix unit test failure
serges147 Jan 3, 2025
9cd3dd4
added `ClientPipe` and `ClientRoute` interfaces
serges147 Jan 3, 2025
150c9ca
added `ServerPipe` and `ServerRouter` interfaces
serges147 Jan 3, 2025
3814a48
added `Channel` and `Gateway` entities
serges147 Jan 3, 2025
4b5d628
implemented client side Route-s
serges147 Jan 6, 2025
12a2541
added pipe types
serges147 Jan 6, 2025
286eeb1
fix unit test
serges147 Jan 6, 2025
890ec25
added msg type id
serges147 Jan 7, 2025
561e272
added server router
serges147 Jan 7, 2025
4d33413
deliver initial ch msg
serges147 Jan 7, 2025
9a75626
introduce `Endpoint` entity
serges147 Jan 7, 2025
c402dc7
simplify channel api
serges147 Jan 7, 2025
829372e
type id -> service id
serges147 Jan 7, 2025
e3feb81
client <-> daemon
serges147 Jan 7, 2025
c3cdbcf
`final`-s
serges147 Jan 7, 2025
5e16615
`setEventHandler` -> `subscribe`
serges147 Jan 8, 2025
64d815c
make `Channel` default move constructible/assignable
serges147 Jan 8, 2025
418b8fb
template `Ch` param
serges147 Jan 8, 2025
6041ff8
more CETL_NODISCARD
serges147 Jan 8, 2025
d63bb58
minor fix
serges147 Jan 8, 2025
7f51127
added various gtest matcher and printers
serges147 Jan 9, 2025
672e197
introduce `ErrorCode`
serges147 Jan 9, 2025
3ff6325
`Disconnected` on unregistered gateway send
serges147 Jan 9, 2025
cc119cb
corrected send flow for client/server routers
serges147 Jan 9, 2025
b0ebbb3
impl handleRouteChannelEnd
serges147 Jan 9, 2025
ff41f40
print cmake version
serges147 Jan 9, 2025
2d420dd
fixed bug in handleRouteConnect
serges147 Jan 9, 2025
00651a2
minor fix
serges147 Jan 10, 2025
10aa651
fix potential throwing at destructor of gateways
serges147 Jan 10, 2025
d8d2b82
more error handling
serges147 Jan 10, 2025
ec68492
fix build
serges147 Jan 10, 2025
968249d
Implemented "disconnected" for all gateways which belong to the corre…
serges147 Jan 10, 2025
2f851a3
fix build
serges147 Jan 10, 2025
0c6218f
added `Shutdown` error code
serges147 Jan 10, 2025
aaecd15
build fix
serges147 Jan 10, 2025
2cb01e7
added `payload_size` field
serges147 Jan 10, 2025
77a1a12
fix build
serges147 Jan 10, 2025
a067fae
added spdlog 1.15.0
serges147 Jan 10, 2025
8c19c31
try spdlog
serges147 Jan 13, 2025
842fefd
daemon side logging
serges147 Jan 14, 2025
4e2b60f
client side logging
serges147 Jan 15, 2025
2e4ac06
new line in the end of log
serges147 Jan 15, 2025
b8fa2f2
revert NLs
serges147 Jan 15, 2025
0cbbbb5
remove `flush_on`-s
serges147 Jan 15, 2025
a15cbf8
fix clang-tidy issues
serges147 Jan 15, 2025
d328193
fix clang-tidy issues
serges147 Jan 15, 2025
244b27f
make `getLogger` noexcept
serges147 Jan 15, 2025
80d8e76
make it easier to compile for diff c++ stds
serges147 Jan 15, 2025
ce49d6c
enable CI for all (14,17,20) cpp stds
serges147 Jan 15, 2025
0bf94fe
fix CI
serges147 Jan 15, 2025
2b20ab1
setup unit tests logging
serges147 Jan 15, 2025
30ca87c
implemented server side of `exec_cmd`
serges147 Jan 17, 2025
f2e3ead
added `NodeCommandClient`
serges147 Jan 17, 2025
65c211d
ci fixes
serges147 Jan 17, 2025
cc451c7
ci fixes
serges147 Jan 17, 2025
7853dca
implemented client side of exec cmd
serges147 Jan 21, 2025
53702d4
fix build
serges147 Jan 21, 2025
6e41843
implemented log files flush level
serges147 Jan 22, 2025
25d3811
implemented network socket client/server
serges147 Jan 25, 2025
a00af48
reduced code duplication between net & unix socket client/server
serges147 Jan 26, 2025
277653f
added toml11 4.3.0 dependency
serges147 Jan 26, 2025
d8e1c2f
implemented config
serges147 Jan 26, 2025
69e7e54
extended config file
serges147 Jan 27, 2025
6b215ad
`[cyphal.application]` config section
serges147 Jan 27, 2025
4d0889b
`[logging]` config section
serges147 Jan 27, 2025
d6185d4
`[cyphal.transport]` config section
serges147 Jan 28, 2025
26e7763
fix build
serges147 Jan 28, 2025
7718139
fix style
serges147 Jan 28, 2025
383978c
fix build
serges147 Jan 28, 2025
a7eded1
fix build
serges147 Jan 28, 2025
e8d4558
latest libcyphal
serges147 Jan 28, 2025
0a00cc5
use new TransferIdMap feature of libcyphal
serges147 Jan 30, 2025
e340382
added support for `restart` and `beginSoftwareUpdate` methods
serges147 Jan 30, 2025
7114273
build fix
serges147 Jan 30, 2025
53042fd
style fix
serges147 Jan 30, 2025
edb3a11
fix build
serges147 Jan 30, 2025
79b41ab
first draft of file provider
serges147 Jan 31, 2025
e03f697
implemented file reading
serges147 Jan 31, 2025
c5d1fde
fix build
serges147 Jan 31, 2025
00cee90
fix style
serges147 Jan 31, 2025
6a7f505
fix build
serges147 Feb 1, 2025
9396026
fix build
serges147 Feb 1, 2025
48d76d5
added new `io::socket_address` & `io::OwnFd`
serges147 Feb 2, 2025
803e136
fix macos build
sshirokov-mwb Feb 2, 2025
3dc4034
unit tests for `SocketAddress`
serges147 Feb 3, 2025
479f78a
fix build
serges147 Feb 3, 2025
58e92db
added `socket` and `bind` methods
serges147 Feb 3, 2025
b49195d
switch off "misc-include-cleaner" rule
serges147 Feb 3, 2025
067157e
socket clients now use `SocketAddress` and `OwnFd`
serges147 Feb 3, 2025
f6655a0
added `io::OwnFd::get`
serges147 Feb 3, 2025
8853040
moved `accept` into `SocketAddress`
serges147 Feb 4, 2025
ffadf9d
SO_REUSEADDR & TCP_NODELAY
serges147 Feb 4, 2025
9aaac25
fix mac tests
serges147 Feb 4, 2025
f64c06d
test for `isAnyInet`
serges147 Feb 4, 2025
51d2bd4
implemented list of file server roots
serges147 Feb 4, 2025
b1dff9b
fix style
serges147 Feb 4, 2025
088509b
fix style
serges147 Feb 5, 2025
60e0dd6
switch `read`->`recv` & `write`->`send`
serges147 Feb 5, 2025
dc45d33
fix macos build
sshirokov-mwb Feb 5, 2025
217a315
fix style
serges147 Feb 5, 2025
0f48b68
worst_lateness
serges147 Feb 5, 2025
57f5bf3
proper logging at file provider
serges147 Feb 5, 2025
7d40596
fix unit tests
serges147 Feb 5, 2025
ffb4b1a
enabled socketcan transport support
serges147 Feb 7, 2025
23f7ae7
fix build
serges147 Feb 7, 2025
9b58d2e
fix build
serges147 Feb 7, 2025
79b14f9
fix typo
serges147 Feb 10, 2025
7d9be3d
make SPDLOG v1.x dependency as submodule
serges147 Feb 10, 2025
a159101
make Toml11 v4.3.0 dependency as submodule
serges147 Feb 10, 2025
34a5143
implemented FS 'ListRoots' ipc
serges147 Feb 10, 2025
8a3269f
fix build
serges147 Feb 11, 2025
217bec0
fix build
serges147 Feb 11, 2025
f3a5825
fix build
serges147 Feb 11, 2025
d8b5bb3
Implemented `pushRoot` & `popRoot` of `FileServer`.
serges147 Feb 11, 2025
09cd69f
fix style
serges147 Feb 11, 2025
a8a5ae7
fix build
serges147 Feb 11, 2025
50f0254
fix style
serges147 Feb 11, 2025
0fc86e9
fix build
serges147 Feb 11, 2025
66c11d4
minor fix
serges147 Feb 12, 2025
98cd913
more docs
serges147 Feb 12, 2025
6f8886f
more docs
serges147 Feb 12, 2025
579222c
added unit tests for `ExecCmdServiceImpl` service.
serges147 Feb 13, 2025
0e88ed9
a bit more coverage
serges147 Feb 13, 2025
fbac0b0
remove not in use stuff
serges147 Feb 13, 2025
65fbda5
a bit more tracing
serges147 Feb 13, 2025
ea7c823
implemented partial reading
serges147 Feb 14, 2025
bfde72e
RPi32: reduce cmake requirement 3.27 -> 3.25
serges147 Feb 14, 2025
68b313e
fix build
serges147 Feb 14, 2025
cc10ec7
latest libcyphal and spdlog
serges147 Feb 14, 2025
6be53e6
Disable PSABI warnings on GCC (found on Rpi32)
serges147 Feb 14, 2025
5a745d6
latest libcyphal
serges147 Feb 14, 2025
45481f3
fixed macos build
serges147 Feb 17, 2025
b511e65
fixed incorrect kqueue executor implementation
serges147 Feb 17, 2025
fde2ffb
silence `EINTR` "error" condition
serges147 Feb 18, 2025
bd07684
remove vendor "jetbrains.com/clion" setting - needed only for old XCo…
serges147 Mar 3, 2025
9483443
latest toml11
serges147 Mar 3, 2025
d746242
Merge branch 'main' into sshirokov/file_server
serges147 Mar 3, 2025
3343b3e
Merge branch 'sshirokov/file_server' into sshirokov/macos
serges147 Mar 3, 2025
9cb63de
Fix build
serges147 Mar 3, 2025
2737417
revert back to Nunavut `3.0.preview`
serges147 Mar 3, 2025
4f193f2
Merge branch 'sshirokov/file_server' into sshirokov/macos
serges147 Mar 3, 2025
54f1043
Merge remote-tracking branch 'origin/main' into sshirokov/macos
serges147 Mar 3, 2025
22db993
PR review fixes
serges147 Mar 4, 2025
0a0cb9c
PR review fixes
serges147 Mar 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ set(test_dir "${CMAKE_SOURCE_DIR}/test")
set(include_dir "${CMAKE_SOURCE_DIR}/include")
set(submodules_dir "${CMAKE_SOURCE_DIR}/submodules")

set(CXX_FLAG_SET "")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# Disable PSABI warnings in GCC (on RPi).
list(APPEND CXX_FLAG_SET "-Wno-psabi")
endif()

add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${CXX_FLAG_SET}>")

# clang-format
Expand Down
5 changes: 0 additions & 5 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,6 @@
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++"
},
"vendor": {
"jetbrains.com/clion": {
"toolchain": "Clang19"
}
}
}
],
Expand Down
32 changes: 19 additions & 13 deletions include/ocvsmd/platform/bsd/kqueue_single_threaded_executor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
if (kqueue_result < 0)
{
const auto err = errno;
if (err == EINTR)
{
// Normally, we would just retry a system call (`::kevent`),
// but we need updated timeout (from the main loop).
return cetl::nullopt;
}
return libcyphal::transport::PlatformError{PosixPlatformError{err}};
}
if (kqueue_result == 0)
Expand Down Expand Up @@ -185,7 +191,7 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
AwaitableNode(Self& executor, Callback::Function&& function)
: CallbackNode{executor, std::move(function)}
, fd_{-1}
, events_{0}
, filter_{0}
{
}

Expand All @@ -194,7 +200,7 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
if (fd_ >= 0)
{
KEvent ev{};
EV_SET(&ev, fd_, events_, EV_DELETE, NOTE_DELETE, 0, 0);
EV_SET(&ev, fd_, filter_, EV_DELETE, 0, 0, 0);
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
getExecutor().total_awaitables_--;
}
Expand All @@ -203,14 +209,14 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
AwaitableNode(AwaitableNode&& other) noexcept
: CallbackNode(std::move(static_cast<CallbackNode&&>(other)))
, fd_{std::exchange(other.fd_, -1)}
, events_{std::exchange(other.events_, 0)}
, filter_{std::exchange(other.filter_, 0)}
{
if (fd_ >= 0)
{
KEvent ev{};
EV_SET(&ev, fd_, events_, EV_DELETE, NOTE_DELETE, 0, 0);
EV_SET(&ev, fd_, filter_, EV_DELETE, 0, 0, 0);
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
EV_SET(&ev, fd_, events_, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, this);
EV_SET(&ev, fd_, filter_, EV_ADD, 0, 0, this);
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
}
}
Expand All @@ -224,22 +230,22 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr
return fd_;
}

std::uint32_t events() const noexcept
std::int16_t filter() const noexcept
{
return events_;
return filter_;
}

void setup(const int fd, const std::uint32_t events) noexcept
void setup(const int fd, const std::int16_t filter) noexcept
{
CETL_DEBUG_ASSERT(fd >= 0, "");
CETL_DEBUG_ASSERT(events != 0, "");
CETL_DEBUG_ASSERT(filter != 0, "");

fd_ = fd;
events_ = events | EVFILT_VNODE;
filter_ = filter;

getExecutor().total_awaitables_++;
KEvent ev{};
EV_SET(&ev, fd, events_, EV_ADD | EV_CLEAR, NOTE_WRITE, 0, this);
EV_SET(&ev, fd, filter_, EV_ADD, 0, 0, this);
::kevent(getExecutor().kqueuefd_, &ev, 1, nullptr, 0, nullptr);
}

Expand All @@ -253,8 +259,8 @@ class KqueueSingleThreadedExecutor final : public libcyphal::platform::SingleThr

// MARK: Data members:

int fd_;
std::uint32_t events_;
int fd_;
std::int16_t filter_;

}; // AwaitableNode

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ class EpollSingleThreadedExecutor final : public libcyphal::platform::SingleThre
if (epoll_result < 0)
{
const auto err = errno;
if (err == EINTR)
{
// Normally, we would just retry a system call (`::epoll_wait`),
// but we need updated timeout (from the main loop).
return cetl::nullopt;
}
return libcyphal::transport::PlatformError{PosixPlatformError{err}};
}
if (epoll_result == 0)
Expand Down
6 changes: 5 additions & 1 deletion src/daemon/engine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ add_library(ocvsmd_engine
config.cpp
cyphal/file_provider.cpp
engine.cpp
platform/can/socketcan.c
platform/udp/udp.c
svc/file_server/list_roots_service.cpp
svc/file_server/pop_root_service.cpp
Expand All @@ -62,6 +61,11 @@ target_link_libraries(ocvsmd_engine
PUBLIC ${engine_transpiled}
PUBLIC ocvsmd_common
)
if (${PLATFORM_OS_TYPE} STREQUAL "linux")
target_sources(ocvsmd_engine
PRIVATE platform/can/socketcan.c
)
endif ()
target_include_directories(ocvsmd_engine
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
Expand Down
4 changes: 4 additions & 0 deletions src/daemon/engine/cyphal/transport_helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ struct TransportHelpers

}; // Printers

#ifdef __linux__

struct CanTransientErrorReporter
{
using Report = libcyphal::transport::can::ICanTransport::TransientErrorReport;
Expand Down Expand Up @@ -111,6 +113,8 @@ struct TransportHelpers

}; // CanTransientErrorReporter

#endif // __linux__

struct UdpTransientErrorReporter
{
using Report = libcyphal::transport::udp::IUdpTransport::TransientErrorReport;
Expand Down
2 changes: 2 additions & 0 deletions src/daemon/engine/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,13 @@ cetl::optional<std::string> Engine::init()
}
else
{
#ifdef __linux__
if (auto maybe_can_transport_bag = cyphal::CanTransportBag::make(memory_, executor_, config_))
{
any_transport_bag_ = std::move(maybe_can_transport_bag);
}
else
#endif // __linux__
{
std::string msg = "Failed to create Cyphal transport.";
logger_->error(msg);
Expand Down