/*
 * ov_1ph2h.h
 *
 *  Created on: 08-06-2017
 *      Author: Krzysztof Jakubczyk
 */

#ifndef OV_1PH2H_H_
#define OV_1PH2H_H_

#include "tdefs.h"

struct dane_wewnetrzne_ov1ph2h
{
//	Wyjscia_rejestratora R; ///< dane ostatniego zaklocenia
//	Time czas_; // moment wystapienia zaklocenia (rejestr tymczasowy - przed zapisem)
//	uint32_t dl_; // dlugosc czasu trwania zaklocenia (rejestr tymczasowy - przed zapisem)
//	float max_; // maksymalna watosc zaklocenia (rejestr tymczasowy - przed zapisem)
	short lp,lp1h,lp2h,lpbezwar; ///<licznik filtracji pobudzen
    u32 licz_t_; // licznik czasu od pobudzenia dla przekaznika czasowego
	u8 wsk_rej; // nowy zapis rejestracji parametrow zaklocenia (spelnienie kryterium identyfikacji)
	u8 pob1h;///< pobudzenie przekaznika
	u8 pob2h;///< pobudzenie przekaznika
	u8 pob;///< pobudzenie przekaznika
	u8 pobbezwar;///< pobudzenie przekaznika
	u8 zad;///< zadzialanie przekaznika
};

struct nastawy_przeliczone_ov1ph2h
{
    float limit1_; ///< wartosc rozruchowa
    float limit2_; ///< wartosc powrotu
    u32 t_; ///< opoznienie czasu zadzialania przekaznika
    u8 on_; ///< wartosc nastawy aktywnosci przekaznika 1- aktywny
    u8 w_; ///< wartosc nastawy dzialania na wylaczeniee 1 - wylaczenie 0 - tylko sygnalizacja
    u8 bl_; ///< wartosc nastawy aktywnosci blokady dzialania 1- blokada aktywna
    float I2h;
    float I2h_powr;
    float I2h_min;
    float Ibezwar;
    float Ibezwar_powr;
    u32 full_period;
};
struct ov_1ph2h_logic
{
	u8 *stan_bl;
	u8 stan_bl_bit_no;
	float *I;
	float *I2h;
	u8 *test;
	u8 test_bit_no;
	u8 *W;
	u8 W_bit_no;
	u8 *Z;
	u8 Z_bit_no;
	u8 *P;
	u8 P_bit_no;
	struct binary_io bl_2h;
	struct binary_io bezwar;

	struct nastawy_przeliczone_ov1ph2h nast_;
    struct dane_wewnetrzne_ov1ph2h dw;
};

struct ov_1ph2h_io
{
    u32 stan_bl_in;
    u32 I_float_in;
    u32 I2h_float_in;
	u32 test_in;

	u32 W_out;
    u32 Z_out;
    u32 P_out;
    u32 bl_2h_out;
    u32 bezwar_out;
}__attribute__((__packed__));

struct ov_1ph2h_params
{
	u32 bity; ///< nastawy bitowe;
    double Wr_; ///< wartosc nastawy rozruchowej przekaznika w krotnosciach wartosci znamionowej
    double kp_; ///< wartosc nastawy wspolczynnika powrotu
    double t_; ///< wartosc nastawy czasu dzialania w sekundach
    double I2h;
    double Ibezwar;
    u32 filter_type;
}__attribute__((__packed__));

struct ov_1ph2h_args
{
	struct ov_1ph2h_io io;
	struct ov_1ph2h_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void ov_1ph2h(void *args, void *logic);
extern void ov_1ph2h_100hz(void *args, void *logic);
extern int ov_1ph2h_initlog(void *arguments, void *logic);

#endif /* OV_1PH2H_H_ */
