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 0x3DUIEC 61131-9 CRC-6 polynomial (x^6 + x^5 + x^4 + x^3 + x^2 + 1) |
| define | SYN_IOLINK_CRC6_SEED 0x1FUIEC 61131-9 CRC-6 initial seed value. |
| define | SYN_IOLINK_DEFAULT_CYCLE_MS 5UDefault IO-Link master cycle time in milliseconds. |
Public Functions Documentation¶
function syn_iolink_calc_checksum¶
Calculate standard IO-Link 6-bit CRC with parity.
Parameters:
dataData buffer to calculate checksum over.lenData length in bytes.
Returns:
8-bit Checksum byte (6-bit CRC in bits 0..5, parity in bits 6..7).
function syn_iolink_device_get_pd_out¶
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:
devDevice instance.out_bufBuffer receiving process data.max_lenCapacity of output buffer.out_lenPointer receiving length.
Returns:
SYN_OK on success.
function syn_iolink_device_init¶
Initialize IO-Link Device.
Parameters:
devDevice instance to initialize.cfgConfiguration parameters and parameter page values.
Returns:
SYN_OK on success.
function syn_iolink_device_process_frame¶
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:
devDevice instance.rxMaster frame payload.rx_lenMaster frame length.txBuffer receiving device response frame.max_txCapacity of response buffer.out_lenPointer receiving response length.
Returns:
SYN_OK on success.
function syn_iolink_device_set_pd_in¶
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:
devDevice instance.dataInput process data payload.lenLength of process data.
Returns:
SYN_OK on success.
function syn_iolink_master_exchange_pd¶
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:
masterMaster instance.pd_outOutput process data to send to device (actuator command).out_lenLength of output process data.pd_inBuffer receiving input process data from device (sensor measurement).in_lenPointer receiving length of input process data.
Returns:
SYN_OK on success.
function syn_iolink_master_init¶
Initialize IO-Link Master.
SYN_Status syn_iolink_master_init (
SYN_IOLink_Master * master,
const SYN_IOLink_MasterConfig * cfg
)
Parameters:
masterMaster instance to initialize.cfgConfiguration parameters.
Returns:
SYN_OK on success, SYN_INVALID_PARAM on invalid argument.
function syn_iolink_master_pt¶
Protothread continuation function for syn_sched .
Parameters:
ptProtothread continuation structure.taskTask handle containing SYN_IOLink_Master in user_data.
Returns:
SYN_PT_Status continuation status.
function syn_iolink_master_read_isdu¶
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:
masterMaster instance.index16-bit ISDU Index.subindex8-bit ISDU Subindex.dataBuffer receiving parameter data.max_lenCapacity of parameter buffer.out_lenPointer receiving parameter data length.
Returns:
SYN_OK on success.
function syn_iolink_master_start¶
Trigger master startup handshake sequence on connected port.
Parameters:
masterMaster instance.
Returns:
SYN_OK on success.
function syn_iolink_master_step¶
Step the IO-Link master state machine and cyclic communication loop.
Parameters:
masterMaster instance.now_msCurrent timestamp in milliseconds.
Returns:
SYN_OK on success.
function syn_iolink_master_write_isdu¶
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:
masterMaster instance.index16-bit ISDU Index.subindex8-bit ISDU Subindex.dataParameter data to write.lenParameter 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:
masterMaster instance pointer.addrParameter address (0x00..0x3F).out_valPointer to receive parameter byte.
Returns:
SYN_OK on success, SYN_ERROR on transport or checksum failure.
Macro Definition Documentation¶
define SYN_IOLINK_CRC6_POLY¶
IEC 61131-9 CRC-6 polynomial (x^6 + x^5 + x^4 + x^3 + x^2 + 1)
define SYN_IOLINK_CRC6_SEED¶
IEC 61131-9 CRC-6 initial seed value.
define SYN_IOLINK_DEFAULT_CYCLE_MS¶
Default IO-Link master cycle time in milliseconds.
The documentation for this class was generated from the following file src/syntropic/proto/syn_iolink.c