/*
 * sck.h
 *
 *  Created on: 12-01-2017
 *      Author: Krzysztof Jakubczyk
 */

#ifndef SCK_H_
#define SCK_H_

#include "tdefs.h"

    struct Nastawy_przeliczone_sck
    {
		float Uarm;///<prog dolny dedekcji napiecia Ua
		float Uarw;///<prog gorny dedekcji napiecia Ua
		float Ubrm;///<prog dolny dedekcji napiecia Ub
		float Ubrw;///<prog gorny dedekcji napiecia Ub
		float DUr;///< dopuszczalna rożnica wektorow napiec
		float Dfr;///< dopuszczalna rożnica czestotliwosci
		float Dfir;///< dopuszczalna rożnica kata
		float Uapm;///<prog dolny dedekcji napiecia Ua (powrot)
		float Uapw;///<prog gorny dedekcji napiecia Ua (powrot)
		float Ubpm;///<prog dolny dedekcji napiecia Ub (powrot)
		float Ubpw;///<prog gorny dedekcji napiecia Ub (powrot)
		float DUp;///< dopuszczalna rożnica wektorow napiec (powrot)
		float Dfp;///< dopuszczalna rożnica czestotliwosci (powrot)
		float Dfip;///< dopuszczalna rożnica kata (powrot)
		u16 Ub;///< wybor fazy odniesienia
		u8 On;///< nastawa aktywnosci funkcji
		u8 bl; ///< nastawa aktywnosci bitu blokady
		u8 N00; ///< Zalaczenie bez napiecia po obydwu stronach
		u8 N01; ///< Zalaczenie bez napiecia po stronie U1 i pod napieciem po stronie U2
		u8 N10; ///< Zalaczenie pod napieciem po stronie U1 i bez napiecia po stronie U2
		u8 N11; ///< Zalaczenie pod napieciem po obydwu stronach
		u8 delU; ///< Metoda liczenia delta U
    };

	struct dane_wewnetrzne_sck
	{
		short lUarm;
		short lUbrm;
		short lUarw;
		short lUbrw;
		short lDU;
		short lDfi;
		short lDf;
		short licz_pom;
		float cosfi;
		float DUa;
		float DUb;
		float DU;
	};

	struct Wyjscia_binarne_sck
	{
		u8 Z; ///< zezwolenie na zalaczenie
		u8 P_Uam;///< pobudzenie kryterium podnapieciowego wejscie 1
		u8 P_Uaw;///< pobudzenie kryterium nadnapieciowego wejscie 1
		u8 P_Ubm;///< pobudzenie kryterium podnapieciowego wejscie odniesienia
		u8 P_Ubw;///< pobudzenie kryterium nadnapieciowego wejscie odnesienia
		u8 P_DU;///< pobudzenie kryterium rożnicy napiecia
		u8 P_Df;///< pobudzenie kryterium rożnicy czestotliwosci
		u8 P_Dfi;///< pobudzenie kryterium rożnicy kata
	};

struct sck_logic
{
	u8 *bl;
	u8 bl_bit_mask;

	float *U1_orta;
	float *U1_ortb;
	float *U2_orta;
	float *U2_ortb;
	float *U3_orta;
	float *U3_ortb;

	float *Ub_orta;
	float *Ub_ortb;
	float *Ub;
	float *fa;
	u8 *fa_OK;
	u8 fa_OK_bit_mask;
	float *fb;
	u8 *fb_OK;
	u8 fb_OK_bit_mask;
	u8 *test;
	u8 test_bit_mask;

	u8 *Z;
	u8 Z_bit_mask;
	u8 *P_Uam;
	u8 P_Uam_bit_mask;
	u8 *P_Uaw;
	u8 P_Uaw_bit_mask;
	u8 *P_Ubm;
	u8 P_Ubm_bit_mask;
	u8 *P_Ubw;
	u8 P_Ubw_bit_mask;
	u8 *P_DU;
	u8 P_DU_bit_mask;
	u8 *P_Df;
	u8 P_Df_bit_mask;
	u8 *P_Dfi;
	u8 P_Dfi_bit_mask;

	float *Df;
	float *Dfi;
	float *DU;

	u8 *f_OK;
	u8 f_OK_bit_mask;

	float A;

	struct Wyjscia_binarne_sck stan_;
	struct dane_wewnetrzne_sck dw;
	struct Nastawy_przeliczone_sck nast_;// struktura z parametramio
};

struct sck_io
{
	u32 bl_in;

	u32 U1_orta_float_in;
	u32 U1_ortb_float_in;
	u32 U2_orta_float_in;
	u32 U2_ortb_float_in;
	u32 U3_orta_float_in;
	u32 U3_ortb_float_in;

	u32 Ub_orta_float_in;
	u32 Ub_ortb_float_in;
	u32 Ub_float_in;

	u32 fa_float_in;
	u32 fa_OK_in;
	u32 fb_float_in;
	u32 fb_OK_in;

	u32 test_in;

	u32 Z_out;
	u32 P_Uam_out;
	u32 P_Uaw_out;
	u32 P_Ubm_out;
	u32 P_Ubw_out;
	u32 P_DU_out;
	u32 P_Df_out;
	u32 P_Dfi_out;

	u32 Df_float_out;
	u32 Dfi_float_out;
	u32 DU_float_out;

	u32 f_OK_out;

}__attribute__((__packed__));

struct sck_params
{
	u32 bity; ///< nastawy bitowe;
	u32 Ub;///< wybor fazy odniesienia
	double Uarm;///<prog dolny dedekcji napiecia Ua
	double Uarw;///<prog gorny dedekcji napiecia Ua
	double Ubrm;///<prog dolny dedekcji napiecia Ub
	double Ubrw;///<prog gorny dedekcji napiecia Ub
	double DUr;///< dopuszczalna rożnica wektorow napiec
	double Dfr;///< dopuszczalna rożnica czestotliwosci
	double Dfir;///< dopuszczalna rożnica kata
}__attribute__((__packed__));

struct sck_args
{
	struct sck_io io;
	struct sck_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void sck(void *args, void *logic);
extern void sck_100hz(void *args, void *logic);
extern void sck_20hz(void *args, void *logic);
extern int sck_initlog(void *arguments, void *logic);

#endif /* SCK_H_ */
