/*
 * analog_in.h
 *
 *  Created on: 06-05-2014
 *      Author: Krzysztof Jakubczyk
 */

#ifndef ANALOG_IN_H_
#define ANALOG_IN_H_

#include "tdefs.h"

	struct Nastawa_przeliczona_analog_in
	{
		float mnoznik;///< stala przeliczenia int na float z korekcja wzmocnienia
		float offset; ///< wartosc korekcji przesuniecia skladowej stalej
	};

	struct analog_in_params_extended
	{
		u32 card_addr;
		u32 phase_num;
		double offset;
		double multiplier;
	    double znam_wtor; ///< watosc znamionowa wtorna
	    double znam_pierw; ///< wartosc znamionowa pierwotna
	    long jednostka;
	    u32 bits;
	    struct Nastawa_przeliczona_analog_in nast;
	}__attribute__((__packed__));

struct analog_in_logic
{
	u8 *kob_ptr;
	u8 kob_bit_no;
	float *cur_sample_ptr;
	short *raw_sample_ptr;
	struct analog_in_params_extended params_ext;
};

struct analog_in_io
{
	u32 sample_float_out;
	u32 samples_buf_ptr_out;
	u32 params_ptr_out;
	u32 sample_raw_short_out;
	u32 kob_out;
}__attribute__((__packed__));


struct analog_in_params
{
	u32 card_addr;
	u32 phase_num;
	double offset;
	double multiplier;
    double znam_wtor; ///< watosc znamionowa wtorna
    double znam_pierw; ///< wartosc znamionowa pierwotna
    long jednostka;
    u32 bits;
}__attribute__((__packed__));


//bits
#define ANALOG_NEGATION	0x01

struct analog_in_args
{
	struct analog_in_io io;
	struct analog_in_params params;
//	u16 crc;
}__attribute__((__packed__));

extern void analog_in(void *args, void *logic);
extern int analog_in_initlog(void *arguments, void *logic);

#endif /* ANALOG_IN_H_ */
