前面我们介绍了关于使用vector XCP License后,通过CAPL对XCP协议进行连接、断开和获取当前XCP连接状态的函数,本篇文章不做过多的其他赘述,我们继续介绍CAPL控制XCP相关的其他函数。
目录
xcpActivate
代码示例
xcpDeactivate
xcpActivateMeasurementGroup
xcpDeactivateAll
xcpUserCommand & OnXcpUserCommand
代码示例
xcpActivate
功能:激活用于上传或者DAQ相关测量的A2L参数。
namespace:系统变量的命名空间。
variable:对应的系统变量的名称。
sysVar:系统比那里的完全限定名称,包括所在的名称空间,以“::”分隔,并且需要在最前面带有“sysVar::”。
返回值:
0:成功激活
-1:系统变量没有找到
-2:操作不允许
注意:
A、使用系统变量的结构体时,该函数必须对整个结构体内的变量都有效,不能只对结构体内的某个变量有效。
B、xcpActivate函数不可用在on preStart中,只能在xcpConnect或者xcpDisconnenct成功之后。
代码示例
on start
{
if(0 == XcpActivate(sysvar::XCP::XcpSim::ampl))
{
write("Parameter ampl activated for measurement");
}
}
xcpDeactivate
功能:停用用于上传或者DAQ相关测量的A2L参数。
namespace:系统变量的命名空间。
variable:对应的系统变量的名称。
sysVar:系统比那里的完全限定名称,包括所在的名称空间,以“::”分隔,并且需要在最前面带有“sysVar::”。
返回值:
0:成功停用
-1:系统变量没有找到
-2:操作不允许
注意:使用系统变量的结构体时,该函数必须对整个结构体内的变量都有效,不能只对结构体内的某个变量有效。
xcpActivateMeasurementGroup
功能:名更改下次连接XCP设备时使用的测量组。
ecuQualifier:设备名称 – 在 CANoeXCP/CCP 窗口中配置。
groupName:测量组的名称。
返回值:
0:函数执行成功
-1:名称为ecuQualifier的设备不存在
-2:操作不允许,连接已成功建立
-5:groupName不存在
xcpDeactivateAll
功能:禁用自动读取活动测量组的所有配置参数。
ecuQualifier:设备名称 – 在 CANoeXCP/CCP 窗口中配置。
返回值:
0:函数执行成功
-1:名称为ecuQualifier的设备不存在
xcpUserCommand & OnXcpUserCommand
功能:将用户定义的数据发送到XCP slave。
ecuQualifier:设备名称 – 在 CANoeXCP/CCP 窗口中配置。
data:Tester定义的byte类型数据
datasize:data的数据长度
返回值:
0:函数执行成功
-1:名称为ecuQualifier的设备不存在
代码示例
variables
{
long mMode;
long mSegmentNr;
byte mUsrCmdResponse = 0;
}
void OnXcpConnect(char ecuName[])
{
mMode = 255;
mSegmentNr = 0;
write("Connect callback! ECU: %s", ecuName);
XcpGetCalPage(ecuName, mMode, mSegmentNr);
}
void OnXcpGetCalPage(char ecu[], long reserved1, long reserved2, long pageNumber)
{
Write("OnXcpGetCalPage callback! ECU: %s. Current PageNumber: %d", ecu, pageNumber);
if (pageNumber == 0)
{
pageNumber = 1;
}
else
{
pageNumber = 0;
}
XcpSetCalPage(ecu, mMode, mSegmentNr, pageNumber);
}
void OnXcpSetCalPage(char ecu[])
{
Write("OnXcpSetCalPage callback! ECU: %s", ecu);
ProcessUserCmd();
}
void ProcessUserCmd()
{
byte adata[12] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C };
XCPUserCommand("XcpSim", adata, 12);
}
void OnXcpUserCommand(char ecu[],byte data[], long dataSize)
{
mUsrCmdResponse = data[0];
Write("OnXcpUserCommandResponse callback! ECU: %s. Data: %d. Data size: %d", ecu, data[0], dataSize);
}