#ifndef __FILLE_H__
#define __FILLE_H__

#include <stdint.h>
#include <stm32f0xx.h>

#define MASKPAIRE 1

#define NBFILLE 1 //nombre de carte fille

#define MASKNOUR 0b10000000
#define MASKOSMO 0b01000000
#define MASKBRA1 0b00100000
#define MASKBRA2 0b00010000
#define MASKBRAG 0b00001000
#define MASKCHAU 0b00000100
#define MASKECUM 0b00000010
#define MASKREME 0b00000001
#define MASKLUMI 0b00000001
#define MASKOSMM 0b00000010

#define DECALNOUR 7
#define DECALOSMO 6
#define DECALBRA1 5
#define DECALBRA2 4
#define DECALBRAG 3
#define DECALCHAU 2
#define DECALECUM 1
#define DECALREME 0
#define DECALLUMI 0
#define DECALOSMM 1

enum Relais { NO = 0, NC = 1};
enum EtatNourrisage {Nour_Normal = 0, Nour_Nourrisage = 1, Nour_Brassage =2, Nour_Remonter = 3};
enum EtatBrassage 	{Bras_Alternance = 0, Bras_Ensemble = 1, Bras_Arret = 2};
enum Etat {Marche = 1, Arret = 0};

typedef struct{
	uint8_t N_CarteFille;// Numero de la carte
	uint8_t Emplacement; //Emplacement sur la carte (voir KICAD)
	enum Relais Contact;
	enum Etat On;
}Actionneur;

void init_Fille();

HAL_StatusTypeDef readActitoneur(uint8_t* val);

HAL_StatusTypeDef fc_Nourrisage(enum Etat val);
HAL_StatusTypeDef fc_Osmolateur(enum Etat val);
HAL_StatusTypeDef fc_OsmolateurManu(enum Etat val);
HAL_StatusTypeDef fc_Brassage();
HAL_StatusTypeDef fc_Ventilation();
HAL_StatusTypeDef ChangePompe();
HAL_StatusTypeDef fc_Chauffage(enum Etat val);
HAL_StatusTypeDef fc_Ecumeur(enum Etat val);
HAL_StatusTypeDef fc_Remonter(enum Etat val);
HAL_StatusTypeDef fc_Lumiere(enum Etat val);

void modifBit(uint8_t* variable, uint8_t emplacement, uint8_t val);

/*
 * Fonction qui retourne la valeur 0 ou 1 en fonction de l'Etat et du type de relais :
 * Example : 	relais NO et val Marche => 1;
 * 				relais NO et val Eteint => 0;
 * 				relais NC et val Marche => 0;
 * 				relais NC et val Eteint => 1;
 */
uint8_t MarcheArret(enum Etat val, enum Relais relais);

uint8_t EtatBrassageGeneral();

#endif
