#include "main.h"
#include "gpio.h"
#include "lampa.h"
#include "struc.h"
#include "message.h"
#include "package.h"

void ReadEnteres(void)
{
  WORDE input, alarm, error;

	input.all=0;
	
	input.bit.bit0 = !IN_06;	//	Контроль ИП1 (питание управляющего контроллера)
	input.bit.bit1 = !IN_05;	//	Контроль ИП2 (питание периферийных устройств)
	input.bit.bit2 = !IN_04;	//	Контроль ИП3 (питание эл. замков, ламп освещения, УКСИ)
	input.bit.bit3 = !IN_03;	//	Контроль ИП4 (питание датчиков тока и напряжения +)
	input.bit.bit4 = !IN_02;	//	Контроль ИП5 (питание датчиков тока и напряжения –)
	input.bit.bit5 = !IN_01;	//	Контроль ИП6 (питание драйверов)

	input.bit.bit6 = !IN_07;	//	Контроль 3х фазного 380 В
	input.bit.bit7 = !IN_08;	//	Заряд накопителя
	input.bit.bit8 = !IN_09;	//	Разряд накопителя
	input.bit.bit9 =  IN_10;	//	Авария в сети 24 В, единственный нормально замкнутый сигнал
	
	input.bit.bitA = (Squazh_U[0] > Squazh_L[0]);	//	Контроль питания ЛСУ
	input.bit.bitB = (Squazh_U[1] > Squazh_L[1]);	//	Контроль питания СВО
	input.bit.bitC = (Squazh_U[2] > Squazh_L[2]);	//	резерв
	input.bit.bitD = (Squazh_U[3] > Squazh_L[3]);	//	Контроль питания СКК
/*	
	input.bit.bitA = !IN_11;	//	Контроль питания ЛСУ
	input.bit.bitB = !IN_12;	//	Контроль питания СВО
	input.bit.bitC = !IN_13;	//	резерв
	input.bit.bitD = !IN_14;	//	Контроль питания СКК
*/	
	Inputs.all = input.all;
	
//	Обычно неисправность это отсутствие сигнала, который есть в маске неисправностей	
	alarm.all = ~Inputs.all & Alarm_mask.all;	
	alarm.bit.bit7 = 0;					//	Заряд накопителя никогда не неисправность
	alarm.bit.bit8 = Inputs.bit.bit8;	//	Разряд накопителя всегда неисправность
	alarm.bit.bit9 = Inputs.bit.bit9;	//	Авария в сети 24 В всегда неисправность
	Alarms = alarm;
	
//	Обычно авария это отсутствие сигнала, который есть в маске аварий
	error.all = ~Inputs.all & Error_mask.all;
	error.bit.bit9 = Inputs.bit.bit9;	//	Авария в сети 24 В всегда авария
	Errors = error;
}

uint16_t ReadJumpers(void)
{
  WORDE input;
	
	input.all = 0;

	input.bit.bit0 = !J0;	
	input.bit.bit1 = !J1;
	input.bit.bit2 = !J2;
	input.bit.bit3 = !J3;
	
	return input.all;
}

uint16_t TestJumper(void)
{	
	return !Jselect;
}

void ReadSeanus(void)
{
  static uint32_t cownt=0;
  static uint32_t sum_u[4];
  static float flt_u[4];
  static uint8_t Ist=1;
  uint8_t i;
	
	if(Ist)
	{
		Ist=0;
		for(i=0;i<4;i++)
		{
			Squazh_U[i]=100;
			flt_u[i]=10000.0;
			sum_u[i]=0;
	}	}
		
	sum_u[0] += !IN_11;
	sum_u[1] += !IN_12;
	sum_u[2] += !IN_13;
	sum_u[3] += !IN_14;
  
	if(++cownt>=10000)
	{
		cownt=0;
		
		for(i=0;i<4;i++)
		{
			flt_u[i] +=((float)sum_u[i]-flt_u[i])/3+1;
			Squazh_U[i]=flt_u[i]/100;
			sum_u[i] = 0;
}	}	}


