#include "i2c_annexe.h"
#include "i2c_maitre.h"
#include "stdio.h"

#define ADRESSE_PICO_ANNEXE 0x17
#define ADRESSE_DEBUT_W 0x08
#define ADRESSE_DEBUT_R 0x0A
#define ADRESSE_TURBINE_PORTE 0x0A
#define ADRESSE_CONTACTEURS 0x0B
#define TAILLE_DONNEES_EMISSION 3
#define TAILLE_DONNEES_RECEPTION 13

uint donnees_a_envoyer=0;

uint8_t donnees_emission[TAILLE_DONNEES_EMISSION];
uint8_t donnees_reception[TAILLE_DONNEES_RECEPTION];

void i2c_annexe_gestion(){
    static enum {
        EMISSION_DONNEES,
        RECEPTION_DONNEES

    } etat_i2c_annexe=EMISSION_DONNEES;
    enum i2c_resultat_t retour_i2c;

    switch(etat_i2c_annexe){
        case EMISSION_DONNEES:
            if(donnees_a_envoyer){
                retour_i2c = i2c_ecrire_registre_nb(ADRESSE_PICO_ANNEXE, ADRESSE_DEBUT_W, donnees_emission, TAILLE_DONNEES_EMISSION);
                if(retour_i2c == I2C_SUCCES){
                    etat_i2c_annexe = RECEPTION_DONNEES;
                    donnees_a_envoyer=0;
                }
            }else{
                etat_i2c_annexe = RECEPTION_DONNEES;
            }
            break;
        
        case RECEPTION_DONNEES:
            retour_i2c = i2c_lire_registre_nb(ADRESSE_PICO_ANNEXE, ADRESSE_DEBUT_R, donnees_reception, TAILLE_DONNEES_RECEPTION);
            if(retour_i2c == I2C_SUCCES){
                etat_i2c_annexe = EMISSION_DONNEES;

            }
            break;
    }

}

void i2c_annexe_active_turbine(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] |= 0x01;
    donnees_a_envoyer=1;
}
void i2c_annexe_desactive_turbine(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] &= 0xFE;
    donnees_a_envoyer=1;
}

void i2c_annexe_ouvre_porte(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] &= 0xFD;
    donnees_a_envoyer=1;
}
void i2c_annexe_ferme_porte(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] |= 0x02;
    donnees_a_envoyer=1;
}

void i2c_annexe_active_propulseur(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] |= 0x04;
    donnees_a_envoyer=1;
}
void i2c_annexe_desactive_propulseur(void){
    donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] &= 0xFB;
    donnees_a_envoyer=1;
}

uint8_t i2c_annexe_get_contacteur_butee_A(void){
    return (donnees_reception[ADRESSE_CONTACTEURS - ADRESSE_DEBUT_R] >> 3) & 0x01;
}

uint8_t i2c_annexe_get_contacteur_butee_C(void){
    return (donnees_reception[ADRESSE_CONTACTEURS - ADRESSE_DEBUT_R] & 0x01);
}

uint8_t i2c_annexe_get_contacteur_longer_A(void){
    return (donnees_reception[ADRESSE_CONTACTEURS - ADRESSE_DEBUT_R] >> 2) & 0x01;
}
uint8_t i2c_annexe_get_contacteur_longer_C(void){
    return (donnees_reception[ADRESSE_CONTACTEURS - ADRESSE_DEBUT_R] >> 1) & 0x01;
}