【CANoe】CAPL
•
算法结构
文章目录
- 一、背景
- 二、方法一:在CAPL中引入dll的制作【制作dll的通用方法】
-
- 1、在CAPL中打开帮助文档
- 2、找到CAPL DLL相关的说明,以下图中标记的为Demo进行dll的制作
- 3、拷贝到桌面,我用VS2019打开
- 4、解析其中一个函数,制作dll类似原理【☆核心☆】
- 5、27解锁示例
-
- 1)在刚才的工程中增加如下代码:
- 2)“重新生成”dll,并将capldll.dll改名为27Unlock.dll
- 3)将dll引入到CAPL工程中
- 三、方法二:在UDS模块中导入dll的制作【推荐:跑UDS诊断也可以用到】
-
- 1、导入dll的方法:
- 2、dll制作方法:
-
- 1)打开CAPL帮助文档
- 2)进入到如下路径:
- 3)代码解读:【☆核心☆】
- 4)CAPL中调用27解密算法的核心代码:
一、背景
使用UDS进行刷写时,需要27服务解密后,才能正确执行刷写,本文提供两种制作27解密dll的方法,用于CANoe的CAPL脚本中。
【特别说明】
遇到问题时,CAPL帮助文档提供了很好的指引,大家可以好好利用。
二、方法一:在CAPL中引入dll的制作【制作dll的通用方法】
1、在CAPL中打开帮助文档

2、找到CAPL DLL相关的说明,以下图中标记的为Demo进行dll的制作
CAPL DLL示例所在路径:
C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.75\Programming\Capldll

3、拷贝到桌面,我用VS2019打开
1)下图点击确定:

2)右键点击工程“重新生成”,报如下错误代码【C2338】:
C2338 Windows headers require the default packing option. Changing this can lead to memory corruption. This diagnostic can be disabled by building with WINDOWS_IGNORE_PACKING_MISMATCH defined
3)更改如下配置:


4)再次”重新生成”,可编译成功:

4、解析其中一个函数,制作dll类似原理【☆核心☆】

一些说明:
typedef struct CAPL_DLL_INFO4{
char cdlName[MAX_CDL_NAME2]; // 在CAPL中调用时显示的函数名
CAPL_FARCALL adr; // 函数地址,即vs工程中函数定义时的函数名
const char* categoryName; // 函数在CAPL中的所属目录,可以用于对函数的分类
const char* hintText; // 对该函数功能的描述介绍(在CAPL中显示)
char resultType; // 函数的返回值类型,用CAPL中的类型的首字母大写去表示
int parCount; // 函数的参数个数
char parTypes[MAXCAPLFUNCPARS_8_1]; // 函数的参数类型,用CAPL中的类型的首字母大写去表示
unsigned char array[MAXCAPLFUNCPARS_8_1]; // 函数的参数是否是数组:\001表示是数组;\000表示不是数组。默认则为\000
const char* parNames[MAXCAPLFUNCPARS_8_1]; // 函数显示的参数名(在CAPL中的声明介绍时)
} CAPL_DLL_INFO4;


5、27解锁示例
1)在刚才的工程中增加如下代码:
/*27解密算法*/
void CAPLEXPORT far CAPLPASCAL appGetDataThreePars(unsigned long mask, long SecurityLevel,
unsigned char SeedArray[], unsigned char KeyArray[])
{
/*27解密算法--根据实际算法进行更改即可*/
KeyArray[0] = SeedArray[0] + 1;
KeyArray[1] = SeedArray[0] + 1;
KeyArray[2] = SeedArray[0] + 1;
KeyArray[3] = SeedArray[0] + 1;
}

{"dllUnlock27", (CAPL_FARCALL)appGetDataThreePars,"CAPL_DLL","This function will get two datas from DLL into CAPL memory",'V', 4, "DLBB", "\000\000\001\001", {"mask","SecurityLevel","seedblock","keyblock"}},

2)“重新生成”dll,并将capldll.dll改名为27Unlock.dll

3)将dll引入到CAPL工程中



三、方法二:在UDS模块中导入dll的制作【推荐:跑UDS诊断也可以用到】
1、导入dll的方法:

2、dll制作方法:
1)打开CAPL帮助文档



2)进入到如下路径:
C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.75\CAN\Diagnostics\UDSSystem\SecurityAccess\Sources
将如下文件夹拷贝到桌面,进行制作dll

3)代码解读:【☆核心☆】


右键点击工程“重新生成”,工程可正确编译生成dll:


核心代码解读:

4)CAPL中调用27解密算法的核心代码:
result=diagGenerateKeyFromSeed(tmpseed,4,Unlocktype,"CommonDiagnostics","",tmpkey,4,gkeysize);

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/039623da32.html
