/*
 * l_comm.h
 *
 *  Created on: 28-11-2016
 *      Author: Krzysztof Jakubczyk
 */

/**
realizacja łącza teletechnicznego dla zabezpieczenia odległościowego - wyłączenie trójfazowe
*/

#ifndef L_COMM_H_
#define L_COMM_H_

#include "tdefs.h"
#include "ZDistL.h"

struct dane_wew_comm
{
	int licztW;
	int licztNad;
	int licztIrev;
	short liczU;
	u8 dbl;
	u8 W_I; // wysłanie impulsu wyłaczającego od bezwarunkowego
	u8 W_E; //wysłanie impulsu wyłączającego od echa
	u8 W;
	u8 Um;
	u8 Nad;
	u8 Nadp;

	struct Wyjscie1_zdistl stan;
};

struct Nastawy_przeliczone_comm
{
	//Adresy adr;
	//R_ZdistA::dane_wewnetrzne dw;
	//R_ZdistA::Wyjscia WeZ0;
	//R_ZdistA::Wyjscia *WeZ;

	u16 Typ;///< Program pracy automatyki

	int t_Nad;///< Długośc impulsu nadawania
	int t_CRL;///< Czas blokady w logice odwróconego prądu
	int t_W;///< Czas wyłączenie od łącza
	float Ur;///< Wartość napięcia dla warunku funkcji ECHA
	float Ur_powr;///< Wartość napięcia dla warunku funkcji ECHA

	u8 On;///< nastawa aktywnosci funkcji
	u8 bl; ///< nastawa aktywnosci bitu blokady
	u8 CRL_ON; ///< Aktywność logiki odwróconego prądu
	u8 ECHO_ON; ///< Aktywność logiki echa
	u8 WD_SPZ_ON; ///< Pobudzenie SPZ przy pracy  bezwarunkowej
	u8 Echo_SPZ_ON; ///< Pobudzenie SPZ przy logice ECHA
	u8 Com_ON[7]; ///< wspólpraca z łączem strefy
	u8 Wbz;///< wyłączenie bezzwłoczne
	u8 *nad; ///< adres sygnału nadawania
	u8 *Str_rev;///< adres sygnału pobudzenia strfy wstecznej
	u8 *Pz;///< adres do pobudzenia zbiorczego odległościówki
};

struct l_comm_logic
{
	u8 *stan_bl;
	u8 stan_bl_bit_no;

	u8 *ok;
	u8 ok_bit_no;

	u8 *odb;
	u8 odb_bit_no;

	float *U1;
	float *U2;
	float *U3;

	u8 *P_Io1;
	u8 P_Io1_bit_no;

	void *We_ZdistL_ptr;

	u8 *test;
	u8 test_bit_no;

	u8 *W;
	u8 W_bit_no;

	u8 *NRL;
	u8 NRL_bit_no;

	struct dane_wew_comm dw;
	struct Nastawy_przeliczone_comm nast_;
	u8 zero;
};

struct l_comm_io
{
	u32 stan_bl_in;
	u32 ok_in;
	u32 odb_in;

	u32 U1_float_in;
	u32 U2_float_in;
	u32 U3_float_in;

	u32 P_Io1_in;
	u32 We_ZdistL_ptr_in;
	u32 test_in;

	u32 W_out;
	u32 NRL_out;
	u32 Stan_L_ptr_out;
}__attribute__((__packed__));

struct l_comm_params
{
	u32 bity; ///< nastawy bitowe;
	u32 Typ;///< Program pracy automatyki
	u32 Nad;///< Nadawanie sygnału od (1,1W,2,3,4,5,Io)
	u32 Odb;///< Sygnał odbierany do współpracy z (1,1W,2,3,4,5,Io)
	u32 Str_rev;///<Numer strefy współpracy z logiką prądu wstecznego
	double t_Nad;///< Długośc impulsu nadawania
	double t_CRL;///< Czas blokady w logice odwróconego prądu
	double t_W;///< Czas wyłączenie od łącza
	double Ur;///< Wartość napięcia dla warunku funkcji ECHA

}__attribute__((__packed__));

struct l_comm_args
{
	struct l_comm_io io;
	struct l_comm_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void l_comm(void *args, void *logic);
extern void l_comm_100hz(void *args, void *logic);
extern int l_comm_initlog(void *arguments, void *logic);

#endif /* L_COMM_H_ */
