Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
d9bcb57
Began work on adding a prefix for the interprocess internal groups
tsaubergine Apr 9, 2026
d2a9450
Finalize ImplementationTag for InterProcessTransporterBase and relate…
Copilot Apr 9, 2026
cc69bbc
Remove extra blank lines in static_group_names.h
Copilot Apr 9, 2026
cf8b647
Remove test log
tsaubergine Apr 9, 2026
d4c89f8
WIP: address review comments - plan outlined
Copilot Apr 9, 2026
9b20b23
Address reviewer comments: template ModemDriverThread on Implementati…
Copilot Apr 9, 2026
fe501b9
Copilot fetch with tags
tsaubergine Apr 9, 2026
712f58d
Add new StandaloneThread for use with the MultiThreadStandaloneApplic…
tsaubergine Apr 9, 2026
cfafb1f
Replace more deprecated Forwarders. Move includes for middleware::Int…
tsaubergine Apr 9, 2026
93ea914
Template the HealthMonitorThread on the correct ImplementationTag; Se…
tsaubergine Apr 9, 2026
803742d
Various cleanups regarding use of zeromq tags where the generic case …
tsaubergine Apr 9, 2026
37b4ab3
Rename tags and tag prefixes to align with Goby style
tsaubergine Apr 9, 2026
d60dece
Add attach_poller() to PollerInterface to poll additional transporters
Copilot Apr 9, 2026
924996d
Address code review: add null check and ownership comment for attach_…
Copilot Apr 9, 2026
14c22bf
Add poller_attach_test: ZMQ + UDPM portals with attach_poller on each…
Copilot Apr 9, 2026
0dc3e28
Minor name changes
tsaubergine Apr 9, 2026
47bbee1
Merge pull request #379 from GobySoft/copilot/attach-poller-interface…
tsaubergine Apr 9, 2026
0b8e693
Merge pull request #378 from GobySoft/copilot/finalize-implementation…
tsaubergine Apr 9, 2026
c9dd954
Update src/middleware/transport/interface.h
tsaubergine Apr 9, 2026
a523534
Update copyright
tsaubergine Apr 9, 2026
def7d82
Merge pull request #383 from GobySoft/copilot/add-udpm-subscribe-publ…
Copilot Apr 10, 2026
1db6d48
gen_goby.jl: Support array form of interprocess/interthread/intermodu…
Copilot Apr 10, 2026
cb0c4dd
Merge branch '3.0' into 3.0-interprocess-implementation-tag
tsaubergine Apr 10, 2026
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
4 changes: 1 addition & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,8 @@ workflows:
<<: *filter-template-non-master
- amd64-noble-build:
<<: *filter-template-non-master


- amd64-noble-minimal-build:
<<: *filter-template-master-only
<<: *filter-template-non-master

- get-orig-source:
<<: *filter-template-master-only
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
fetch-depth: 0 # required to ensure we have tags

- name: Install dependencies
run: |
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ add_custom_command(OUTPUT ShareLink COMMAND ${CMAKE_COMMAND} -E create_symlink $
add_custom_target(share_link ALL DEPENDS ShareLink)


set(GOBY_DEBUG_OPTIONS -Wall -Werror -Wno-error=deprecated-declarations -Wno-sign-compare)
set(GOBY_DEBUG_OPTIONS -Wall -Werror -Wno-sign-compare)
add_compile_options("$<$<CONFIG:DEBUG>:${GOBY_DEBUG_OPTIONS}>")
add_compile_options("$<$<CXX_COMPILER_ID:Clang>:-Wdocumentation>")

Expand Down
3 changes: 2 additions & 1 deletion scripts/update_copyright.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/bin/bash


here=`pwd`

header_strip()
Expand Down Expand Up @@ -57,7 +58,7 @@ EOF
if [ ! -z "$proper_email" ]; then
proper_email=" <${proper_email}>"
fi
if ! grep -q $proper_email /tmp/goby_authors.tmp; then
if ! grep -q "$proper_email" /tmp/goby_authors.tmp; then
echo "// $proper_author$proper_email" >> /tmp/goby_authors.tmp
fi
done
Expand Down
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ endmacro()

## boost
goby_find_required_package(Boost 1.58.0 COMPONENTS system date_time program_options filesystem)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})

protobuf_generate_cpp_dccl(BASE_PROTO_SRCS BASE_PROTO_HDRS
protobuf/option_extensions.proto
Expand Down
2 changes: 1 addition & 1 deletion src/acomms/amac/mac_manager.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2010-2023:
// Copyright 2010-2026:
// GobySoft, LLC (2013-)
// Massachusetts Institute of Technology (2007-2014)
// Community contributors (see AUTHORS file)
Expand Down
17 changes: 16 additions & 1 deletion src/acomms/modemdriver/iridium_driver.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2013-2025:
// Copyright 2013-2026:
// GobySoft, LLC (2013-)
// Massachusetts Institute of Technology (2007-2014)
// Community contributors (see AUTHORS file)
Expand Down Expand Up @@ -31,7 +31,22 @@
#include <boost/function.hpp> // for function
#include <boost/signals2/expired_slot.hpp> // for expired_slot
#include <boost/signals2/signal.hpp> // for signal

// Deprecation warning in Boost 1.83
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__)
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
#include <boost/statechart/state_machine.hpp> // for state_mac...
#if defined(__clang__)
# pragma clang diagnostic pop
#elif defined(__GNUC__)
# pragma GCC diagnostic pop
#endif

#include <cerrno> // for errno
#include <chrono> // for operator/
#include <cstring> // for strerror
Expand Down
2 changes: 1 addition & 1 deletion src/acomms/modemdriver/mm_driver.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2009-2021:
// Copyright 2009-2026:
// GobySoft, LLC (2013-)
// Massachusetts Institute of Technology (2007-2014)
// Community contributors (see AUTHORS file)
Expand Down
1 change: 0 additions & 1 deletion src/acomms/queue/queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
// Community contributors (see AUTHORS file)
// File authors:
// Toby Schneider <toby@gobysoft.org>
// Copilot <198982749+Copilot@users.noreply.github.com>
//
//
// This file is part of the Goby Underwater Autonomy Project Libraries
Expand Down
2 changes: 1 addition & 1 deletion src/acomms/queue/queue_manager.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2009-2025:
// Copyright 2009-2026:
// GobySoft, LLC (2013-)
// Massachusetts Institute of Technology (2007-2014)
// Community contributors (see AUTHORS file)
Expand Down
1 change: 1 addition & 0 deletions src/apps/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
add_subdirectory(acomms)
add_subdirectory(util)
add_subdirectory(middleware)
add_subdirectory(udpm)

if(build_zeromq)
add_subdirectory(zeromq)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2011-2021:
// Copyright 2011-2026:
// GobySoft, LLC (2013-)
// Massachusetts Institute of Technology (2007-2014)
// Community contributors (see AUTHORS file)
Expand Down
12 changes: 6 additions & 6 deletions src/apps/acomms/rockblock_simulator/rockblock_simulator.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2023:
// Copyright 2023-2026:
// GobySoft, LLC (2013-)
// Community contributors (see AUTHORS file)
// File authors:
Expand Down Expand Up @@ -99,7 +99,7 @@ class RockBLOCKSimulator
};

class RockBLOCKMTHTTPEndpointThread
: public goby::middleware::SimpleThread<protobuf::RockBLOCKSimulatorConfig>
: public goby::middleware::StandaloneThread<protobuf::RockBLOCKSimulatorConfig>
{
public:
RockBLOCKMTHTTPEndpointThread(const protobuf::RockBLOCKSimulatorConfig cfg);
Expand All @@ -113,11 +113,11 @@ class RockBLOCKMTHTTPEndpointThread
class RockBLOCKPTYThread
: public goby::middleware::io::detail::PTYThread<
pty_in, pty_out, goby::middleware::io::PubSubLayer::INTERTHREAD,
goby::middleware::io::PubSubLayer::INTERTHREAD, goby::middleware::SimpleThread>
goby::middleware::io::PubSubLayer::INTERTHREAD, goby::middleware::StandaloneThread>
{
using Base = goby::middleware::io::detail::PTYThread<
pty_in, pty_out, goby::middleware::io::PubSubLayer::INTERTHREAD,
goby::middleware::io::PubSubLayer::INTERTHREAD, goby::middleware::SimpleThread>;
goby::middleware::io::PubSubLayer::INTERTHREAD, goby::middleware::StandaloneThread>;

public:
RockBLOCKPTYThread(const goby::middleware::protobuf::PTYConfig& config, int index)
Expand Down Expand Up @@ -314,7 +314,7 @@ void goby::apps::acomms::RockBLOCKSimulator::process_command_data(
std::string rx_msg{0, SBD_FIELD_SIZE_BYTES};
unsigned message_size = modem_data.mt_message->size();
rx_msg[0] = (message_size >> SBD_BITS_IN_BYTE) & 0xFF;
rx_msg[1] = (message_size)&0xFF;
rx_msg[1] = (message_size) & 0xFF;
rx_msg += *modem_data.mt_message;
unsigned int csum = goby::acomms::iridium::sbd_csum(*modem_data.mt_message);
const int bits_in_byte = 8;
Expand Down Expand Up @@ -450,7 +450,7 @@ void goby::apps::acomms::RockBLOCKSimulator::write_mo_message(int index)

goby::apps::acomms::RockBLOCKMTHTTPEndpointThread::RockBLOCKMTHTTPEndpointThread(
const protobuf::RockBLOCKSimulatorConfig cfg)
: goby::middleware::SimpleThread<protobuf::RockBLOCKSimulatorConfig>(cfg)
: goby::middleware::StandaloneThread<protobuf::RockBLOCKSimulatorConfig>(cfg)
{
for (const auto& imei_to_id : cfg.imei_to_id()) imei_in_use_.insert(imei_to_id.imei());

Expand Down
4 changes: 4 additions & 0 deletions src/apps/middleware/goby_tool/tool.proto
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ message GobyToolConfig
short_help_msg: "Interact with ZeroMQ Goby pub/sub",
external_command: "goby_zeromq_tool"
}];
udpm = 11 [(goby.ev).cfg = {
short_help_msg: "Interact with UDPM Goby pub/sub",
external_command: "goby_udpm_tool"
}];

// middleware/marshalling
protobuf = 20 [(goby.ev).cfg = {
Expand Down
1 change: 1 addition & 0 deletions src/apps/udpm/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_subdirectory(udpm_tool)
4 changes: 4 additions & 0 deletions src/apps/udpm/udpm_tool/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_executable(goby_udpm_tool
udpm_tool.cpp
)
target_link_libraries(goby_udpm_tool goby)
170 changes: 170 additions & 0 deletions src/apps/udpm/udpm_tool/udpm_tool.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
// Copyright 2026:
// GobySoft, LLC (2013-)
// Community contributors (see AUTHORS file)
// File authors:
// Toby Schneider <toby@gobysoft.org>
//
//
// This file is part of the Goby Underwater Autonomy Project Binaries
// ("The Goby Binaries").
//
// The Goby Binaries are free software: you can redistribute them and/or modify
// them under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// The Goby Binaries are distributed in the hope that they will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Goby. If not, see <http://www.gnu.org/licenses/>.

#include "goby/middleware/application/configuration_reader.h"
#include "goby/middleware/application/interface.h"
#include "goby/middleware/application/tool.h"
#include "goby/middleware/protobuf/tool_config.pb.h"
#include "goby/middleware/tool/publish_subscribe_tool.h"
#include "goby/udpm/application/single_thread.h"
#include "goby/udpm/protobuf/tool_config.pb.h"

namespace goby
{
namespace apps
{
namespace udpm
{
class UDPMToolConfigurator
: public goby::middleware::ProtobufConfigurator<goby::udpm::protobuf::UDPMToolConfig>
{
public:
UDPMToolConfigurator(int argc, char* argv[])
: goby::middleware::ProtobufConfigurator<goby::udpm::protobuf::UDPMToolConfig>(argc, argv)
{
auto& cfg = mutable_cfg();
if (!cfg.app().glog_config().has_tty_verbosity())
cfg.mutable_app()->mutable_glog_config()->set_tty_verbosity(
goby::util::protobuf::GLogConfig::WARN);
}
};

class UDPMTool : public goby::middleware::Application<goby::udpm::protobuf::UDPMToolConfig>
{
public:
UDPMTool();
~UDPMTool() override {}

private:
// never gets called
void run() override { assert(false); }

private:
};

class UDPMPublishTool
: public goby::udpm::SingleThreadApplication<goby::middleware::protobuf::PublishToolConfig>,
public goby::middleware::ToolSharedLibraryLoader
{
public:
UDPMPublishTool();
~UDPMPublishTool() override {}
void loop() override;

private:
};

class UDPMSubscribeTool
: public goby::udpm::SingleThreadApplication<goby::middleware::protobuf::SubscribeToolConfig>,
public goby::middleware::ToolSharedLibraryLoader
{
public:
UDPMSubscribeTool();
~UDPMSubscribeTool() override {}

private:
std::map<int, std::unique_ptr<goby::middleware::log::LogPlugin>> plugins_;
};

} // namespace udpm
} // namespace apps
} // namespace goby

int main(int argc, char* argv[])
{
return goby::run<goby::apps::udpm::UDPMTool>(
goby::apps::udpm::UDPMToolConfigurator(argc, argv));
}

goby::apps::udpm::UDPMTool::UDPMTool()
{
goby::middleware::ToolHelper tool_helper(
app_cfg().app().binary(), app_cfg().app().tool_cfg(),
goby::udpm::protobuf::UDPMToolConfig::Action_descriptor());

if (!tool_helper.perform_action(app_cfg().action()))
{
switch (app_cfg().action())
{
case goby::udpm::protobuf::UDPMToolConfig::help:
int action_for_help;
if (!tool_helper.help(&action_for_help))
{
switch (action_for_help)
{
case goby::udpm::protobuf::UDPMToolConfig::publish:
tool_helper.help<goby::apps::udpm::UDPMPublishTool>(action_for_help);
break;

case goby::udpm::protobuf::UDPMToolConfig::subscribe:
tool_helper.help<goby::apps::udpm::UDPMSubscribeTool>(action_for_help);
break;

default:
throw(goby::Exception(
"Help was expected to be handled by external tool"));
break;
}
}
break;

case goby::udpm::protobuf::UDPMToolConfig::publish:
tool_helper.run_subtool<goby::apps::udpm::UDPMPublishTool>();
break;

case goby::udpm::protobuf::UDPMToolConfig::subscribe:
tool_helper.run_subtool<goby::apps::udpm::UDPMSubscribeTool>();
break;

default:
// perform action will call 'exec' if an external tool performs the action,
// so if we are continuing, this didn't happen
throw(goby::Exception("Action was expected to be handled by external tool"));
break;
}
}

quit(0);
}

goby::apps::udpm::UDPMPublishTool::UDPMPublishTool()
: goby::udpm::SingleThreadApplication<goby::middleware::protobuf::PublishToolConfig>(
1.0 * boost::units::si::hertz),
goby::middleware::ToolSharedLibraryLoader(app_cfg().load_shared_library())
{
goby::middleware::tool::publish_tool_impl(interprocess(), cfg(), "goby udpm publish");
}

void goby::apps::udpm::UDPMPublishTool::loop()
{
static int i = 0;
++i;
if (i > 1) // exit on second call of loop, plenty of time for publish to go through
quit(0);
}

goby::apps::udpm::UDPMSubscribeTool::UDPMSubscribeTool()
: goby::middleware::ToolSharedLibraryLoader(app_cfg().load_shared_library())
{
goby::middleware::tool::subscribe_tool_impl(interprocess(), cfg(), plugins_);
}
Loading