canitpSessionSend (Function)

Top  Previous  Next

Architecture:

NX32L

Firmware version:

1.96.00


Send an ISO-TP message.

The destination of the message is set in the canitpSessionCreate function, using the dst parameter.

 

 

Input:

handle : SYSHANDLE

The handle of the ISO-TP session to send the data on.

 

data : PTR

The buffer with the message to send.

 

size : INT (1..4095)

The size of the message in bytes.

 

 

Returns: INT

1

- Successful.

0

- Not available.

-1

- Session is not open.

-2

- Invalid parameter.

-3

- Error sending the message.

-11

- The CAN bus is not open.

-14

- Timeout sending the messge.

-15

- The CAN bus is in monitor mode.

-16

- An error is detected on the can bus.

 

Declaration:

FUNCTION canitpSessionSend : INT;
VAR_INPUT
   handle : SYSHANDLE;
   data   : PTR;
   size   : INT;
END_VAR;

 

 

Example:

INCLUDE rtcu.inc
VAR
   buf   : ARRAY [1..4096OF SINT;
END_VAR;
 
FUNCTION CALLBACK canitpRecv
VAR_INPUT
   handle : SYSHANDLE//Handle to session
   arg    : DINT//User data
   size   : INT//Size of the data received.
END_VAR;
   DebugMsg(message := strFromMemory(src := PTR(arg), len := size));
END_FUNCTION;
 
 
PROGRAM example;
VAR
   handleSYSHANDLE;
   rc    : INT;
   str   : STRING;
   out   : ARRAY [1..4095OF SINT;
   len   : INT;
END_VAR;
 
   // Open can
   canOpen(baud := 250monitor := FALSE);
 
   // Create ISO-TP session
   rc := canitpSessionCreate(handle:=handle,
                    port     := 1,
                    src      := 16#12345678,
                    dst      := 16#12345679,
                    cb_receive := @canitpRecv,
                    cb_data    := ADDR(buf),
                    cb_arg     := DINT(ADDR(buf)),
                    cb_size    := SIZEOF(buf));
   IF rc < 1 THEN
      DebugFmt(message := "canitpSessionCreate=\1", v1 := rc);
      RETURN;
   END_IF;
 
   // Build message
   str := "Hello from RTCU device";
 
   // Send message
   len := strLen(str := str);
   strToMemory(str := strdst := ADDR(out), len := len);
   rc  := canitpSessionSend(handle:=handledata := ADDR(out), size := len);
   IF rc < 1 THEN
      DebugFmt(message := "canitpSessionSend=\1", v1 := rc);
      RETURN;
   END_IF;
 
BEGIN
 
END;
END_PROGRAM;