/*
 * e_f.h
 *
 *  Created on: 28-06-2016
 *      Author: Krzysztof Jakubczyk
 */

#ifndef E_F_H_
#define E_F_H_

#include "tdefs.h"

struct e_f_wyjscie
{
    float f_[300]; ///< wartosc chwilowa
    unsigned short idx_; ///< identyfikator polozenia ostatniego pomiaru w tablicy
    unsigned short OK_[300]; ///< numer petli wyniku, jesli0 to pomiar zabity
};

struct e_f_dane_wew
{
    float war_sk_; ///< wartosc skuteczna
    float war_sr_; ///< wartosc srednia wyprostowana
    float il_p_; ///< ilosc pelnych probek w okresie pomiarowym
};

struct e_f_dane_do_wyliczenia
{
    float war_sk_; ///< wartosc skuteczna
    float war_sk_pop_; ///< poprzednia wartosc skuteczna - z ostatniego pomiaru
    float war_sr_; ///< wartosc srednia wyprostowana
    float il_p_; ///< ilosc pelnych probek w okresie pomiarowym
    float reszta_; ///< odcinek sinusa z poczatku (niepelna probka)
	float skok;
	short nrp;
	unsigned short nrprobki;
	u8 wylicz;///< flaga nowego pomiaru
};

struct e_f_dane_wew_2
{
    float f_[5]; // pomiar czastkowy czestotliwosci - z jednego okresu
    u8 f_OK_[5]; // poprawny pomiar dla danego okresu
};

struct e_f_Nastawy_przeliczone
{
    float Ublr_; ///< wartosc blokady
	float ofset;
	float mnoznik1;
	float mnoznik;
};

struct e_f_logic
{
	u16 *buf_ptr;
	float *esk_ptr;
	float *orta_ptr;
	float *ortb_ptr;

    float Ublr_; ///< wartosc blokady
	float ofset;
	float mnoznik1;
	float mnoznik;

	struct e_f_dane_do_wyliczenia d_plus;
	struct e_f_dane_do_wyliczenia d_minus;
	struct e_f_Nastawy_przeliczone nast_; //wartosci blokady pomiaru czestotliwosci
    float probka_n_minus1; // pamiec poprzedniej probki
    float okres_n_minus1;   // pamiec poprzednio zmierzonego okresu
    float probka_n_; // probka biezaca
    struct e_f_dane_wew plus; //zmienne pomocnicze dla obliczen okresu od plusa
    struct e_f_dane_wew minus; //zmienne pomocnicze dla obliczen okresu od minusa
    struct e_f_dane_wew_2 f_cz; //dane czastkowe pomiaru czestotliwosci
    short idx_f;//indeks bufora pomiarow czastkowych czestotliwosci
    unsigned short nrprobki;
	short nrp,nrp_minus1;
	float skok;
	float mn[3];
	struct e_f_wyjscie wy;
};

struct e_f_io
{
	u32 buf_u16_ptr_in;
	u32 param_an_ptr_in;
	u32 f_ptr_out;
}__attribute__((__packed__));

struct e_f_params
{
	double Ubl_;
}__attribute__((__packed__));

struct e_f_args
{
	struct e_f_io io;
	struct e_f_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void e_f(void *args, void *logic);
extern void e_f_100hz(void *args, void *logic);
extern int e_f_initlog(void *arguments, void *logic);

#endif /* E_F_H_ */
