IEC 60870-5-101 Slave (cs101_slave.c), supporting both :unbalanced and :balanced link layer modes.
Features:
- Separate Class 1 (high-priority / command confirmations / events) and Class 2 (periodic / background) FIFO queues
- Compatible with
IEC60870.CS104.MasterConnectionhelpers (send_asdu/2,send_act_con/3,send_act_term/2) so application handlers can be shared between 101 and 104 Slaves - Standard application callbacks (
interrogation_handler,counter_interrogation_handler,read_handler,clock_sync_handler,reset_process_handler,delay_acquisition_handler,reset_cu_handler,asdu_handler)
Summary
Functions
Returns a specification to start this module under a supervisor.
Enqueues an ASDU into the Class 1 (high-priority) queue. Safe to call from inside Slave callbacks or external processes.
Enqueues an ASDU into the Class 2 (low-priority) queue. Safe to call from inside Slave callbacks or external processes.
Sets DIR bit in balanced link layer mode.
Sets idle timeout in milliseconds.
Sets local link layer address.
Sets peer station link address.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
@spec enqueue_user_data_class_1(GenServer.server(), IEC60870.ASDU.t()) :: :ok
Enqueues an ASDU into the Class 1 (high-priority) queue. Safe to call from inside Slave callbacks or external processes.
@spec enqueue_user_data_class_2(GenServer.server(), IEC60870.ASDU.t()) :: :ok
Enqueues an ASDU into the Class 2 (low-priority) queue. Safe to call from inside Slave callbacks or external processes.
@spec flush_queues(GenServer.server()) :: :ok
@spec get_app_layer_parameters(GenServer.server()) :: IEC60870.AppLayerParameters.t()
@spec get_link_layer_parameters(GenServer.server()) :: IEC60870.LinkLayerParameters.t()
@spec is_class_1_queue_full?(GenServer.server()) :: boolean()
@spec is_class_2_queue_full?(GenServer.server()) :: boolean()
@spec send_act_con(GenServer.server(), IEC60870.ASDU.t(), boolean()) :: :ok
@spec send_act_term(GenServer.server(), IEC60870.ASDU.t()) :: :ok
@spec set_dir(GenServer.server(), boolean()) :: :ok
Sets DIR bit in balanced link layer mode.
@spec set_idle_timeout(GenServer.server(), pos_integer()) :: :ok
Sets idle timeout in milliseconds.
@spec set_link_layer_address(GenServer.server(), non_neg_integer()) :: :ok
Sets local link layer address.
@spec set_link_layer_address_other_station(GenServer.server(), non_neg_integer()) :: :ok
Sets peer station link address.
@spec start(GenServer.server()) :: :ok
@spec stop(GenServer.server()) :: :ok