/*
 * u_fail.h
 *
 *  Created on: 29-07-2016
 *      Author: Krzysztof Jakubczyk
 */

#ifndef U_FAIL_H_
#define U_FAIL_H_

#include "tdefs.h"

struct wejscia_u_fail
{
	float I1_ort_a; ///< skladowa ortogonalna a skladowej zgodnej pradu
    float I1_ort_b; ///< skladowa ortogonalna b skladowej zgodnej pradu
	float I1; ///< skladowa zgodna pradu
	float I2; ///< skladowa przeciwna pradu
	float I0; ///< skladowa zerowa pradu
	float U1; ///< skladowa zgodna napiecia
	float U2; ///< skladowa przeciwna napiecia
	float U0; ///< skladowa zerowa napiecia
};

struct Nastawy_przeliczone_u_fail
    {
		float Iomin;///<Minimalna wartosc rozruchowa pradu zerowego przekaznika skladowych zerowych
		float Iokh;///<Wspolczynnik stabilizacji charakterystyki przekaznika skladowych zerowych
		float Uomin;///<Wartosc rozruchowa skladowej zerowej napiecia
		float I2min;///<Minimalna wartosc rozruchowa pradu zerowego przekaznika skladowych przeciwnych
		float I2kh;///<Wspolczynnik stabilizacji charakterystyki przekaznika skladowych przeciwnych
		float U2min;///<Wartosc rozruchowa skladowej przeciwnej napiecia
		float DU1;///<Wartosc skokowej zmiany napiecia skladowej zgodnej
		float DI1;///<Wartosc skokowej zmiany pradu
		float DI1k;///<Wartosc skokowej zmiany pradu
		float I1max;///<Wartosc skladowej zgodnej pradu powyżej ktorej blokada zostaje zdjeta
		float U0_dbl;///<Wartosc skladowej zerowej napiecia deblokady przekaznika skladowej zgodnej
		float U1_dbl;///<Wartosc skladowej zgodnej napiecia deblokady przekaznika skladowej zgodnej
		float U2_dbl;///<Wartosc skladowej przeciwnej napiecia deblokady przekaznika skladowej zgodnej

		u8 on;///<Przekaznik aktywny/nieaktywny
		u8 IU0;///<Przekaznik  skladowych zerowych aktywny/nieaktywny
		u8 IU1;///<Przekaznik  skladowych zgodnych aktywny/nieaktywny
		u8 IU2;///<Przekaznik  skladowych przeciwnych aktywny/nieaktywny
		u8 bl;///<Blokada wlaczona/wylaczona
		u16 tz; ///< nastawa czasu opoznienia zadzialania
    };

struct dane_wewnetrzne_u_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)
	float buforI[10][3];
	float buforU[10];
	float I1_old[3];
	float U1_old;
	float U1p;
	float I1p;
	float I1; ///< wartosc skladowej zgodnej pradu w chwili blokady
	float I2; ///< wartosc skladowej przeciwnej pradu w chwili blokady
	float I0; ///< wartosc skladowej zerowej pradu w chwili blokady
	float U1; ///< wartosc skladowej zgodnej napiecia w chwili blokady
	float U2; ///< wartosc skladowej przeciwnej napiecia w chwili blokady
	float U0; ///< wartosc skladowej zerowej napiecia w chwili blokady
	short licz0;//licznik pobudzen dla kryterium skladowej zerowej
	short liczI1;//licznik pobudzen dla kryterium skladowej zgodnej
	short liczI1k;//licznik pobudzen dla kryterium skladowej zgodnej
	short liczU1;//licznik pobudzen dla kryterium skladowej zgodnej
	short liczdU1;//licznik pobudzen dla kryterium skladowej zgodnej
	short licz2;//licznik pobudzen dla kryterium skladowej przeciwnej
	short liczOK;//licznik pobudzen dla kryterium skladowej przeciwnej
	short idx_bufor;
	int liczt;
	u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
	u8 Ufail_0; // stwierdzenie uszkodzenia przez kryterium skladowej zerowej
	u8 Ufail_1; // stwierdzenie uszkodzenia przez kryterium skladowej zgodnej
	u8 Ufail_2; // stwierdzenie uszkodzenia przez kryterium skladowej przeciwnej
	u8 UI1_Iw;
	u8 UI1_Iwk;
	u8 UI1_Uw;
	u8 UI1_dUw;
	u8 U_OK;
	u8 Syg_Ufail;
};

struct u_fail_logic
{
	u8 *stan_bl;
	u8 stan_bl_bit;

	float *I1_orta;
	float *I1_ortb;
	float *I1;
	float *I2;
	float *I0;
	float *U1;
	float *U2;
	float *U0;
	u8 *NHS;
	u8 NHS_bit;
	u8 *W_ON;
	u8 W_ON_bit;
	u8 *test;
	u8 test_bit;
	u8 *Bl_Ufail;
	u8 Bl_Ufail_bit;
	u8 *Syg_Ufail;
	u8 Syg_Ufail_bit;

	struct Nastawy_przeliczone_u_fail nast_;
	struct dane_wewnetrzne_u_fail dw;
	struct wejscia_u_fail w;
};

struct u_fail_io
{
	u32 stan_bl_in;
	u32 I1_orta_float_in;
	u32 I1_ortb_float_in;
	u32 I1_float_in;
	u32 I2_float_in;
	u32 I0_float_in;
	u32 U1_float_in;
	u32 U2_float_in;
	u32 U0_float_in;
	u32 NHS_in;
	u32 W_ON_in;
	u32 test_in;
	u32 Bl_Ufail_out;
	u32 Syg_Ufail_out;
}__attribute__((__packed__));

struct u_fail_params
{
	u32 bity; ///< nastawy bitowe;
	double Iomin;///<Minimalna wartosc rozruchowa pradu zerowego przekaznika skladowych zerowych
	double Iokh;///<Wspolczynnik stabilizacji charakterystyki przekaznika skladowych zerowych
	double Uomin;///<Wartosc rozruchowa skladowej zerowej napiecia
	double I2min;///<Minimalna wartosc rozruchowa pradu zerowego przekaznika skladowych przeciwnych
	double I2kh;///<Wspolczynnik stabilizacji charakterystyki przekaznika skladowych przeciwnych
	double U2min;///<Wartosc rozruchowa skladowej przeciwnej napiecia
	double DU1;///<Wartosc skokowej zmiany napiecia skladowej zgodnej
	double DI1;///<Wartosc skokowej zmiany pradu
	double I1max;///<Wartosc skladowej zgodnej pradu powyżej ktorej blokada zostaje zdjeta
	double U0_dbl;///<Wartosc skladowej zerowej napiecia deblokady przekaznika skladowej zgodnej
	double U1_dbl;///<Wartosc skladowej zgodnej napiecia deblokady przekaznika skladowej zgodnej
	double U2_dbl;///<Wartosc skladowej przeciwnej napiecia deblokady przekaznika skladowej zgodnej
	double tbl;///<Czas po ktorym nastepuje zmiana kryterium deblokady}__attribute__((__packed__));
}__attribute__((__packed__));

struct u_fail_args
{
	struct u_fail_io io;
	struct u_fail_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void u_fail(void *args, void *logic);
extern void u_fail_100hz(void *args, void *logic);
extern void u_fail_20hz(void *args, void *logic);
extern int u_fail_initlog(void *arguments, void *logic);

#endif /* U_FAIL_H_ */
