/*
 * i_fail.h
 *
 *  Created on: 03-08-2016
 *      Author: Krzysztof Jakubczyk
 */

#ifndef I_FAIL_H_
#define I_FAIL_H_

#include "tdefs.h"

struct Nastawy_przeliczone_i_fail
    {
	float Imin;///<przeliczona wartość minimalna charakterystyki
	float Ikh;///<przeliczony wspołczynnik stabilizacji charakterystyki
	float ksch;///<wspolczynnik dopasowania pradu
	float ksch2;///<kwadrat wspolczynnika dopasowania pradu

	float Idbl;///<przeliczona wartość rozruchowa deblokady od prądu fazowego
	float Udbl;///<przeliczona wartośc rozruchowa deblokady od napięcia zerowego


	u8 on;///<Przekaznik aktywny/nieaktywny
	u8 WyBl_ON;///< działanie blokady włączone/wyłączone
	u8 Idbl_ON;///< włączona deblokada od amplitudy prądu
	u8 Udbl_ON;///< włączona deblokada od napięcia zerowego
	u8 bl;///<Blokada wlaczona/wylaczona
	unsigned short tz; ///< nastawa czasu opoznienia zadzialania
    };

struct dane_wewnetrzne_i_fail
{
//	Wyjscia_rejestratora R; ///< dane ostatniego zakcenia
//	Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
	u32 dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
	u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)

	short licz_Irr;
	short licz_Idbl;
	short licz_Udbl;

	int liczt;

	u8 PIdbl;
	u8 PUdbl;
	u8 PIrr;
	u8 P;
	u8 Syg_Ifail;
	float Irr;
//dane rejestratora
	float RIrr; ///< prąd rozruchowy kryterium różnicowego
	float RI1L1; ///< prąd fazy 1
	float RI1L2; ///< prąd fazy 2
	float RI1L3; ///< prąd fazy 3
	float RIref; ///< prad odniesienia
	float RI1S0;///< prąd składowej zerowej
	float RUS0; ///< napięcie składowej zerowej

};

struct i_fail_logic
{
	u8 *test;
	u8 test_bit;

	float *I1S0a;
	float *I1S0b;
	float *I1S0;
	float *Irefa;
	float *Irefb;
	float *Iref;
	float *I1L1;
	float *I1L2;
	float *I1L3;
	float *U1S0;

	u8 *stan_bl;
	u8 stan_bl_bit;

	u8 *Bl_Ifail;
	u8 Bl_Ifail_bit;

	u8 *Ifailsyg;
	u8 Ifailsyg_bit;

	struct Nastawy_przeliczone_i_fail nast_;
	struct dane_wewnetrzne_i_fail dw;
};

struct i_fail_io
{
	u32 test_in;
	u32 I1S0a_float_in;
	u32 I1S0b_float_in;
	u32 I1S0_float_in;
	u32 Irefa_float_in;
	u32 Irefb_float_in;
	u32 Iref_float_in;
	u32 I1L1_float_in;
	u32 I1L2_float_in;
	u32 I1L3_float_in;
	u32 U1S0_float_in;
	u32 stan_bl_in;
	u32 Bl_Ifail_out;
	u32 Ifailsyg_out;
}__attribute__((__packed__));

struct i_fail_params
{
	u32 bity; ///< nastawy bitowe;
	double Imin;///<Minimalna wartosc rozruchowa pradu róznicowego
	double Ikh;///<Wspolczynnik stabilizacji charakterystyki
	double ksch;///<Współczynnik dopasowania prądów
	double tdbl;///<Czas działania deblokady
	double Idbl;///<Wartość rozruchowa prądu deblokady
	double Udbl;///<Wartość rozruchowa napięcia deblokady
}__attribute__((__packed__));

struct i_fail_args
{
	struct i_fail_io io;
	struct i_fail_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void i_fail(void *args, void *logic);
extern void i_fail_100hz(void *args, void *logic);
extern void i_fail_20hz(void *args, void *logic);
extern int i_fail_initlog(void *arguments, void *logic);

#endif /* I_FAIL_H_ */
