Loading automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h +10 −4 Original line number Diff line number Diff line Loading @@ -60,6 +60,8 @@ struct VmsLayer { }; struct VmsLayerAndPublisher { VmsLayerAndPublisher(VmsLayer layer, int publisher_id) : layer(layer), publisher_id(publisher_id) {} VmsLayer layer; int publisher_id; }; Loading Loading @@ -162,12 +164,16 @@ std::unique_ptr<VehiclePropValue> createAvailabilityRequest(); std::unique_ptr<VehiclePropValue> createSubscriptionsRequest(); // Creates a VehiclePropValue containing a message of type VmsMessageType.DATA. // Returns a nullptr if the byte string in bytes is empty. // Returns a nullptr if the vms_packet string in bytes is empty or if the layer_publisher // information in VmsLayerAndPublisher format is missing the later or publisher // information. // // For example, to build a VehiclePropValue message containing a proto, the caller // should convert the proto to a byte string using the SerializeToString proto // API, then use this inteface to build the VehicleProperty. std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes); // should first convert the proto to a byte string (vms_packet) using the // SerializeToString proto API. Then, it use this interface to build the VehicleProperty // by passing publisher and layer information (layer_publisher) and the vms_packet. std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo( const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet); // Creates a VehiclePropValue containing a message of type // VmsMessageType.PUBLISHER_ID_REQUEST with the given publisher information. Loading automotive/vehicle/2.0/default/common/src/VmsUtils.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -126,10 +126,13 @@ std::unique_ptr<VehiclePropValue> createSubscriptionsRequest() { return result; } std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes) { auto result = createBaseVmsMessage(kMessageTypeSize); result->value.int32Values = hidl_vec<int32_t>{toInt(VmsMessageType::DATA)}; result->value.bytes = std::vector<uint8_t>(bytes.begin(), bytes.end()); std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo( const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet) { auto result = createBaseVmsMessage(kMessageTypeSize + kLayerAndPublisherSize); result->value.int32Values = hidl_vec<int32_t>{ toInt(VmsMessageType::DATA), layer_publisher.layer.type, layer_publisher.layer.subtype, layer_publisher.layer.version, layer_publisher.publisher_id}; result->value.bytes = std::vector<uint8_t>(vms_packet.begin(), vms_packet.end()); return result; } Loading automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -139,12 +139,23 @@ TEST(VmsUtilsTest, subscriptionsMessage) { } TEST(VmsUtilsTest, dataMessage) { std::string bytes = "aaa"; auto message = createDataMessage(bytes); const std::string bytes = "aaa"; const VmsLayerAndPublisher layer_and_publisher(VmsLayer(2, 0, 1), 123); auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes); ASSERT_NE(message, nullptr); EXPECT_TRUE(isValidVmsMessage(*message)); EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE)); EXPECT_EQ(message->value.int32Values.size(), 0x1ul); EXPECT_EQ(message->value.int32Values.size(), 0x5ul); EXPECT_EQ(message->value.int32Values[0], toInt(VmsMessageType::DATA)); // Layer EXPECT_EQ(message->value.int32Values[1], 2); EXPECT_EQ(message->value.int32Values[2], 0); EXPECT_EQ(message->value.int32Values[3], 1); // Publisher ID EXPECT_EQ(message->value.int32Values[4], 123); EXPECT_EQ(parseMessageType(*message), VmsMessageType::DATA); EXPECT_EQ(message->value.bytes.size(), bytes.size()); EXPECT_EQ(memcmp(message->value.bytes.data(), bytes.data(), bytes.size()), 0); Loading @@ -164,8 +175,9 @@ TEST(VmsUtilsTest, invalidMessageType) { } TEST(VmsUtilsTest, parseDataMessage) { std::string bytes = "aaa"; auto message = createDataMessage(bytes); const std::string bytes = "aaa"; const VmsLayerAndPublisher layer_and_publisher(VmsLayer(1, 0, 1), 123); auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes); auto data_str = parseData(*message); ASSERT_FALSE(data_str.empty()); EXPECT_EQ(data_str, bytes); Loading Loading
automotive/vehicle/2.0/default/common/include/vhal_v2_0/VmsUtils.h +10 −4 Original line number Diff line number Diff line Loading @@ -60,6 +60,8 @@ struct VmsLayer { }; struct VmsLayerAndPublisher { VmsLayerAndPublisher(VmsLayer layer, int publisher_id) : layer(layer), publisher_id(publisher_id) {} VmsLayer layer; int publisher_id; }; Loading Loading @@ -162,12 +164,16 @@ std::unique_ptr<VehiclePropValue> createAvailabilityRequest(); std::unique_ptr<VehiclePropValue> createSubscriptionsRequest(); // Creates a VehiclePropValue containing a message of type VmsMessageType.DATA. // Returns a nullptr if the byte string in bytes is empty. // Returns a nullptr if the vms_packet string in bytes is empty or if the layer_publisher // information in VmsLayerAndPublisher format is missing the later or publisher // information. // // For example, to build a VehiclePropValue message containing a proto, the caller // should convert the proto to a byte string using the SerializeToString proto // API, then use this inteface to build the VehicleProperty. std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes); // should first convert the proto to a byte string (vms_packet) using the // SerializeToString proto API. Then, it use this interface to build the VehicleProperty // by passing publisher and layer information (layer_publisher) and the vms_packet. std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo( const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet); // Creates a VehiclePropValue containing a message of type // VmsMessageType.PUBLISHER_ID_REQUEST with the given publisher information. Loading
automotive/vehicle/2.0/default/common/src/VmsUtils.cpp +7 −4 Original line number Diff line number Diff line Loading @@ -126,10 +126,13 @@ std::unique_ptr<VehiclePropValue> createSubscriptionsRequest() { return result; } std::unique_ptr<VehiclePropValue> createDataMessage(const std::string& bytes) { auto result = createBaseVmsMessage(kMessageTypeSize); result->value.int32Values = hidl_vec<int32_t>{toInt(VmsMessageType::DATA)}; result->value.bytes = std::vector<uint8_t>(bytes.begin(), bytes.end()); std::unique_ptr<VehiclePropValue> CreateDataMessageWithLayerPublisherInfo( const VmsLayerAndPublisher& layer_publisher, const std::string& vms_packet) { auto result = createBaseVmsMessage(kMessageTypeSize + kLayerAndPublisherSize); result->value.int32Values = hidl_vec<int32_t>{ toInt(VmsMessageType::DATA), layer_publisher.layer.type, layer_publisher.layer.subtype, layer_publisher.layer.version, layer_publisher.publisher_id}; result->value.bytes = std::vector<uint8_t>(vms_packet.begin(), vms_packet.end()); return result; } Loading
automotive/vehicle/2.0/default/tests/VmsUtils_test.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -139,12 +139,23 @@ TEST(VmsUtilsTest, subscriptionsMessage) { } TEST(VmsUtilsTest, dataMessage) { std::string bytes = "aaa"; auto message = createDataMessage(bytes); const std::string bytes = "aaa"; const VmsLayerAndPublisher layer_and_publisher(VmsLayer(2, 0, 1), 123); auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes); ASSERT_NE(message, nullptr); EXPECT_TRUE(isValidVmsMessage(*message)); EXPECT_EQ(message->prop, toInt(VehicleProperty::VEHICLE_MAP_SERVICE)); EXPECT_EQ(message->value.int32Values.size(), 0x1ul); EXPECT_EQ(message->value.int32Values.size(), 0x5ul); EXPECT_EQ(message->value.int32Values[0], toInt(VmsMessageType::DATA)); // Layer EXPECT_EQ(message->value.int32Values[1], 2); EXPECT_EQ(message->value.int32Values[2], 0); EXPECT_EQ(message->value.int32Values[3], 1); // Publisher ID EXPECT_EQ(message->value.int32Values[4], 123); EXPECT_EQ(parseMessageType(*message), VmsMessageType::DATA); EXPECT_EQ(message->value.bytes.size(), bytes.size()); EXPECT_EQ(memcmp(message->value.bytes.data(), bytes.data(), bytes.size()), 0); Loading @@ -164,8 +175,9 @@ TEST(VmsUtilsTest, invalidMessageType) { } TEST(VmsUtilsTest, parseDataMessage) { std::string bytes = "aaa"; auto message = createDataMessage(bytes); const std::string bytes = "aaa"; const VmsLayerAndPublisher layer_and_publisher(VmsLayer(1, 0, 1), 123); auto message = CreateDataMessageWithLayerPublisherInfo(layer_and_publisher, bytes); auto data_str = parseData(*message); ASSERT_FALSE(data_str.empty()); EXPECT_EQ(data_str, bytes); Loading