CAPL 封装了的SeedKey解锁函数,高复用性
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL 封装了的SeedKey解锁函数,高复用性相关的知识,希望对你有一定的参考价值。
- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
📘前言
-
🍅 诊断测试用到27服务,解锁,一般都i有好多个解锁等级(subfunction ),甚至不同的解锁等级的种子字节长度还不一致,今天我就整合划一,封装了一个高复用性的函数
-
🍅 演示软硬件环境
Windows11 x64
;CANoe 11 SP2 x64
目录
📙 代码
🍅 SeedKey解锁函数
-
函数参数模型:
void cal_seedKey(byte gSecurityLevel)
-
就一个输入参数,解锁等级,不用你去定义 diagrequest;也不需要关注seed和key有多少字节
void cal_seedKey(byte gSecurityLevel)
diagrequest *DiagSeedKey ;
long i, resSize,ret;
byte gSeedArray[255];
int gSeedArraySize ;
char gVariant[200] = "Variant1";
char gOption[200] = "option";
byte gKeyArray[255];
int gMaxKeyArraySize = 255;
dword gActualSize = 0;
//发送 0x27 xx
diagResize(DiagSeedKey,2);
DiagSetPrimitiveByte(DiagSeedKey,0,0x27);
DiagSetPrimitiveByte(DiagSeedKey,1,gSecurityLevel);
if(Send_DiagRequest_diag(DiagSeedKey) == 1)//上一步骤是pass
resSize = DiagGetRespPrimitiveSize(DiagSeedKey);
gSeedArraySize = resSize - 2 ; //去除诊断头部
for(i = 0; i < gSeedArraySize; i ++)
gSeedArray[i] = DiagGetRespPrimitiveByte(DiagSeedKey, i+2);
write("gSeedArray[%d]:0x%x",i,gSeedArray[i]);
//计算 Key
ret = DiagGenerateKeyFromSeed (gSeedArray, gSeedArraySize , gSecurityLevel, gVariant, gOption, gKeyArray, gMaxKeyArraySize, gActualSize); //generate key
if(ret==0)
//发送 0x27 xx+1
diagResize(DiagSeedKey,2+gActualSize);
DiagSetPrimitiveByte(DiagSeedKey,0,0x27);
DiagSetPrimitiveByte(DiagSeedKey,1,gSecurityLevel + 1);
for(i = 0; i < gActualSize; i ++) //去除诊断头部
DiagSetPrimitiveByte(DiagSeedKey,i+2,gKeyArray[i]);
Send_DiagRequest_diag(DiagSeedKey);
else
TestStepFail("can't generate key.");
//发送诊断,并判断是否是正响应
long Send_DiagRequest_diag(diagrequest *DiagReq)
char tempStr[100];
long retVal,lastCode;
// 下面两个参数应该是个全局变量
const long SendTimeout = 100;//ms
const long ReceiveTimeout = 1000;//ms
TestReportWriteDiagObject(DiagReq); //打印发送诊断
DiagSendRequest(DiagReq);
if (TestWaitForDiagRequestSent(DiagReq, SendTimeout)== 1)
//等待诊断响应
retVal = TestWaitForDiagResponse( DiagReq, ReceiveTimeout);
TestReportWriteDiagResponse(DiagReq); //打印诊断接收
if(retVal == 1) // 有响应
retVal = DiagGetLastResponseCode(DiagReq);
if(retVal == -1)//有正响应
TestStepPass("Positival response received, as expected.");
else
TestStepFail("Expected Positival response, But Not.");
return 0 ;
else
TestStepFail("Expected Positival response, But Not.");
return 0 ;
else
TestStepFail("Request could not be sent!");
return 0 ;
return 1;
🍅 测试用例
- 测试用例:
testcase TC_015()
diagRequest DefaultSession_Start req_DefaultSession_Start; //1001
diagRequest ExtendedDiagnosticSession_Start req_ExtendedSession_Start; //1003
diagSetTarget(ECU_Name);
Send_DiagRequest_diag(req_DefaultSession_Start);
Send_DiagRequest_diag(req_ExtendedSession_Start);
cal_seedKey(0x01);
Send_DiagRequest_diag(req_DefaultSession_Start);
Send_DiagRequest_diag(req_ExtendedSession_Start);
cal_seedKey(0x07);
- xml 脚本
<testmodule title="诊断函数测试" version="1.1">
<externalref type="url" title="CSDN蚂蚁小兵">
https://blog.csdn.net/qq_34414530
</externalref>
<testgroup title="TestGroup_1">
<capltestcase name="TC_015" title="TC_015"/>
</testgroup>
</testmodule>
- 测试结果
🌎总结
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
以上是关于CAPL 封装了的SeedKey解锁函数,高复用性的主要内容,如果未能解决你的问题,请参考以下文章