/*
 * spz_3f.h
 *
 *  Created on: 02-02-2017
 *      Author: PS
 */

#ifndef SPZ_3F_H_
#define SPZ_3F_H_

enum _stan_wew_spz_3f
{
  	CZEKANIE = 0,
   	AKCJA = 1,
   	POBUDZENIE = 2,
   	PRZERWA_BEZNAP = 3,
   	ZALACZ_BLOKADA = 4,
   	NIEUDANY = 5,
   	PRZERWA_BEZNAP_1FAZ = 6,
    ZWARCIE_ROZWOJOWE = 7,
    BLOKADA = 8,
   	CZEKAJ_NA_ODPAD = 9,
   	KOLEJNE_POB = 10,
   	KOLEJNA_AKCJA = 11,
   	ERROR = 12,
   	CZEKANIE_NA_SCK = 13,
   	CZEKANIE_NA_MASTER = 14
};

enum _master_slave
{
	NORMAL = 0,
	MASTER = 1,
	SLAVE = 2	
};


#include "tdefs.h"

    struct Nastawy_przeliczone_spz_3f
    {
    	u8 SPZ_on; //automatyka SPZ aktywna
    	u8 ZW_rozw; ///nie pozwol na zwarcie rzowojowe
        u8 Blok_nieudany; ///blokuj trwale po nieudanym
        u8 kontr_pocz; //czy sprawdzac wylacznik na poczatku
        u8 kontr_kon; //czy sprawdzac wyacznik na koncu
        u8 zal_zw_bit;
    	u8 licz_p; // liczba prob (od 1 do 8)
    	u8 master_slave_on; //wlaczony tryb master slave
    	u16 t[8];  // czas przerwy beznapieciowej (przeliczony na ilosc petli)
    	u16 to;    // czas oczekiwania na odpowiedz wylacznika (przeliczony na ilosc petli)
    	u16 tb;    // czas blokowania (przeliczony na ilosc petli)
    	u16 tz;    // czas impulsu zalaczajacego
    	u16 tp1; // czas przerwy jednofazowej
    	u16 twy; // czas wydluzenia przerwy beznap
    	u16 trozw; // czas przerwy beznap w zwarciu rozwojowym
    	u16 tsck; // czekanie na zgode z SCK
    	u16 t_akcji; // czas akcji
    	u16 t_pod_blokady; //czas podtrzymania blokady
    	u16 t_zal_zw; //czas autoamt zal na zw
		u16 t_slave; 
		u16 t_czek_na_master;


    };

struct spz_3f_logic
{
   	 u8 *Pob;
   	 u8 Pob_bit_mask;
     u8 *Blokada;
     u8 Blokada_bit_mask;
     u8 *W1_ON;
     u8 W1_ON_bit_mask;
     u8 *W2_ON;
     u8 W2_ON_bit_mask;
     u8 *W3_ON;
     u8 W3_ON_bit_mask;
   	 u8 *WYL_1;
   	 u8 WYL_1_bit_mask;
   	 u8 *WYL_2;
   	 u8 WYL_2_bit_mask;
   	 u8 *WYL_3;
   	 u8 WYL_3_bit_mask;
   	 u8 *FAZ_1;
   	 u8 FAZ_1_bit_mask;
   	 u8 *FAZ_3;
   	 u8 FAZ_3_bit_mask;
   	 u8 *kasowanie;
   	 u8 kasowanie_bit_mask;
   	 u8 *gotowosc;
   	 u8 gotowosc_bit_mask;
   	 u8 *wydluzenie_we;
   	 u8 wydluzenie_we_bit_mask;
   	 u8 *sck_we;
   	 u8 sck_we_bit_mask;

	 u8 *master_slave;
   	 u8 master_slave_bit_mask;
	 u8 *wyl_2;
   	 u8 wyl_2_bit_mask;
	 u8 *we_zal_slave;
   	 u8 we_zal_slave_bit_mask;
	 u8 *we_zal;
   	 u8 we_zal_bit_mask;

     u8 *wy_pob;
     u8 wy_pob_bit_mask;
     u8 *Z;
     u8 Z_bit_mask;
     u8 *ZGODA_1F;
     u8 ZGODA_1F_bit_mask;
	 u8 *t_akcji;
	 u8 t_akcji_bit_mask;
     u8 *t_o;
     u8 t_o_bit_mask;
     u8 *t_prz_bez;
     u8 t_prz_bez_bit_mask;
     u8 *t_blokady;
     u8 t_blokady_bit_mask;
     u8 *proba1;
     u8 proba1_bit_mask;
     u8 *proba2;
     u8 proba2_bit_mask;
     u8 *proba3;
     u8 proba3_bit_mask;
     u8 *proba4;
     u8 proba4_bit_mask;
     u8 *proba5;
     u8 proba5_bit_mask;
     u8 *proba6;
     u8 proba6_bit_mask;
     u8 *proba7;
     u8 proba7_bit_mask;
     u8 *proba8;
     u8 proba8_bit_mask;
     u8 *udany;
     u8 udany_bit_mask;
     u8 *nieudany;
     u8 nieudany_bit_mask;
     u8 *rozwojowe;
     u8 rozwojowe_bit_mask;
     u8 *wy_blokady;
     u8 wy_blokady_bit_mask;
     u8 *error;
     u8 error_bit_mask;
     u8 *brakSCK;
     u8 brak_SCK_bit_mask;
     u8 *niegotowy;
     u8 niegotowy_bit_mask;
     u8 *zal_zw;
     u8 zal_zw_bit_mask;

	 u8 *wy_zal_slave;
	 u8 wy_zal_slave_bit_mask;
	 u8 *wy_jest_master;
	 u8 wy_jest_master_bit_mask;
	 u8 *wy_jest_slave;
	 u8 wy_jest_slave_bit_mask;

	 u8 *wy_czek_na_master;
	 u8 wy_czek_na_master_bit_mask;
	 
	 u8 *wy_czek_na_SCK;
	 u8 wy_czek_na_SCK_bit_mask;

	u8 *t_prz_bez_1f;
     u8 t_prz_bez_1f_bit_mask;

   	 struct Nastawy_przeliczone_spz_3f nast_;// struktura z parametramio

     u8 byl_wyl_f1;
     u8 byl_wyl_f2;
     u8 byl_wyl_f3;

     u8 byl_odpad_f1;
     u8 byl_odpad_f2;
     u8 byl_odpad_f3;

     u8 wylaczyla_f1;
     u8 wylaczyla_f2;
     u8 wylaczyla_f3;

	u8 W_ON1_old;
	u8 W_ON2_old;
	u8 W_ON3_old;
	u8 we_zal_old;
	u8 byl_zalacz;
	u8 blokuj_slave;
	u8 ile_fazowy;
	u8 jest_blok_trw;
	
	u8 start_log;

     enum _stan_wew_spz_3f stan_wew;
     enum _master_slave tryb_master_slave;
     u16 licznik_pob;
     u16 licznik_beznap;
     u16 limit_beznap;
     u16 limit_beznap_1faz;
     u16 licznik_zalacz;
     u16 licznik_odwzb;
     u16 licznik_udany;
     u16 wydluzenie;
	 u16 licznik_SCK;
	 u16 licznik_akcji;
	 u16 licznik_pod_blokady;
	 u16 licznik_zal_zw;
     u8 licznik_SPZ;
     u16 licznik_czek_na_master;
    
     u16 licznik_master_slave;
    
     u8 jednofazowy;
     u8 wyj_zgoda_jednofazowy;
     u8 wyj_zgoda_trojfazowy;

};

struct spz_3f_io
{
	 u32 Pob_in;
     u32 Blokada_in;
     u32 W1_ON_in;
     u32 W2_ON_in;
	 u32 W3_ON_in;
	 u32 WYL_1_in;
	 u32 WYL_2_in;
	 u32 WYL_3_in;
	 u32 FAZ_1_in;
	 u32 FAZ_3_in;
	 u32 kasowanie_in;
	 u32 gotowosc_in;
	 u32 wydluzenie_in;
	 u32 sck_in; 
	 u32 master_slave_in; //nowe
	 u32 wyl_2_in; //nowe
	 u32 we_zal_slave_in; //nowe
	 u32 zal_in;

     u32 wy_pob_out;
     u32 Z_out;
     u32 ZGODA_1F_out;
     u32 t_akcji_out;
     u32 t_o_out;
     u32 t_prz_bez_out;
     u32 t_blokady_out;
     u32 proba1_out;
     u32 proba2_out;
     u32 proba3_out;
     u32 proba4_out;
     u32 proba5_out;
     u32 proba6_out;
     u32 proba7_out;
     u32 proba8_out;
     u32 udany_out;
     u32 nieudany_out;
     u32 rozwojowe_out;
     u32 wy_blokady_out;
     u32 error_out;
     u32 brak_SCK_out;
     u32 niegotowy_out;
     u32 zal_zw_out;
	 u32 wy_zal_slave_out; //nowe
	 u32 wy_jest_slave_out; //nowe
	 u32 wy_jest_master_out; //nowe
	 u32 wy_czek_na_master;
	 u32 wy_czek_na_sck;
	 u32 t_prz_bez_1f_out;
	 
}__attribute__((__packed__));

struct spz_3f_params
{
	u32 bity; // nastawy bitowe
	double licz_p; // liczba prob (od 1 do 5)
    double t1;   // czas przerwy beznapieciowej proby 1
    double t2;   // czas przerwy beznapieciowej proby 2
    double t3;   // czas przerwy beznapieciowej proby 3
    double t4;   // czas przerwy beznapieciowej proby 4
    double t5;   // czas przerwy beznapieciowej proby 5
    double t6;   // czas przerwy beznapieciowej proby 6
    double t7;   // czas przerwy beznapieciowej proby 7
    double t8;   // czas przerwy beznapieciowej proby 8
    double to;   // czas oczekiwania na odpowiedz wylacznika
    double tb;   // czas blokowania
    double tz; 	 // czas impulsu zalaczajacego
    double tp1;  // czas przerwy jednofazowej
    double twy;  // czas wydluzenia przerwy beznap
    double troz; // czas przerwy beznapieciowej w zwarciu rozwojowym
    double tsck; // czas oczekiwania na SCK
    double takcji; //czas akcji
    double t_pod_blokady;
    double t_zal_zw;
	double t_slave; 
	double t_czek_na_master;
}__attribute__((__packed__));

struct spz_3f_args
{
	struct spz_3f_io io;
	struct spz_3f_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void spz_3f(void *args, void *logic);
extern int spz_3f_initlog(void *arguments, void *logic);

#endif /* SPZ_3F_H_ */
