229 lines
8.5 KiB
C
229 lines
8.5 KiB
C
// **********************************************************************************************************************************************************************************
|
|
// Fichier ECRAN.C
|
|
//
|
|
// Contient toutes les fonctions liées à l'écran tactile.
|
|
// **********************************************************************************************************************************************************************************
|
|
|
|
// Include :
|
|
#include "main.h"
|
|
|
|
// Prototypes :
|
|
int8_t set_luminosite_ecran(uint16_t luminosite);
|
|
void gestion_ecran(void);
|
|
int8_t init_ecran(void);
|
|
|
|
|
|
// Variables globales :
|
|
struct Struct_ecran ecran;
|
|
|
|
|
|
//==================================================================================================================================================================
|
|
// Fonction : Met à jour le niveau de luminosité de l'écran
|
|
// Reçoit : Le niveau de luminosité attendu (de 0 à 100%), en centièmes de pourcent.
|
|
// Renvoit : 0 si aucune erreur, -1 si une erreur a été détectée
|
|
//==================================================================================================================================================================
|
|
int8_t set_luminosite_ecran(uint16_t luminosite)
|
|
{
|
|
|
|
if (luminosite > ECRAN_CONSIGNE_MAX) return(-1);
|
|
|
|
if (luminosite == 0)
|
|
{
|
|
if (ecran.sequenceur.etat != ETAT_SEQUENCEUR_ECRAN_REPOS_ETEINT) ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_DEMANDE_EXTINCTION;
|
|
}
|
|
else
|
|
{
|
|
if (ecran.sequenceur.etat != ETAT_SEQUENCEUR_ECRAN_REPOS_ALLUME) ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_DEMANDE_ALLUMAGE;
|
|
else // Si on est déjà allumé, uniquement envoi de la consigne au Compagnon pour mise à jour de la consigne de backlight (reste allumé mais à une autre consigne)
|
|
{
|
|
if (ecran.validation_leds == 0) c_bus_down_commande_cde_backlight(ecran.consigne_backlight, 0);
|
|
else c_bus_down_commande_cde_backlight(ecran.consigne_backlight, ecran.consigne_leds);
|
|
}
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
|
|
//==================================================================================================================================================================
|
|
// Fonction : Fonction de plus haut niveau de gestion de l'écran
|
|
// Reçoit : Rien
|
|
// Renvoit : Rien
|
|
//==================================================================================================================================================================
|
|
void gestion_ecran(void)
|
|
{
|
|
char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
|
|
|
|
|
|
switch(ecran.sequenceur.etat)
|
|
{
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_INIT :
|
|
{
|
|
if ((ecran.sequenceur.compteur == 0) && (c_bus.sequenceur.etat != ETAT_SEQUENCEUR_C_BUS_INIT))
|
|
{
|
|
if (ecran.consigne_backlight == 0) ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_DEMANDE_EXTINCTION;
|
|
else ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_DEMANDE_ALLUMAGE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_DEMANDE_EXTINCTION :
|
|
{
|
|
if (ecran.validation_leds == 0) c_bus_down_commande_cde_backlight(0, 0);
|
|
else c_bus_down_commande_cde_backlight(0, ecran.consigne_leds);
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_EXTINCTION_BACKLIGHT_LVDS;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_BACKLIGHT;
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_BACKLIGHT :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_pdown_hdmi_cmd_n, OFF); // Coupure de la commande du HDMI et donc du LVDS. 0 est l'adresse de ShipBase
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_EXTINCTION_LVDS_VGX;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_LVDS;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_LVDS :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_do_lcd_en_vgx, OFF); // .. puis coupure de la commande de VGx. 0 est l'adresse de ShipBAse
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_EXTINCTION_VGX_VDD;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_VGX;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ATTENTE_EXTINCTION_VGX :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_do_lcd_en_vdd, OFF); // Coupure immédiate de la commande de VDD. 0 est l'adresse de ShipBase
|
|
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_REPOS_ETEINT;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_REPOS_ETEINT :
|
|
{
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_DEMANDE_ALLUMAGE :
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_do_lcd_en_vdd, ON); // Activation immédiate de la commande de VDD. 0 est l'adresse de ShipBase
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_ALIMENTATION_VDD_LVDS;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_VDD;
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_VDD :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_pdown_hdmi_cmd_n, ON); // Activation de la commande du HDMI qui émet alors du LVDS. 0 est l'adresse de ShipBase
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_ALIMENTATION_LVDS_VGX;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_LVDS;
|
|
}
|
|
|
|
break;
|
|
}
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_LVDS :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
ecriture_sortie(TYPE_SORTIE_GPIO, 0, ecran.sortie_gpio_cm_do_lcd_en_vgx, ON); // Activation immédiate de la commande de VGx. 0 est l'adresse de ShipBase
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_ALIMENTATION_VGX_BACKLIGHT;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_VGX;
|
|
}
|
|
|
|
break;
|
|
}
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_ALLUMAGE_ATTENTE_VGX :
|
|
{
|
|
if (ecran.sequenceur.compteur == 0)
|
|
{
|
|
if (ecran.validation_leds == 0) c_bus_down_commande_cde_backlight(ecran.consigne_backlight, 0);
|
|
else c_bus_down_commande_cde_backlight(ecran.consigne_backlight, ecran.consigne_leds);
|
|
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_REPOS_ALLUME;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
case ETAT_SEQUENCEUR_ECRAN_REPOS_ALLUME :
|
|
{
|
|
break;
|
|
}
|
|
|
|
//--------------------------------------------------------
|
|
default :
|
|
{
|
|
sprintf(tmp, "L'état du séquenceur Ecran est inconnu [%i]. Il est repositionné au REPOS", ecran.sequenceur.etat);
|
|
affichage_debug(__FILE__, __LINE__, tmp, TYPE_MESSAGE_DEBUG_ERREUR);
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_INIT;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//==================================================================================================================================================================
|
|
// Fonction : Initialise les fonctions de l'écran
|
|
// Reçoit : Rien
|
|
// Renvoit : 0 si aucune erreur, -1 si une erreur a été détectée
|
|
//==================================================================================================================================================================
|
|
int8_t init_ecran(void)
|
|
{
|
|
|
|
ecran.sequenceur.compteur = ECRAN_TEMPO_INIT;
|
|
ecran.sequenceur.etat = ETAT_SEQUENCEUR_ECRAN_INIT;
|
|
|
|
// Ajustement des variables selon la génération de ShipBase en cours :
|
|
if (systeme.generation_shipbase == GENERATION_SHIPBASE_V1)
|
|
{
|
|
ecran.sortie_gpio_cm_pdown_hdmi_cmd_n = CM3P_Pdown_HDMI_CMD_N;
|
|
ecran.sortie_gpio_cm_do_lcd_en_vgx = CM3P_DO_LCD_EN_VGx;
|
|
ecran.sortie_gpio_cm_do_lcd_en_vdd = CM3P_DO_LCD_EN_VDD;
|
|
}
|
|
else
|
|
{
|
|
ecran.sortie_gpio_cm_pdown_hdmi_cmd_n = CM4_Pdown_HDMI_CMD_N;
|
|
ecran.sortie_gpio_cm_do_lcd_en_vgx = CM4_DO_EN_LCD_VGx;
|
|
ecran.sortie_gpio_cm_do_lcd_en_vdd = CM4_DO_EN_LCD_VDD;
|
|
}
|
|
|
|
return(0);
|
|
} |