diff --git a/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.cpp b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.cpp new file mode 100644 index 00000000..92c160ad --- /dev/null +++ b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.cpp @@ -0,0 +1,25 @@ +#include "Conversion/Messages/std_msgs/StdMsgsInt32Converter.h" + + +UStdMsgsInt32Converter::UStdMsgsInt32Converter() +{ + _MessageType = "std_msgs/Int32"; +} + +bool UStdMsgsInt32Converter::ConvertIncomingMessage(const ROSBridgePublishMsg* message, TSharedPtr &BaseMsg) { + bool KeyFound = false; + + int32 Data = GetInt32FromBSON(TEXT("msg.data"), message->full_msg_bson_, KeyFound); + if (!KeyFound) return false; + + BaseMsg = TSharedPtr(new ROSMessages::std_msgs::Int32(Data)); + return true; +} + +bool UStdMsgsInt32Converter::ConvertOutgoingMessage(TSharedPtr BaseMsg, bson_t** message) { + auto Int32Message = StaticCastSharedPtr(BaseMsg); + *message = BCON_NEW( + "data", BCON_INT32(Int32Message->_Data) + ); + return true; +} diff --git a/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.h b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.h new file mode 100644 index 00000000..2bffa800 --- /dev/null +++ b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsInt32Converter.h @@ -0,0 +1,18 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Conversion/Messages/BaseMessageConverter.h" +#include "std_msgs/Int32.h" +#include "StdMsgsInt32Converter.generated.h" + + +UCLASS() +class ROSINTEGRATION_API UStdMsgsInt32Converter: public UBaseMessageConverter +{ + GENERATED_BODY() + +public: + UStdMsgsInt32Converter(); + virtual bool ConvertIncomingMessage(const ROSBridgePublishMsg* message, TSharedPtr &BaseMsg); + virtual bool ConvertOutgoingMessage(TSharedPtr BaseMsg, bson_t** message); +}; diff --git a/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.cpp b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.cpp new file mode 100644 index 00000000..45366be7 --- /dev/null +++ b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.cpp @@ -0,0 +1,26 @@ +#include "Conversion/Messages/std_msgs/StdMsgsUInt8Converter.h" + + +UStdMsgsUInt8Converter::UStdMsgsUInt8Converter() +{ + _MessageType = "std_msgs/UInt8"; +} + +bool UStdMsgsUInt8Converter::ConvertIncomingMessage(const ROSBridgePublishMsg* message, TSharedPtr &BaseMsg) { + bool KeyFound = false; + + int32 DataAsInt32 = GetInt32FromBSON(TEXT("msg.data"), message->full_msg_bson_, KeyFound); + if (!KeyFound) return false; + uint8 Data = static_cast(DataAsInt32); + BaseMsg = TSharedPtr(new ROSMessages::std_msgs::UInt8(Data)); + return true; +} + +bool UStdMsgsUInt8Converter::ConvertOutgoingMessage(TSharedPtr BaseMsg, bson_t** message) { + auto UInt8Message = StaticCastSharedPtr(BaseMsg); + int32 DataAsInt32 = static_cast(UInt8Message->_Data); + *message = BCON_NEW( + "data", BCON_INT32(DataAsInt32) + ); + return true; +} diff --git a/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.h b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.h new file mode 100644 index 00000000..d36b9cb3 --- /dev/null +++ b/Source/ROSIntegration/Private/Conversion/Messages/std_msgs/StdMsgsUInt8Converter.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include "Conversion/Messages/BaseMessageConverter.h" +#include "std_msgs/UInt8.h" +#include "StdMsgsUInt8Converter.generated.h" + + +UCLASS() +class ROSINTEGRATION_API UStdMsgsUInt8Converter: public UBaseMessageConverter +{ + GENERATED_BODY() + +public: + UStdMsgsUInt8Converter(); + virtual bool ConvertIncomingMessage(const ROSBridgePublishMsg* message, TSharedPtr &BaseMsg); + virtual bool ConvertOutgoingMessage(TSharedPtr BaseMsg, bson_t** message); +}; diff --git a/Source/ROSIntegration/Public/std_msgs/Int32.h b/Source/ROSIntegration/Public/std_msgs/Int32.h new file mode 100644 index 00000000..b3af8393 --- /dev/null +++ b/Source/ROSIntegration/Public/std_msgs/Int32.h @@ -0,0 +1,20 @@ +#pragma once + +#include "ROSBaseMsg.h" + +namespace ROSMessages{ + namespace std_msgs { + class Int32 : public FROSBaseMsg { + public: + Int32() : Int32(0.f) {} + + Int32(float data) { + _MessageType = "std_msgs/Int32"; + _Data = data; + } + + //private: + int32 _Data; + }; + } +} diff --git a/Source/ROSIntegration/Public/std_msgs/UInt8.h b/Source/ROSIntegration/Public/std_msgs/UInt8.h new file mode 100644 index 00000000..bb3b191f --- /dev/null +++ b/Source/ROSIntegration/Public/std_msgs/UInt8.h @@ -0,0 +1,20 @@ +#pragma once + +#include "ROSBaseMsg.h" + +namespace ROSMessages{ + namespace std_msgs { + class UInt8 : public FROSBaseMsg { + public: + UInt8() : UInt8(0) {} + + UInt8(uint8 data) { + _MessageType = "std_msgs/UInt8"; + _Data = data; + } + + //private: + uint8 _Data; + }; + } +}