バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
AUTOSAR-Dcmのコンフィグレーションの話。
Dsdのコンフィグレーションコードについて
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
AUTOSAR-Dcm Dsdのコンフィグレーションコード
フクさん
よし、Dsdのコンフィグレーションコードだ!
太郎くん
うーん、今回はクラス図もシンプルだったからコードの方もシンプルだと期待したい!
//----------------------------------------------------------------
// DSD
//----------------------------------------------------------------
// SID table
#define SID_DIAGNOSTIC_SESSION_CONTROL 0x10
#define SID_ECU_RESET 0x11
#define SID_CLEAR_DIAGNOSTIC_INFORMATION 0x14
#define SID_READ_DTC_INFORMATION 0x19
#define SID_READ_DATA_BY_IDENTIFIER 0x22
#define SID_READ_MEMORY_BY_ADDRESS 0x23
#define SID_READ_SCALING_DATA_BY_IDENTIFIER 0x24
#define SID_SECURITY_ACCESS 0x27
#define SID_COMMUNICATION_CONTROL 0x28
#define SID_READ_DATA_BY_PERIODIC_IDENTIFIER 0x2A
#define SID_DYNAMICALLY_DEFINE_DATA_IDENTIFIER 0x2C
#define SID_WRITE_DATA_BY_IDENTIFIER 0x2E
#define SID_INPUT_OUTPUT_CONTROL_BY_IDENTIFIER 0x2F
#define SID_ROUTINE_CONTROL 0x31
#define SID_REQUEST_DOWNLOAD 0x34
#define SID_REQUEST_UPLOAD 0x35
#define SID_TRANSFER_DATA 0x36
#define SID_REQUEST_TRANSFER_EXIT 0x37
#define SID_WRITE_MEMORY_BY_ADDRESS 0x3D
#define SID_TESTER_PRESENT 0x3E
#define SID_NEGATIVE_RESPONSE 0x7F
#define SID_CONTROL_DTC_SETTING 0x85
static const Dcm_DsdServiceType DIAG_P2PorP2A_serviceList[] = {
{
SID_DIAGNOSTIC_SESSION_CONTROL, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_SECURITY_ACCESS, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
SecurityAccess_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_READ_MEMORY_BY_ADDRESS, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_READ_DATA_BY_IDENTIFIER, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_WRITE_DATA_BY_IDENTIFIER, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
RWDID_SecurityList, /* DsdSidTabSecurityLevelRef */
RWDID_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_ROUTINE_CONTROL, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
RC_SecurityList, /* DsdSidTabSecurityLevelRef */
RC_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_TESTER_PRESENT, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_ECU_RESET, /* DsdSidTabServiceId */
TRUE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_REQUEST_DOWNLOAD, /* DsdSidTabServiceId */
FALSE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_REQUEST_UPLOAD, /* DsdSidTabServiceId */
FALSE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_REQUEST_TRANSFER_EXIT, /* DsdSidTabServiceId */
FALSE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_TRANSFER_DATA, /* DsdSidTabServiceId */
FALSE, /* DsdSidTabSubfuncAvail */
UnProtected_SecurityList, /* DsdSidTabSecurityLevelRef */
ALL_SessionList, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
FALSE /* Arc_EOL */
},
{
SID_TRANSFER_DATA, /* DsdSidTabServiceId */
FALSE, /* DsdSidTabSubfuncAvail */
NULL_PTR, /* DsdSidTabSecurityLevelRef */
NULL_PTR, /* DsdSidTabSessionLevelRef */
NULL_PTR, /* Dcm_DsdConditionGetFncType */
NULL_PTR, /* Dcm_DsdResetPidsFncType */
TRUE, /* Arc_EOL */
}
};
static const Dcm_DsdServiceTableType DsdServiceTable[] = {
{
0, /* DsdSidTabId */
DIAG_P2PorP2A_serviceList, /* DsdService */
FALSE /* Arc_EOL */
},
{
0, /* DsdSidTabId */
NULL_PTR, /* DsdService */
TRUE /* Arc_EOL */
}
};
static const Dcm_DsdType Dsd = {
DsdServiceTable /* DsdServiceTable */
};
AUTOSAR-Dcm Dsdのコンフィグレーションコード解説
太郎くん
まぁまぁな行数あるけど、なんとなくわかる!
フクさん
それは良かった。
太郎くん
ただ、UnProtected_SecurityListとかALL_SessionListってこの中で定義されてないね?
フクさん
対応するセキュリティレベルとセッションのリストなんだけど、
実体はDslじゃなくてDspにいるんだよねー。
なので、今回は参照のみで実体はここには出てこない。
太郎くん
そこの部分はDspの時に覚悟しておくか・・・。
フクさん
そうだねー。
(まぁ次回がそのDspなんだけどね。)
まとめ
フクさん
まとめだよ。
- Dsdのコンフィグレーションコードを書いた。
- 対応するセキュリティレベルとセッションの実態はDspにあり、Dsdからは参照するのみ。
バックナンバーはこちら。
コメント