/*
 * Diff_1.h
 *
 *  Created on: 01-03-2017
 *      Author: Krzysztof Jakubczyk
 */

#ifndef DIFF_1_BIS_H_
#define DIFF_1_BIS_H_

#include "Diff.h"

//#include "pawel_usun_to.h"


#include "tdefs.h"


extern u16 pY_ZPrAE[25];
extern u16 pD_ZPrAE[25];
extern struct kom1_zprae Y2w_ZPrAE;
extern struct kom2_zprae Y3w_ZPrAE;
extern struct kom1_zprae D2w_ZPrAE;
extern struct kom1_zprae D3w_ZPrAE;

#define c1r 5 //ilosc powtorzen zadzialania bezwarunkowego
#define c1p 30 //ilosc powtorzen odpadu bezwarunkowego
#define c2r 2 //ilosc powtorzen zadzialania blokady 2h
#define c2p 7 //ilosc powtorzen odpadu blokady 2h
#define c3r 2 //ilosc powtorzen zadzialania blokady 5h
#define c3p 10 //ilosc powtorzen odpadu blokady 5h
#define c4r 5 //ilosc powtorzen zadzialania czasowej blokady
#define c5r 20 //ilosc powtorzen zadzialania stabilizowanej strefy dzialania !!!!!!!!Pawel bylo 2
#define c5p 2 //ilosc powtorzen odpadu stabilizowanej strefy dzialania

struct diff_1_bis_io
{
	u32 stan_bl_in;
	u32 ia_l1_ptr_in;
	u32 ia_l1_params_ptr_in;
	u32 ia_l2_ptr_in;
	u32 ia_l2_params_ptr_in;
	u32 ia_l3_ptr_in;
	u32 ia_l3_params_ptr_in;
	u32 ib_l1_ptr_in;
	u32 ib_l1_params_ptr_in;
	u32 ib_l2_ptr_in;
	u32 ib_l2_params_ptr_in;
	u32 ib_l3_ptr_in;
	u32 ib_l3_params_ptr_in;
	u32 ic_l1_ptr_in;
	u32 ic_l1_params_ptr_in;
	u32 ic_l2_ptr_in;
	u32 ic_l2_params_ptr_in;
	u32 ic_l3_ptr_in;
	u32 ic_l3_params_ptr_in;
	
	/*
	u32 id_l1_ptr_in;
	u32 id_l1_params_ptr_in;
	u32 id_l2_ptr_in;
	u32 id_l2_params_ptr_in;
	u32 id_l3_ptr_in;
	u32 id_l3_params_ptr_in;
	*/
	
	u32 test_in;

	u32 w_out;
	u32 z_out;
	u32 p_out;
	u32 pl1_out;
	u32 pl2_out;
	u32 pl3_out;
	u32 bl_2h_L1_out;
	u32 bl_2h_L2_out;
	u32 bl_2h_L3_out;
	u32 bl_5h_L1_out;
	u32 bl_5h_L2_out;
	u32 bl_5h_L3_out;
	u32 zzew1_out;
	u32 zzew2_out;
	u32 zzew3_out;
	u32 di_l1_float_out;
	u32 di_l2_float_out;
	u32 di_l3_float_out;
	u32 ih_l1_float_out;
	u32 ih_l2_float_out;
	u32 ih_l3_float_out;
	u32 i2h_l1_float_out;
	u32 i2h_l2_float_out;
	u32 i2h_l3_float_out;
	u32 i5h_l1_float_out;
	u32 i5h_l2_float_out;
	u32 i5h_l3_float_out;
	u32 ir_l1_ch_float_out;
	u32 ir_l2_ch_float_out;
	u32 ir_l3_ch_float_out;
	u32 nieobs_out;
	u32 pob_bezwar_out;
//	u32 ih_l1_ch_float_out;
//	u32 ih_l2_ch_float_out;
//	u32 ih_l3_ch_float_out;
}__attribute__((__packed__));

struct diff_1_bis_logic
{
	struct binary_io stan_bl;
	u16 *I1_l1;
	struct analog_in_params_extended *I1_l1_params;
	u16 *I1_l2;
	struct analog_in_params_extended *I1_l2_params;
	u16 *I1_l3;
	struct analog_in_params_extended *I1_l3_params;
	u16 *I2_l1;
	struct analog_in_params_extended *I2_l1_params;
	u16 *I2_l2;
	struct analog_in_params_extended *I2_l2_params;
	u16 *I2_l3;
	struct analog_in_params_extended *I2_l3_params;
	u16 *I3_l1;
	struct analog_in_params_extended *I3_l1_params;
	u16 *I3_l2;
	struct analog_in_params_extended *I3_l2_params;
	u16 *I3_l3;
	struct analog_in_params_extended *I3_l3_params;
	/*
	u16 *I4_l1;
	struct analog_in_params_extended *I4_l1_params;
	u16 *I4_l2;
	struct analog_in_params_extended *I4_l2_params;
	u16 *I4_l3;
	struct analog_in_params_extended *I4_l3_params;
	*/
	struct binary_io test;

	struct binary_io W;
	struct binary_io Z;
	struct binary_io P;
	struct binary_io Pf1;
	struct binary_io Pf2;
	struct binary_io Pf3;
	struct binary_io BL2h1;
	struct binary_io BL2h2;
	struct binary_io BL2h3;
	struct binary_io BL5h1;
	struct binary_io BL5h2;
	struct binary_io BL5h3;
	struct binary_io Zw1;
	struct binary_io Zw2;
	struct binary_io Zw3;
	struct binary_io nieobs;
	struct binary_io pob_bezwar;
	float *Ir1;
	float *Ir2;
	float *Ir3;
	float *Ih1;
	float *Ih2;
	float *Ih3;
	float *I2h1;
	float *I2h2;
	float *I2h3;
	float *I5h1;
	float *I5h2;
	float *I5h3;
	float *Ir_L1_ortb;
	float *Ir_L2_ortb;
	float *Ir_L3_ortb;
//	float *Ih_L1_ortb;
//	float *Ih_L2_ortb;
//	float *Ih_L3_ortb;

	enum jaki_uklad jaki_uklad;
	struct dane_wewnetrzne_Diff dw;
	struct licz l;
	struct pobudzenia_czastkowe P_;
	struct wejscie_wew w;
    struct Nastawy_przeliczone nast_; // struktura z parametrami rozruchowymi
	
	float Irr2;
	float Irr2_p;
	float Ir1_;
	float Ir2_;
	float Ir3_;
	float Ih1_;
	float Ih2_;
	float Ih3_;

	u8 algorytm;

	struct we_an_diff an_struct_i1_l1;
	struct we_an_diff an_struct_i1_l2;
	struct we_an_diff an_struct_i1_l3;
	struct we_an_diff an_struct_i2_l1;
	struct we_an_diff an_struct_i2_l2;
	struct we_an_diff an_struct_i2_l3;
	struct we_an_diff an_struct_i3_l1;
	struct we_an_diff an_struct_i3_l2;
	struct we_an_diff an_struct_i3_l3;
	struct we_an_diff an_struct_i4_l1;
	struct we_an_diff an_struct_i4_l2;
	struct we_an_diff an_struct_i4_l3;

//	float mul_I1[3];
//	float mul_I2[3];
//	float mul_I3[3];
	//	struct Nastawy_przeliczone_Diff_1 nast_;
};


struct diff_1_bis_params
{
	u32 bity; ///< nastawy bitowe;

//	u32 Tr_zas;///<strona zasilania ukladu zabezpieczenia rożnicowego
	u32 GrP1; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia GN (1)
	u32 GrP2; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (2)
	u32 GrP3; ///<fabryczna grupa polaczen uzwojen transformatora dla uzwojenia SN (3)

	double Iro;///< poczatkowy prad rozruchowy
	double Ir;///< graniczny prad rozruchowy
	double Ihg; ///< graniczny prad stabilizacji
	double Ihp;///< prad hamujacy przegiecia
	double Ihd;///< prad rozruchowy blokady czasowej pradu stabilizujacego
	double tbld; ///< czas blokady dzialania po opuszczeniu strefy blokady czasowej
	double rd; ///< przesuniecie strefy blokady czasowej od strefy dzialania
	double kh1;///< wspolczynnik stabilizacji prosta 2
	double kh2; ///< wspolczynnik stabilizacji prosta 3
	double t;///< czas opoznienia dzialania
	double kp;///< wspolczynnik powrotu
	double k_2h;///< wspolczynnik blokowania druga harmoniczna
	double k_5h;///< wspolczynnik blokowania piata harmoniczna
	double PT12;///<przekladnia uzwojen 1-2 transformatora
	double PT13;///<przekladnia uzwojen 1-3 transformatora

}__attribute__((__packed__));

struct diff_1_bis_args
{
	struct diff_1_bis_io io;
	struct diff_1_bis_params params;
//	u16 crc;
}__attribute__((__packed__));


extern void diff_1_bis(void *args, void *logic);
extern int diff_1_bis_initlog(void *arguments, void *logic);

#endif /* DIFF_1_BIS_H_ */
