IEC60870.CS104.Frame (ExIEC60870 v0.1.0)

Copy Markdown View Source

IEC 60870-5-104 APCI frame codec and stream deframer (cs104_frame.c).

Supports:

  • :i_frame: {:i_frame, send_seq, recv_seq, asdu_binary}
  • :s_frame: {:s_frame, recv_seq}
  • :u_frame: {:u_frame, :startdt_act | :startdt_con | :stopdt_act | :stopdt_con | :testfr_act | :testfr_con}

Summary

Functions

Validates whether ack_seq_no is within the sliding window of unacknowledged sent ASDUs (each item is %{seq_no: integer(), sent_time: integer()}). Returns {:ok, remaining_sent_asdus} or {:error, :sequence_number_out_of_range}. Matches checkSequenceNumber in cs104_connection.c / cs104_slave.c.

Decodes a single complete 104 APCI frame binary (starting with 0x68).

Encodes a 104 APCI frame to wire binary.

Extracts complete APCI frames from a TCP byte stream buffer. Returns {:ok, frames, remaining_buffer} or {:error, reason}.

Types

t()

@type t() ::
  {:i_frame, non_neg_integer(), non_neg_integer(), binary()}
  | {:s_frame, non_neg_integer()}
  | {:u_frame, u_type()}

u_type()

@type u_type() ::
  :startdt_act
  | :startdt_con
  | :stopdt_act
  | :stopdt_con
  | :testfr_act
  | :testfr_con

Functions

check_sequence_number(sent_asdus, send_count, ack_seq_no)

@spec check_sequence_number([map()], non_neg_integer(), non_neg_integer()) ::
  {:ok, [map()], [map()]} | {:error, :sequence_number_out_of_range}

Validates whether ack_seq_no is within the sliding window of unacknowledged sent ASDUs (each item is %{seq_no: integer(), sent_time: integer()}). Returns {:ok, remaining_sent_asdus} or {:error, :sequence_number_out_of_range}. Matches checkSequenceNumber in cs104_connection.c / cs104_slave.c.

decode(arg1)

@spec decode(binary()) :: {:ok, t()} | {:error, term()}

Decodes a single complete 104 APCI frame binary (starting with 0x68).

encode(arg1)

@spec encode(t()) :: {:ok, binary()} | {:error, term()}

Encodes a 104 APCI frame to wire binary.

extract_frames(buffer)

@spec extract_frames(binary()) :: {:ok, [t()], binary()} | {:error, term()}

Extracts complete APCI frames from a TCP byte stream buffer. Returns {:ok, frames, remaining_buffer} or {:error, reason}.