Skip to content

Commit a5f9528

Browse files
committed
adding changes related someip
1 parent 79f56e0 commit a5f9528

8 files changed

Lines changed: 88 additions & 30 deletions

File tree

simulator/run.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import os
2323
import sys
24-
24+
from uprotocol_vsomeip import helper
2525
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
2626

2727
import asyncio
@@ -62,10 +62,12 @@ def set_transport(selected_utransport):
6262

6363

6464
@socketio.on(constant.API_SET_SOMEIP_CONFIG, namespace=constant.NAMESPACE)
65-
def set_someip_config(localip, multicastip):
65+
def set_someip_config(localip, multicastip,is_someip_serializer_enabled=False):
6666
print(f"set set_someip_config called {localip}, {multicastip}")
6767
someip_helper.someip_entity = someip_helper.temp_someip_entity
6868
someip_helper.temp_someip_entity = []
69+
someip_helper.is_serializer_enabled=is_someip_serializer_enabled
70+
helper.is_serializer_enabled =is_someip_serializer_enabled
6971
transport_config.set_someip_config(localip, multicastip)
7072
tdk_apis.refresh_transport(transport_config)
7173
time.sleep(0.5)
@@ -152,4 +154,4 @@ def set_reset_flag():
152154

153155
if __name__ == "__main__":
154156
# Run the server
155-
socketio.run(app, allow_unsafe_werkzeug=True, debug=debug)
157+
socketio.run(app, allow_unsafe_werkzeug=True,port=5000, debug=debug)

simulator/ui/templates/includes/sidebar.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@
162162

163163
<div class="sidebarFooter copyright-content">
164164
<div>
165-
<span>Simulator Version - 0.1.1-dev</span> &nbsp
165+
<span>Simulator Version - 0.1.3-dev</span> &nbsp
166166
</div>
167167
<div>
168168
<u>

simulator/ui/utils/socket_utils.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
)
4545
from tdk.apis.apis import TdkApis
4646
from tdk.core import protobuf_autoloader
47-
from tdk.helper.someip_helper import configure_someip_service
47+
from tdk.helper import someip_helper
48+
from tdk.helper.someip_helper import configure_someip_service, ensure_defaults
4849
from tdk.helper.transport_configuration import TransportConfiguration
4950

5051
logger = logging.getLogger("Simulator")
@@ -82,12 +83,19 @@ async def execute_send_rpc(self, json_sendrpc):
8283
version = 1
8384

8485
method_uri = protobuf_autoloader.get_rpc_uri_by_name(service_id, methodname, version)
85-
any_obj = any_pb2.Any()
86-
any_obj.Pack(message)
87-
payload_data = any_obj.SerializeToString()
86+
if someip_helper.is_serializer_enabled:
87+
message = ensure_defaults(message)
88+
payload_data = UPayload.serialize_someip(message) # Use SOME/IP serialization
89+
print(f"message after ensure defaults(SOMEIP) {message}")
90+
payload_format = UPayloadFormat.UPAYLOAD_FORMAT_SOMEIP
91+
else:
92+
any_obj = any_pb2.Any()
93+
any_obj.Pack(message)
94+
payload_data = any_obj.SerializeToString()
95+
payload_format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY
8896
payload = UPayload(
8997
data=payload_data,
90-
format=UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY,
98+
format=payload_format,
9199
)
92100
method_uri = protobuf_autoloader.get_uuri_from_name(method_uri)
93101

simulator/utils/vehicle_service_utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"""
2121

2222
try:
23-
from tdk.helper.someip_helper import someip_entity, temp_someip_entity
23+
from tdk.helper import someip_helper
2424
except Exception:
2525
pass
2626

@@ -36,9 +36,9 @@ def stop_service(name):
3636

3737

3838
def remove_service_from_someip(name):
39-
for index, entity_name in enumerate(temp_someip_entity):
39+
for index, entity_name in enumerate(someip_helper.temp_someip_entity):
4040
if entity_name == name:
41-
temp_someip_entity.pop(index)
41+
someip_helper.temp_someip_entity.pop(index)
4242
stop_service(name)
4343
break
4444

@@ -59,7 +59,7 @@ def get_all_running_service():
5959

6060
def get_all_configured_someip_service():
6161
configured_service = []
62-
for entity_name in someip_entity:
62+
for entity_name in someip_helper.someip_entity:
6363
configured_service.append(entity_name)
6464
return configured_service
6565

tdk/core/abstract_service.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
from tdk.apis.apis import TdkApis
3131
from tdk.core import protobuf_autoloader
32+
from tdk.helper import someip_helper
33+
from tdk.helper.someip_helper import SomeipHelper, ensure_defaults
3234
from tdk.helper.transport_configuration import TransportConfiguration
3335
from tdk.utils import service_util
3436
from tdk.utils.constant import REPO_URL
@@ -95,8 +97,10 @@ def handle_request(message: UMessage):
9597
res = protobuf_autoloader.get_response_class(service_id, method_name)()
9698
req = UPayload.unpack_data_format(payload, attributes.payload_format, req)
9799
response = self(get_instance(service_id), req, res)
98-
99-
payload_res: UPayload = UPayload.pack_to_any(response)
100+
if someip_helper.is_serializer_enabled:
101+
payload_res: UPayload = UPayload.pack_to_someip_serialization(response)
102+
else:
103+
payload_res: UPayload = UPayload.pack_to_any(response)
100104

101105
if get_instance(service_id).portal_callback is not None:
102106
get_instance(service_id).portal_callback(
@@ -136,10 +140,17 @@ async def start_rpc_service(self) -> bool:
136140
async def publish(self, uri, params={}, is_from_rpc=False):
137141
message_class = protobuf_autoloader.get_request_class_from_topic_uri(uri)
138142
message = protobuf_autoloader.populate_message(self.service, message_class, params)
139-
any_obj = any_pb2.Any()
140-
any_obj.Pack(message)
141-
payload_data = any_obj.SerializeToString()
142-
payload = UPayload(format=UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY, data=payload_data)
143+
if someip_helper.is_serializer_enabled:
144+
message = ensure_defaults(message)
145+
print(f"abstract_service: message after ensure defaults(SOMEIP) {message}")
146+
payload_data = UPayload.serialize_someip(message) # Use SOME/IP serialization
147+
payload_format= UPayloadFormat.UPAYLOAD_FORMAT_SOMEIP
148+
else:
149+
any_obj = any_pb2.Any()
150+
any_obj.Pack(message)
151+
payload_data = any_obj.SerializeToString()
152+
payload_format = UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY
153+
payload = UPayload(format=payload_format, data=payload_data)
143154
source_uri = protobuf_autoloader.get_uuri_from_name(uri)
144155

145156
if "COVESA" not in REPO_URL:

tdk/examples/common_methods.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
def get_transport_config():
2626
"""Set the helper config, one time configuration."""
2727
config = TransportConfiguration()
28-
config.set_zenoh_config("10.0.0.33", 9090) # this will set the zenoh helper
28+
config.set_zenoh_config(None,None) # this will set the zenoh helper
29+
30+
# config.set_zenoh_config("10.0.0.33", 9090) # this will set the zenoh helper
2931
return config
3032

3133

tdk/helper/someip_helper.py

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616
import os
1717
import pathlib
1818
from typing import List
19+
from google.protobuf.descriptor import FieldDescriptor
1920

2021
from tdk.utils.constant import RESOURCE_CATALOG_JSON_NAME
21-
22+
from google.protobuf.message import Message
2223
try:
2324
from uprotocol_vsomeip.vsomeip_utransport import (
2425
VsomeipHelper,
@@ -28,7 +29,42 @@
2829

2930
someip_entity = []
3031
temp_someip_entity = []
32+
is_serializer_enabled=False
33+
34+
def ensure_defaults(message: Message) -> Message:
35+
"""
36+
Ensures that all fields in a Protobuf message are explicitly set.
37+
This is required for SOME/IP serialization where no fields should be omitted.
38+
39+
:param message: Protobuf message object
40+
:return: Modified message with default values explicitly set
41+
"""
42+
print("Ensuring defaults for:", message)
43+
default_message = message.__class__() # Create a new instance with default values
44+
45+
for field in message.DESCRIPTOR.fields:
46+
field_name = field.name
47+
field_value = getattr(message, field_name, None)
48+
49+
# ✅ Handle nested Protobuf messages (recursively process)
50+
if field.type == FieldDescriptor.TYPE_MESSAGE and field_value is not None:
51+
ensure_defaults(field_value)
52+
53+
# ✅ Handle fields that do not support HasField() (primitive types like int, string, bool)
54+
elif field.label != FieldDescriptor.LABEL_REPEATED: # Not a repeated field
55+
try:
56+
if not message.HasField(field_name): # Only call HasField() if field supports it
57+
setattr(message, field_name, getattr(default_message, field_name)) # Assign default
58+
except ValueError: # Primitive types (int, float, string) don’t support HasField()
59+
if field_value in [None, "", 0, False]: # If unset, assign default
60+
setattr(message, field_name, getattr(default_message, field_name))
3161

62+
# ✅ Handle repeated fields (lists)
63+
elif field.label == FieldDescriptor.LABEL_REPEATED:
64+
if not field_value: # If list is empty, set to default
65+
setattr(message, field_name, getattr(default_message, field_name))
66+
# print(f"Message with all value set: {message}")
67+
return message #
3268

3369
def configure_someip_service(entity_name):
3470
global temp_someip_entity
@@ -65,17 +101,16 @@ def services_info(self) -> List[VsomeipHelper.UEntityInfo]:
65101
if "type" in node and node["type"] == "topic":
66102
topic_ids.append(int(node["id"]) + 32768)
67103
for property in data["node"]["properties"]:
68-
if property["name"] == "version_major":
104+
if property["name"] == "service_version_major":
69105
major_version = property["value"]
70106
break
71107
if service_name in someip_entity:
72108
entity_info.append(
73109
VsomeipHelper.UEntityInfo(
74-
Name=service_name,
75-
Id=int(service_id),
76-
Events=topic_ids,
77-
Port=port,
78-
MajorVersion=major_version,
110+
service_id=int(service_id),
111+
events=topic_ids,
112+
port=port,
113+
major_version=major_version,
79114
)
80115
)
81116
port = port + 1

tdk/helper/transport_configuration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@
3232

3333
class TransportConfiguration:
3434
def __init__(self):
35-
self.__SOURCE = UUri(authority_name="tdk", ue_id=99999, ue_version_major=1)
35+
self.__SOURCE = UUri(authority_name="tdk", ue_id=99998, ue_version_major=1)
3636
self.__ZENOH_IP = "10.0.0.33"
3737
self.__ZENOH_PORT = 9090
3838
self.__SOMEIP_UNICAST_IP = "127.0.0.1"
3939
self.__SOMEIP_MULTICAST_IP = "224.224.224.245"
40-
self.__transport = self._update_instance("BINDER")
40+
self.__transport = self._update_instance("SOME/IP")
4141

4242
def _update_instance(self, transport_name="BINDER") -> UTransport:
4343
if transport_name == "BINDER":
@@ -55,7 +55,7 @@ def _update_instance(self, transport_name="BINDER") -> UTransport:
5555
return UPTransportZenoh.new(conf, self.__SOURCE)
5656
elif transport_name == "SOME/IP":
5757
return VsomeipTransport(
58-
source=self.__SOURCE, multicast=(self.__SOMEIP_MULTICAST_IP, 30490), helper=SomeipHelper()
58+
source=self.__SOURCE,unicast=self.__SOMEIP_UNICAST_IP, multicast=(self.__SOMEIP_MULTICAST_IP, 30490), helper=SomeipHelper()
5959
)
6060

6161
def get_transport(self) -> UTransport:

0 commit comments

Comments
 (0)