SOME/IP Header 구조
- Message ID(32 bit) : Message ID는 전체 차량에서 고유해야 한다.
- Service ID(16 bit) : 각 서비스의 고유 값
- Method ID(16 bit) : 0~32767까지의 값을 가진다. 이벤트는 32768~65535 값을가진다.
- Length(32 bit) : Length다음부터 즉 Client ID부터 Payload를 포함한 길이. Byte 단위
- Client ID(16 bit) : ECU 내에서 호출하는 클라이언트의 고유 식별자
- Session ID(16 bit) : Subscriber에 의해 선택된 unique number
- Protocol Version(8 bit) : 프로토콜 버전
- Interface Version(8 bit) : 인터페이스 버전
- Message Type(8 bit) : 메세지 타입
- Return Code(8 bit) : 리턴 코드
- Payload(가변길이) : 전송하고자하는 data
- Endian : BIG Endian
fdepl파일 예
위의 헤더중에 fdepl파일에서 사용되는 ID는 Service ID(SomeIpServiceID), Method ID(SomeIpMethodID)가 파일내에서 사용되며, fdepl파일내에서 InstanceId, SomIpInstanceID는 SOME/IP 헤더에는 없고 SOME/IP-SD(Service Discovery) 포멧에서 Entries array에 포함되어 있다.
commonapi-c-with-someip-exampleimport "platform:/plugin/org.genivi.commonapi.someip/deployment/CommonAPI-SOMEIP_deployment_spec.fdepl"
import "HelloWorld.fidl"
define org.genivi.commonapi.someip.deployment for interface commonapi.HelloWorld {
SomeIpServiceID = 4660 method sayHello { // 각 서비스의 Unique value
SomeIpMethodID = 31000 // 0~32767까지의 값. 범위를 벗어나면 SomeIP Generator에서 오류생성
}
}
define org.genivi.commonapi.someip.deployment for provider MyService {
instance commonapi.HelloWorld {
InstanceId = "test" // registerService(), buildProxy()에서 같은 값을 사용해야한다.
SomeIpInstanceID = 22136 //
}
}
Reference
- www.autosar.org : SOME/IP Protocol
- www.autosar.org : Specification of communication Management
- CommonAPI C++ with Some/IP 예제