Warning
This documentation is actively being updated as the project evolves and may not be complete in all areas.
SOME/IP Driver¶
jumpstarter-driver-someip provides SOME/IP (Scalable service-Oriented Middleware over IP)
protocol operations for Jumpstarter. This driver wraps the
opensomeip Python binding to enable remote
RPC calls, service discovery, raw messaging, and event subscriptions with automotive
ECUs over Ethernet.
Installation¶
pip3 install --extra-index-url https://pkg.jumpstarter.dev/simple/ jumpstarter-driver-someip
Configuration¶
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
str |
required |
Local IP address to bind |
|
int |
30490 |
Local SOME/IP port |
|
str |
|
Transport protocol: |
|
str |
|
SD multicast group address |
|
int |
30490 |
SD multicast port |
UDP (default)¶
export:
someip:
type: jumpstarter_driver_someip.driver.SomeIp
config:
host: "192.168.1.100"
port: 30490
transport_mode: UDP
multicast_group: "239.127.0.1"
multicast_port: 30490
TCP¶
export:
someip:
type: jumpstarter_driver_someip.driver.SomeIp
config:
host: "192.168.1.100"
port: 30490
transport_mode: TCP
API Reference¶
RPC¶
rpc_call(service_id, method_id, payload, timeout=5.0)— Make a SOME/IP RPC call and return the response
Raw Messaging¶
send_message(service_id, method_id, payload)— Send a raw SOME/IP messagereceive_message(timeout=2.0)— Receive a raw SOME/IP message
Service Discovery¶
find_service(service_id, instance_id=0xFFFF, timeout=5.0)— Find services via SOME/IP-SD; useinstance_id=0xFFFF(default) to match any instance
Events¶
subscribe_eventgroup(eventgroup_id)— Subscribe to a SOME/IP event groupunsubscribe_eventgroup(eventgroup_id)— Unsubscribe from a SOME/IP event groupreceive_event(timeout=5.0)— Receive next event notification
Connection Management¶
close_connection()— Close the SOME/IP connectionreconnect()— Reconnect to the SOME/IP endpoint
Example Usage¶
RPC Call¶
from jumpstarter.common.utils import env
with env() as client:
someip = client.someip
response = someip.rpc_call(0x1234, 0x0001, b"\x01\x02\x03")
print(f"Response: {bytes.fromhex(response.payload)}")
print(f"Return code: {response.return_code}")
Service Discovery + RPC¶
from jumpstarter.common.utils import env
with env() as client:
someip = client.someip
# Discover available services
services = someip.find_service(0x1234, timeout=3.0)
for svc in services:
print(f"Found: service={svc.service_id:#06x} instance={svc.instance_id:#06x}")
# Call the first discovered service
if services:
resp = someip.rpc_call(0x1234, 0x0001, b"\x10\x20")
print(f"RPC result: {resp.payload}")
Event Subscription¶
from jumpstarter.common.utils import env
with env() as client:
someip = client.someip
# Subscribe to event group 1
someip.subscribe_eventgroup(1)
# Wait for event notifications
try:
event = someip.receive_event(timeout=10.0)
print(f"Event service={event.service_id:#06x} id={event.event_id:#06x}")
print(f"Payload: {bytes.fromhex(event.payload)}")
finally:
someip.unsubscribe_eventgroup(1)
Raw Messaging¶
from jumpstarter.common.utils import env
with env() as client:
someip = client.someip
someip.send_message(0x1234, 0x0001, b"\xAA\xBB")
msg = someip.receive_message(timeout=2.0)
print(f"Received from service={msg.service_id:#06x}: {msg.payload}")
Connection Management¶
from jumpstarter.common.utils import env
with env() as client:
someip = client.someip
# Perform operations...
someip.rpc_call(0x1234, 0x0001, b"\x01")
# Reconnect after network disruption
someip.reconnect()
# Continue operations
someip.rpc_call(0x1234, 0x0001, b"\x02")
# Clean up
someip.close_connection()