Aim of my software at this moment is to detect all ECU connected & powered on the CAN bus.
For this, I would like to send TesterPresent request for each CAN ID. Here my fonction:
Code: Select all
public async Task<uds_status> SendTesterPresent(uint targetId)
{
while (_peakInterface.PeakHandle == cantp_handle.PCANTP_HANDLE_NONEBUS) await Task.Delay(100);
var result = UDSApi.Reset_2013(_peakInterface.PeakHandle);
Console.WriteLine(
!UDSApi.StatusIsOk_2013(result)
? "An error occurred while trying to reset UDS: {0}"
: "Reset UDS queues: {0}", result);
var response = new uds_msg();
var msg_request = new uds_msg();
var requestConfirmation = new uds_msg();
var configPhysical = new uds_msgconfig();
configPhysical.can_id = targetId;
configPhysical.can_msgtype =
targetId == (uint)uds_can_id.PUDS_CAN_ID_710_REQUEST
? cantp_can_msgtype.PCANTP_CAN_MSGTYPE_STANDARD
: cantp_can_msgtype.PCANTP_CAN_MSGTYPE_EXTENDED;
configPhysical.nai.protocol = uds_msgprotocol.PUDS_MSGPROTOCOL_ISO_15765_2_11B_NORMAL;
configPhysical.nai.target_type = cantp_isotp_addressing.PCANTP_ISOTP_ADDRESSING_FUNCTIONAL;
configPhysical.type = uds_msgtype.PUDS_MSGTYPE_USDT;
configPhysical.nai.source_addr = (ushort)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_OBD_FUNCTIONAL;
configPhysical.nai.target_addr = (ushort)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_ECU_1;
configPhysical.nai.extension_addr = 0;
result = UDSApi.SvcTesterPresent_2013(_peakInterface.PeakHandle, configPhysical, out msg_request);
Console.WriteLine("[UDS] Execute TesterPresent service to {0} : {1}", targetId, UDSApi.StatusIsOk_2013(result));
result = UDSApi.WaitForService_2013(_peakInterface.PeakHandle, ref msg_request, out response, out requestConfirmation);
Console.WriteLine("[UDS] Wait for service: {0}", UDSApi.StatusIsOk_2013(result));
UDSApi.MsgFree_2013(ref msg_request);
UDSApi.MsgFree_2013(ref requestConfirmation);
UDSApi.MsgFree_2013(ref response);
// Return value
return result;
}
Code: Select all
requestMapping = new uds_mapping();
requestMapping.can_id = 0x18DA017E;
requestMapping.can_id_flow_ctrl = 0x18DA7E01;
requestMapping.can_msgtype = cantp_can_msgtype.PCANTP_CAN_MSGTYPE_EXTENDED;
requestMapping.nai.extension_addr = 0;
requestMapping.nai.protocol = uds_msgprotocol.PUDS_MSGPROTOCOL_ISO_15765_2_29B_EXTENDED;
requestMapping.can_tx_dlc = 8;
requestMapping.nai.source_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_TEST_EQUIPMENT;
requestMapping.nai.target_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_ECU_1;
requestMapping.nai.target_type = cantp_isotp_addressing.PCANTP_ISOTP_ADDRESSING_PHYSICAL;
responseMapping = requestMapping;
responseMapping.can_id = requestMapping.can_id_flow_ctrl;
responseMapping.can_id_flow_ctrl = requestMapping.can_id;
responseMapping.nai.source_addr = requestMapping.nai.target_addr;
responseMapping.nai.target_addr = requestMapping.nai.source_addr;
result = UDSApi.AddMapping_2013(receiverHandle, ref requestMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add request mapping - Success" : "Failed to add request mapping - {0}", result);
result = UDSApi.AddMapping_2013(receiverHandle, ref responseMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add response mapping - Success" : "Failed to add response mapping - {0}", result);
requestMapping = new uds_mapping();
requestMapping.can_id = 0x18DA0A7E;
requestMapping.can_id_flow_ctrl = 0x18DA7E0A;
requestMapping.can_msgtype = cantp_can_msgtype.PCANTP_CAN_MSGTYPE_EXTENDED;
requestMapping.nai.extension_addr = 0;
requestMapping.nai.protocol = uds_msgprotocol.PUDS_MSGPROTOCOL_ISO_15765_2_29B_EXTENDED;
requestMapping.can_tx_dlc = 8;
requestMapping.nai.source_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_TEST_EQUIPMENT;
requestMapping.nai.target_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_ECU_1;
requestMapping.nai.target_type = cantp_isotp_addressing.PCANTP_ISOTP_ADDRESSING_PHYSICAL;
responseMapping = requestMapping;
responseMapping.can_id = requestMapping.can_id_flow_ctrl;
responseMapping.can_id_flow_ctrl = requestMapping.can_id;
responseMapping.nai.source_addr = requestMapping.nai.target_addr;
responseMapping.nai.target_addr = requestMapping.nai.source_addr;
result = UDSApi.AddMapping_2013(receiverHandle, ref requestMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add request mapping - Success" : "Failed to add request mapping - {0}", result);
result = UDSApi.AddMapping_2013(receiverHandle, ref responseMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add response mapping - Success" : "Failed to add response mapping - {0}", result);
requestMapping = new uds_mapping();
requestMapping.can_id = 0x18DA147E;
requestMapping.can_id_flow_ctrl = 0x18DA7E14;
requestMapping.can_msgtype = cantp_can_msgtype.PCANTP_CAN_MSGTYPE_EXTENDED;
requestMapping.nai.extension_addr = 0;
requestMapping.nai.protocol = uds_msgprotocol.PUDS_MSGPROTOCOL_ISO_15765_2_29B_EXTENDED;
requestMapping.can_tx_dlc = 8;
requestMapping.nai.source_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_TEST_EQUIPMENT;
requestMapping.nai.target_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_ECU_1;
requestMapping.nai.target_type = cantp_isotp_addressing.PCANTP_ISOTP_ADDRESSING_PHYSICAL;
responseMapping = requestMapping;
responseMapping.can_id = requestMapping.can_id_flow_ctrl;
responseMapping.can_id_flow_ctrl = requestMapping.can_id;
responseMapping.nai.source_addr = requestMapping.nai.target_addr;
responseMapping.nai.target_addr = requestMapping.nai.source_addr;
result = UDSApi.AddMapping_2013(receiverHandle, ref requestMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add request mapping - Success" : "Failed to add request mapping - {0}", result);
result = UDSApi.AddMapping_2013(receiverHandle, ref responseMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add response mapping - Success" : "Failed to add response mapping - {0}", result);
requestMapping = new uds_mapping();
requestMapping.can_id = 0x18DA1E7E;
requestMapping.can_id_flow_ctrl = 0x18DA7E1E;
requestMapping.can_msgtype = cantp_can_msgtype.PCANTP_CAN_MSGTYPE_EXTENDED;
requestMapping.nai.extension_addr = 0;
requestMapping.nai.protocol = uds_msgprotocol.PUDS_MSGPROTOCOL_ISO_15765_2_29B_EXTENDED;
requestMapping.can_tx_dlc = 8;
requestMapping.nai.source_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_TEST_EQUIPMENT;
requestMapping.nai.target_addr = (UInt16)uds_address.PUDS_ADDRESS_ISO_15765_4_ADDR_ECU_1;
requestMapping.nai.target_type = cantp_isotp_addressing.PCANTP_ISOTP_ADDRESSING_PHYSICAL;
responseMapping = requestMapping;
responseMapping.can_id = requestMapping.can_id_flow_ctrl;
responseMapping.can_id_flow_ctrl = requestMapping.can_id;
responseMapping.nai.source_addr = requestMapping.nai.target_addr;
responseMapping.nai.target_addr = requestMapping.nai.source_addr;
result = UDSApi.AddMapping_2013(receiverHandle, ref requestMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add request mapping - Success" : "Failed to add request mapping - {0}", result);
result = UDSApi.AddMapping_2013(receiverHandle, ref responseMapping);
Console.WriteLine(UDSApi.StatusIsOk_2013(result) ? "Add response mapping - Success" : "Failed to add response mapping - {0}", result);
Code: Select all
var isNode1Exist = await _peakDetectionViewModel.SendTesterPresent((uint)uds_can_id.PUDS_CAN_ID_NODE_1_REQUEST);
Console.WriteLine("isNode1Exist: {0}", isNode1Exist == uds_status.PUDS_STATUS_OK);
Task.Delay(100).Wait();
var isNode10Exist = await _peakDetectionViewModel.SendTesterPresent((uint)uds_can_id.PUDS_CAN_ID_NODE_10_REQUEST);
Console.WriteLine("isNode10Exist: {0}", isNode10Exist == uds_status.PUDS_STATUS_OK);
Task.Delay(100).Wait();
var isNode20Exist = await _peakDetectionViewModel.SendTesterPresent((uint)uds_can_id.PUDS_CAN_ID_NODE_20_REQUEST);
Console.WriteLine("isNode20Exist: {0}", isNode20Exist == uds_status.PUDS_STATUS_OK);
Task.Delay(100).Wait();
var isNode30Exist = await _peakDetectionViewModel.SendTesterPresent((uint)uds_can_id.PUDS_CAN_ID_NODE_30_REQUEST);
Console.WriteLine("isNode30Exist: {0}", isNode30Exist == uds_status.PUDS_STATUS_OK);
Task.Delay(100).Wait();
Code: Select all
public enum uds_can_id : UInt32
{
PUDS_CAN_ID_NODE_1_REQUEST = 0x18DA017E,
PUDS_CAN_ID_NODE_10_REQUEST = 0x18DA0A7E,
PUDS_CAN_ID_NODE_20_REQUEST = 0x18DA147E,
PUDS_CAN_ID_NODE_30_REQUEST = 0x18DA1E7E,
PUDS_CAN_ID_710_REQUEST = 0x710,
Code: Select all
Add request mapping - Success
Add response mapping - Success
Add request mapping - Success
Add response mapping - Success
Add request mapping - Success
Add response mapping - Success
Add request mapping - Success
Add response mapping - Success
Add request mapping - Success
Add response mapping - Success
Add request mapping - Success
Add response mapping - Success
Reset UDS queues: PUDS_STATUS_OK
[UDS] Execute TesterPresent service to 416940414 : True
[UDS] Wait for service: False
isNode1Exist: False
Reset UDS queues: PUDS_STATUS_OK
[UDS] Execute TesterPresent service to 416942718 : True
[UDS] Wait for service: False
isNode10Exist: False
Reset UDS queues: PUDS_STATUS_OK
[UDS] Execute TesterPresent service to 416945278 : True
[UDS] Wait for service: False
isNode20Exist: False
Reset UDS queues: PUDS_STATUS_OK
[UDS] Execute TesterPresent service to 416947838 : True
[UDS] Wait for service: False
isNode30Exist: False
Thanks in advance,