/*
 * LRW.h
 *
 *  Created on: 29-11-2014
 *      Author: Krzysztof Jakubczyk
 */

#ifndef LRW_H__
#define LRW_H__

//#include "pawel_usun_to.h"

#include "tdefs.h"

    struct Nastawy_przeliczone_lrw
    {
        float limit1_; ///< wartosc rozruchowa
        float limit2_; ///< wartosc powrotu
        u32 t_; ///< opoznienie czasu zadzialania przekaznika     
        u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
        u8 full_period;
    };

	struct dane_wewnetrzne_lrw
	{
//		Wyjscia_rejestratora R; ///< dane ostatniego zaklocenia
//		Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
		short lp1; ///<licznik filtracji pobudzen faza 1
		short lp2; ///<licznik filtracji pobudzen faza 2
		short lp3; ///<licznik filtracji pobudzen faza 3
	    u32 licz_t_; // licznik czasu od pobudzenia dla przekaznika czasowego
		u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
		u8 pob;///< pobudzenie przekaznika
		u8 pob1;///< pobudzenie przekaznika faza 1
		u8 pob2;///< pobudzenie przekaznika faza 2
		u8 pob3;///< pobudzenie przekaznika faza 3
		u8 zad;///< zadzialanie przekaznika
	};

struct LRW_logic
{
	struct binary_io stan_bl;
	float *I1;
	float *I2;
	float *I3;
	
	struct binary_io w_on_L1;
	struct binary_io w_on_L2;
	struct binary_io w_on_L3;	
	struct binary_io wyl_L1;
	struct binary_io wyl_L2;
	struct binary_io wyl_L3;
	struct binary_io test;
	
	struct binary_io retrip_I_L1;
	struct binary_io retrip_I_L2;
	struct binary_io retrip_I_L3;
	struct binary_io retrip_W_L1;
	struct binary_io retrip_W_L2;
	struct binary_io retrip_W_L3;	
	struct binary_io retrip_I_3f;
	struct binary_io retrip_W_3f;
	struct binary_io T2_I;
	struct binary_io T2_W;	
	struct binary_io T1;
	struct binary_io T2;
	struct binary_io pob;
	
	u8 kryt_pr;
	u8 kryt_wyl;

	u8 ret_I_L1;
	u8 ret_I_L2;
	u8 ret_I_L3;
	u8 ret_W_L1;
	u8 ret_W_L2;
	u8 ret_W_L3;
	u8 ret_I_3f;
	u8 ret_W_3f;
	u8 wy_T2_I;
	u8 wy_T2_W;
	u8 wy_T1;
	u8 wy_T2;
	
	u8 pob_I_L1;
	u8 pob_I_L2;
	u8 pob_I_L3;
	u8 pob_W_L1;
	u8 pob_W_L2;
	u8 pob_W_L3;
	u8 pob_I_3f;
	u8 pob_W_3f;
	u8 pob_T2_I;
	u8 pob_T2_W;
	u8 wy_pob;
	
	u32 t1_limit;
	u32 t2_limit;
	
	u32 t_I_L1;
	u32 t_I_L2;
	u32 t_I_L3;
	u32 t_W_L1;
	u32 t_W_L2;
	u32 t_W_L3;	
	u32 t_I_3f;
	u32 t_W_3f;
	u32 t_I_2;
	u32 t_W_2;
		
	struct dane_wewnetrzne_lrw dw;
	struct Nastawy_przeliczone_lrw nast_;// struktura z parametrami
};

struct LRW_io
{
	u32 stan_bl;
	u32 I1_float_in;
	u32 I2_float_in;
	u32 I3_float_in;	
	u32 w_on_L1_in;
	u32 w_on_L2_in;
	u32 w_on_L3_in;
	u32 wyl_L1_in;
	u32 wyl_L2_in;
	u32 wyl_L3_in;	
	u32 test_in;
	
	u32 retrip_I_L1_out;
	u32 retrip_I_L2_out;
	u32 retrip_I_L3_out;
	u32 retrip_W_L1_out;
	u32 retrip_W_L2_out;
	u32 retrip_W_L3_out;
	
	u32 retrip_I_3f_out;
	u32 retrip_W_3f_out;
	
	u32 T2_I_out;
	u32 T2_W_out;
	u32 T1_out;
	u32 T2_out;
	u32 pob_out;

}__attribute__((__packed__));

struct LRW_params
{
	u32 bity; ///< nastawy bitowe;
    double Wr_; ///< wartosc nastawy rozruchowej przekaznika w krotnosciach wartosci znamionowej
    double kp_; ///< wartosc nastawy wspolczynnika powrotu
    double t1_; ///< wartosc nastawy czasu T1 w sekundach
    double t2_; ///< wartosc nastawy czasu T2 w sekundach

}__attribute__((__packed__));

struct LRW_args
{
	struct LRW_io io;
	struct LRW_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void LRW(void *args, void *logic);
extern int LRW_initlog(void *arguments, void *logic);

#endif /* LRW_H__ */
