Skip to content

File syn_iolink.c

FileList > proto > syn_iolink.c

Go to the source code of this file

IO-Link (IEC 61131-9) Single-Drop Digital Point-to-Point Protocol Engine Implementation.

  • #include "../port/syn_port_system.h"
  • #include "syn_iolink.h"
  • #include <string.h>

Public Functions

Type Name
uint8_t syn_iolink_calc_checksum (const uint8_t * data, size_t len)
Calculate standard IO-Link 6-bit CRC with parity.
SYN_Status syn_iolink_device_get_pd_out (const SYN_IOLink_Device * dev, uint8_t * out_buf, size_t max_len, size_t * out_len)
Get the device's latest actuator output process data written by master.
SYN_Status syn_iolink_device_init (SYN_IOLink_Device * dev, const SYN_IOLink_DeviceConfig * cfg)
Initialize IO-Link Device.
SYN_Status syn_iolink_device_process_frame (SYN_IOLink_Device * dev, const uint8_t * rx, size_t rx_len, uint8_t * tx, size_t max_tx, size_t * out_len)
Process an inbound M-Sequence master frame and generate the device response frame.
SYN_Status syn_iolink_device_set_pd_in (SYN_IOLink_Device * dev, const uint8_t * data, size_t len)
Set the device's sensor input process data.
SYN_Status syn_iolink_master_exchange_pd (SYN_IOLink_Master * master, const uint8_t * pd_out, size_t out_len, uint8_t * pd_in, size_t * in_len)
Perform a cyclic Process Data exchange with connected device.
SYN_Status syn_iolink_master_init (SYN_IOLink_Master * master, const SYN_IOLink_MasterConfig * cfg)
Initialize IO-Link Master.
SYN_PT_Status syn_iolink_master_pt (SYN_PT * pt, SYN_Task * task)
Protothread continuation function for syn_sched .
SYN_Status syn_iolink_master_read_isdu (SYN_IOLink_Master * master, uint16_t index, uint8_t subindex, uint8_t * data, size_t max_len, size_t * out_len)
Read an acyclic ISDU parameter from device.
SYN_Status syn_iolink_master_start (SYN_IOLink_Master * master)
Trigger master startup handshake sequence on connected port.
SYN_Status syn_iolink_master_step (SYN_IOLink_Master * master, uint32_t now_ms)
Step the IO-Link master state machine and cyclic communication loop.
SYN_Status syn_iolink_master_write_isdu (SYN_IOLink_Master * master, uint16_t index, uint8_t subindex, const uint8_t * data, size_t len)
Write an acyclic ISDU parameter to device.

Public Static Functions

Type Name
SYN_Status master_read_direct_param (SYN_IOLink_Master * master, uint8_t addr, uint8_t * out_val)
Read single byte from Direct Parameter Page 1 on attached IO-Link device.

Macros

Type Name
define SYN_IOLINK_CRC6_POLY 0x3DU
IEC 61131-9 CRC-6 polynomial (x^6 + x^5 + x^4 + x^3 + x^2 + 1)
define SYN_IOLINK_CRC6_SEED 0x1FU
IEC 61131-9 CRC-6 initial seed value.
define SYN_IOLINK_DEFAULT_CYCLE_MS 5U
Default IO-Link master cycle time in milliseconds.

Public Functions Documentation

Calculate standard IO-Link 6-bit CRC with parity.

uint8_t syn_iolink_calc_checksum (
    const uint8_t * data,
    size_t len
) 

Parameters:

  • data Data buffer to calculate checksum over.
  • len Data length in bytes.

Returns:

8-bit Checksum byte (6-bit CRC in bits 0..5, parity in bits 6..7).


Get the device's latest actuator output process data written by master.

SYN_Status syn_iolink_device_get_pd_out (
    const SYN_IOLink_Device * dev,
    uint8_t * out_buf,
    size_t max_len,
    size_t * out_len
) 

Parameters:

  • dev Device instance.
  • out_buf Buffer receiving process data.
  • max_len Capacity of output buffer.
  • out_len Pointer receiving length.

Returns:

SYN_OK on success.


Initialize IO-Link Device.

SYN_Status syn_iolink_device_init (
    SYN_IOLink_Device * dev,
    const SYN_IOLink_DeviceConfig * cfg
) 

Parameters:

  • dev Device instance to initialize.
  • cfg Configuration parameters and parameter page values.

Returns:

SYN_OK on success.


Process an inbound M-Sequence master frame and generate the device response frame.

SYN_Status syn_iolink_device_process_frame (
    SYN_IOLink_Device * dev,
    const uint8_t * rx,
    size_t rx_len,
    uint8_t * tx,
    size_t max_tx,
    size_t * out_len
) 

Parameters:

  • dev Device instance.
  • rx Master frame payload.
  • rx_len Master frame length.
  • tx Buffer receiving device response frame.
  • max_tx Capacity of response buffer.
  • out_len Pointer receiving response length.

Returns:

SYN_OK on success.


Set the device's sensor input process data.

SYN_Status syn_iolink_device_set_pd_in (
    SYN_IOLink_Device * dev,
    const uint8_t * data,
    size_t len
) 

Parameters:

  • dev Device instance.
  • data Input process data payload.
  • len Length of process data.

Returns:

SYN_OK on success.


Perform a cyclic Process Data exchange with connected device.

SYN_Status syn_iolink_master_exchange_pd (
    SYN_IOLink_Master * master,
    const uint8_t * pd_out,
    size_t out_len,
    uint8_t * pd_in,
    size_t * in_len
) 

Parameters:

  • master Master instance.
  • pd_out Output process data to send to device (actuator command).
  • out_len Length of output process data.
  • pd_in Buffer receiving input process data from device (sensor measurement).
  • in_len Pointer receiving length of input process data.

Returns:

SYN_OK on success.


Initialize IO-Link Master.

SYN_Status syn_iolink_master_init (
    SYN_IOLink_Master * master,
    const SYN_IOLink_MasterConfig * cfg
) 

Parameters:

  • master Master instance to initialize.
  • cfg Configuration parameters.

Returns:

SYN_OK on success, SYN_INVALID_PARAM on invalid argument.


Protothread continuation function for syn_sched .

SYN_PT_Status syn_iolink_master_pt (
    SYN_PT * pt,
    SYN_Task * task
) 

Parameters:

  • pt Protothread continuation structure.
  • task Task handle containing SYN_IOLink_Master in user_data.

Returns:

SYN_PT_Status continuation status.


Read an acyclic ISDU parameter from device.

SYN_Status syn_iolink_master_read_isdu (
    SYN_IOLink_Master * master,
    uint16_t index,
    uint8_t subindex,
    uint8_t * data,
    size_t max_len,
    size_t * out_len
) 

Parameters:

  • master Master instance.
  • index 16-bit ISDU Index.
  • subindex 8-bit ISDU Subindex.
  • data Buffer receiving parameter data.
  • max_len Capacity of parameter buffer.
  • out_len Pointer receiving parameter data length.

Returns:

SYN_OK on success.


Trigger master startup handshake sequence on connected port.

SYN_Status syn_iolink_master_start (
    SYN_IOLink_Master * master
) 

Parameters:

  • master Master instance.

Returns:

SYN_OK on success.


Step the IO-Link master state machine and cyclic communication loop.

SYN_Status syn_iolink_master_step (
    SYN_IOLink_Master * master,
    uint32_t now_ms
) 

Parameters:

  • master Master instance.
  • now_ms Current timestamp in milliseconds.

Returns:

SYN_OK on success.


Write an acyclic ISDU parameter to device.

SYN_Status syn_iolink_master_write_isdu (
    SYN_IOLink_Master * master,
    uint16_t index,
    uint8_t subindex,
    const uint8_t * data,
    size_t len
) 

Parameters:

  • master Master instance.
  • index 16-bit ISDU Index.
  • subindex 8-bit ISDU Subindex.
  • data Parameter data to write.
  • len Parameter data length.

Returns:

SYN_OK on success.


Public Static Functions Documentation

function master_read_direct_param

Read single byte from Direct Parameter Page 1 on attached IO-Link device.

static SYN_Status master_read_direct_param (
    SYN_IOLink_Master * master,
    uint8_t addr,
    uint8_t * out_val
) 

Parameters:

  • master Master instance pointer.
  • addr Parameter address (0x00..0x3F).
  • out_val Pointer to receive parameter byte.

Returns:

SYN_OK on success, SYN_ERROR on transport or checksum failure.


Macro Definition Documentation

IEC 61131-9 CRC-6 polynomial (x^6 + x^5 + x^4 + x^3 + x^2 + 1)

#define SYN_IOLINK_CRC6_POLY `0x3DU`


IEC 61131-9 CRC-6 initial seed value.

#define SYN_IOLINK_CRC6_SEED `0x1FU`


Default IO-Link master cycle time in milliseconds.

#define SYN_IOLINK_DEFAULT_CYCLE_MS `5U`



The documentation for this class was generated from the following file src/syntropic/proto/syn_iolink.c