/*
 * hal.h
 *
 *  Created on: Aug 3, 2016
 *      Author: sebastian
 */

#ifndef HAL_H_
#define HAL_H_

#define RELAIS_HEAT		29
#define RELAIS_PUMP		25
#define RELAIS_POWER	28
#define PIN_PRESSURE_CTRL	7
#define PIN_PROXIMITY_SENSOR	6
#define PIN_INT0		2 // Top button
#define PIN_INT1		0 // Bottom button
#define PIN_FLOW		3 // Flow sensor
#define FLOW_ML_PULSE	(1000.0/990) // Flow sensor: volume (ml) per pulse

#define TIME_BUTTONLONGPRESS	3	//Time in s until a Signal for a long pressed button is sent
/*
 * Explanation for the signal levels
 * SigInt_Psh 			Button is pushed
 * SigInt_Rls 		Button is released
 * SigInt_RlsLong	Button is pressed for more than TIME_BUTTONLONGPRESS seconds
 * SigPressCls 		Pressure control is closed, System is heating
 * SigPressOpn		Pressure control is open, heating is off
 * SigProxOpn		Proximity Sensor is uncovered
 * SigProxCvrd	Proximity Sensor is covered
 */

/*
 * Functions of the buttons, the letter in brackets defines if the event is triggered
 * on push(P), release(R) or long pressing(RLong) of the button
 * TOP Button: Turn machine on(R), start brewing(P),
 *
 * BOTTOM button: Stop brewing immediately(P), Turn machine off(RLong),
 */
enum HalSig {
	SigInt0Psh = 1,
	SigInt0Rls = 2,
	SigInt0RlsLong = 3,
	SigInt1Psh = 4,
	SigInt1Rls = 5,
	SigInt1RlsLong = 6,
	SigPressCls = 7,
	SigPressOpn = 8,
	SigProxOpn = 9,
	SigProxCvrd = 10,
	SigBrewOn = 11,
	SigBrewOff = 12
};



void halInit(void);
void halRelaisOn(int relais);
void halRelaisOff(int relais);
void halRelaisSet(int relais, int state);
int halGetRelaisState(int relais);
void halInt0(void);
void halInt1(void);
void halIntFlow(void);
void halIntPressure(void);
double halgetHeatingTime(void);
void halIntProximity(void);
float halGetFlow(void);
void halResetFlow(void);
bool halIsHeating(void);
bool halProxSensorCovered(void);
int halGetInt0(void);
int halGetInt1(void);
void halSendSignal(HalSig value);
void halMachineOn(void);
void halMachineOff(void);
void halInt0TimerHandler(void);
void halInt1TimerHandler(void);

#endif /* HAL_H_ */
