Import initial du projet shipheart_appli

This commit is contained in:
2026-08-13 10:33:28 +02:00
commit 8fe204361b
62 changed files with 32339 additions and 0 deletions
+229
View File
@@ -0,0 +1,229 @@
// **********************************************************************************************************************************************************************************
// 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);
}