/*
 * helper.h
 *
 *  Created on: 21-07-2016
 *      Author: KJ
 */

#ifndef HELPER_H_
#define HELPER_H_

struct ortho
{
	float orta;
	float ortb;
};

struct binary_io
{
	u8 *ptr;
	u8 bit_mask;
};

enum rej_ost //typ dla stanu rejestratora ostatniego popbudzenia
{
	oczekiwanie,
	sledzenie,
	sledzenie_zad,
	zapis,
	blokada,
	stan_nieustalony
};

extern enum rej_ost status_rej;

extern void sprawdz_P(u8 *Wy, u8 P, u8 O, short *lp, short iz, short io);
extern void sprawdz_P_100(u8 *Wy, u8 P, u8 O, short *lp, short iz, short io);

inline void check_and_set(u32 cond, u8 *byte, u8 bit)
{
	if(cond)
		*byte|=(1<<bit);
	else
		*byte&=~(1<<bit);
}

inline void check_and_set_mask(u32 cond, u8 *byte, u8 mask)
{
	if(cond)
		*byte|=mask;
	else
		*byte&=~mask;
}

inline void check_and_set_struct(u32 cond, struct binary_io *b)
{
	if(cond)
		*b->ptr|=b->bit_mask;
	else
		*b->ptr&=~b->bit_mask;
}

inline int check_struct(struct binary_io *b)
{
	return (*b->ptr & b->bit_mask);
}

inline void set_struct(struct binary_io *b)
{
	*b->ptr|=b->bit_mask;
}

inline void clear_struct(struct binary_io *b)
{
	*b->ptr&=~b->bit_mask;
}

extern int czy_test_R();
extern int set_bit_ptr(u32 io,void *bit_ptr, u8 *bit_no);
extern int set_bit_ptr_mask(u32 io,void *bit_ptr, u8 *mask);
extern int set_bit_ptr_struct(u32 io,struct binary_io *b);
extern int set_float_ptr(u32 io,void *float_ptr);
extern int set_pointer_in_ptr(u32 io, u32 *pointer_ptr);
extern int set_pointer_out_ptr(u32 io, u32 *pointer_ptr);

#endif /* HELPER_H_ */
