Upgrading from SDK 2024.x to 2026.x
This guide provides instructions on upgrading an existing SDK 2024.x based project to SDK 2026.x.
Inherited getXxxMessage Methods
What Changed
- The abstract
getXxxMessage methods defined by services to generate the appropriate response message for incoming message of internal event was changed to return a std::unique_ptr instead of a message instance.
How to Migrate
- Update all
getXxxMessage methods to return a std::unique_ptr.
Example
In 2024.x
| // .h file
openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose getReportGlobalPose(openjaus::mobility_v1_1::globalposesensor::QueryGlobalPose* queryGlobalPose) override;
// .cpp file
openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose MyComponent::getReportGlobalPose(openjaus::mobility_v1_1::globalposesensor::QueryGlobalPose* queryGlobalPose)
{
openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose reportGlobalPose;
// Populate outgoing ReportGlobalPose message based on incoming QueryGlobalPose message and current data
return reportGlobalPose;
}
|
In 2026.x
| // .h file
std::unique_ptr<openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose> getReportGlobalPose(openjaus::mobility_v1_1::globalposesensor::QueryGlobalPose* queryGlobalPose) override;
// .cpp file
std::unique_ptr<openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose> MyComponent::getReportGlobalPose(openjaus::mobility_v1_1::globalposesensor::QueryGlobalPose* queryGlobalPose)
{
auto reportGlobalPose = std::make_unique<openjaus::mobility_v1_1::globalposesensor::ReportGlobalPose>();
// Populate outgoing std::unique_ptr<ReportGlobalPose> message based on incoming QueryGlobalPose message and current data
// If a ReportGlobalPose message cannot be populated with valid data then returning a nullptr will skip sending the message.
return reportGlobalPose;
}
|
IOP Addressing Support
What Changed
- The method used to attach the IOP addressing supported to a Component has changed from
Component::setAddressProvider to Component::registerAddressProvider.
- The parameter passed to
Component::registerAddressProvider is different from the paremeter previously passed to Component::setAddressProvider.
How to Migrate
- Replace the use of
Component::setAddressProvider with Component::registerAddressProvider.
- Replace the raw pointer provided to
Component::setAddressProvider with a std::shared_ptr<openjaus::iop_v7::AddressProvider> instance.
Example
In 2024.x
| // .h file
#include <openjaus/Components/Base.h>
#include <openjaus/iop_v6/AddressProvider.h>
class MyComponent :
public virtual openjaus::mobility_v1_1::services::GlobalPoseSensor,
public openjaus::components::Base
public:
MyComponent(const std::string& name);
~MyComponent() override = default;
// ...
private:
openjaus::iop_v6::AddressProvider m_addressProvider;
}
// .cpp file
MyComponent::MyComponent(const std::string& name) :
Base(name),
m_addressProvider(this)
{
Component::setAddressProvider(&m_addressProvider);
// ...
}
|
In 2026.x
| // .cpp file
#include <openjaus/iop_v7/AddressProvider.h>
MyComponent::MyComponent(const std::string& name) :
Base(name),
m_addressProvider(this)
{
Component::registerAddressProvider(std::make_shared<openjaus::iop_v7::AddressProvider>(this));
// ...
}
|