Romain BECAN / Mbed 2 deprecated Mallette_RB10G1_V40

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG lvgl_RB FastPWM millis

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TS_DISCO_F746NG.h"
00003 #include "LCD_DISCO_F746NG.h"
00004 #include "lvgl/lvgl.h"
00005 #include "lv_conf.h "
00006 #include "millis.h"
00007 #include "FastPWM.h"
00008 #include <string>
00009 //#include <stdio.h>
00010 #include "lv_i18n.h"
00011 
00012 #include "lv_theme_rb.h" //GABOR
00013 
00014 Ticker ticker;                //Initialize system tick
00015 LCD_DISCO_F746NG lcd;         //Initialize display driver
00016 TS_DISCO_F746NG ts;           //Initialize touchpad driver
00017 TS_StateTypeDef TS_State;     //Initialize touch state sctruct
00018 
00019 Serial serial(USBTX, USBRX);
00020 
00021 /*********************
00022  *  ENTREES SORTIES
00023  *********************/
00024 //TENSION BATTERIE
00025 AnalogIn AI_TENSION_BAT(A4);
00026 
00027 //PWM
00028 FastPWM fastpwm(D12,1); //steup pwm output on pin d12 with a prescaler of 1   
00029 
00030 //MARCHE POMPE
00031 DigitalOut DO_POMPE(D13);
00032 
00033 //COMPTEUR IMPULSION   
00034 DigitalIn DI_CPTPuls(D7);
00035 //InterruptIn DI_CPTPuls(D7); //
00036 
00037 
00038     
00039 /**********************
00040  * VARIABLES GENERALES 
00041  **********************/
00042 int X;
00043 int Y;
00044 Timer tempo;
00045 bool Top1ms;
00046 bool Top10ms;
00047 bool Top100ms;
00048 bool Top1s;
00049 bool Top5s;
00050 bool Top1min;
00051 char text[100];
00052 char text2[100];
00053 
00054 int CsgPompe=0; 
00055 
00056 uint64_t Micros=0;
00057 
00058 uint64_t MemMicros0=0;
00059 uint64_t MemMicros1=0;
00060 uint64_t MemMicros2=0;
00061 uint64_t MemMicros3=0;
00062 uint64_t MemMicros4=0;
00063 uint64_t MemMicros5=0;
00064 
00065 
00066 
00067 int CalcFmPuls;
00068 int CalcFdPuls;
00069 bool FmCPTPuls;
00070 uint64_t TimerPuls=0;
00071 uint64_t TpsPuls=0;
00072 float Calcul=0;
00073 uint64_t MemTpsPuls=0;
00074 uint64_t MemTps16Puls=0;
00075 int NumDent=0;
00076 uint64_t CptPuls=0;
00077 uint64_t CalcDebit=0;
00078 float TpsEntre2Puls[20];
00079 float TpsMinEntre2Puls;
00080 float TpsMaxEntre2Puls;
00081 float VolParTour=1200;//en ml
00082 
00083 int hres = 480;
00084 int vres = 272;
00085 bool CDA_POMPE;
00086 
00087 uint64_t TpsMaPpe=0;
00088 
00089 
00090 uint64_t test=0;
00091 
00092 //VARIABLES GESTION MOT DE PASSE
00093 
00094 
00095 /*********************
00096  *  FONCTIONS GENERALES
00097  *********************/
00098 static char *S(string S);
00099 char *Chemin; 
00100 static char *HHMMSS(int32_t seconde);
00101 
00102 /*********************
00103  *  OBJET PAGES
00104  *********************/
00105 static lv_obj_t * BandeauHaut;
00106 static void AFFBandeauHaut(int Num);
00107 static lv_obj_t * SousMenu;
00108 static void AFFSousMenu(int Num);
00109 static lv_obj_t * Page;
00110 int PageAff=0;
00111 int MemPageAff=0;
00112 static void AFFPage(int Num);
00113 
00114 
00115 static lv_obj_t * PopupMDP;
00116 static void AFFPopupMDP();
00117 
00118 static void init_all_themes(uint16_t hue);
00119 
00120 /*********************
00121  *  OBJET GENERAUX
00122  *********************/
00123 static lv_obj_t *mbox;
00124 
00125 /*****************************
00126  *  VARIABLES/OBJETS CONNEXION
00127  *****************************/
00128 static lv_obj_t * SelectID;
00129 static lv_obj_t * MDP;
00130 static void SelectID_ACT(lv_obj_t * obj, lv_event_t event);
00131 uint32_t TpsMdpEnCours=0;
00132 struct Personne
00133 {
00134     string Nom;
00135     string MDP; //mot de passe à 4 chiffres
00136     int Niveau; //0:aucun 1:Opérateur 2:superviseur 3:constructeur
00137     int Tps;    //Temps de connexion
00138 };
00139 Personne User[100];
00140 Personne UserEC;
00141 
00142 /*********
00143  * ETALON
00144  *********/
00145 struct HistoEtal{    
00146     int Annee;  
00147     int Mois;
00148     float ProvDeriv1;//Provision de dérive étalon
00149     bool Ajustage;//Ajustage réalisé
00150 };
00151 
00152 struct Etalon
00153 {
00154     string Nom;
00155     float ValPuls; //Valeur impulsion compteur
00156     float EMT;    //Ecart maximum toléré
00157     HistoEtal Hist[5];  //historique étalon  
00158 };
00159 Etalon EtalCpt[20];
00160 Etalon EtaTemp[20];
00161 Etalon EtalMano[20];
00162 
00163 Etalon EtalCptEC;
00164 Etalon EtaTempEC;
00165 Etalon EtalManoEC;
00166 
00167 /*****************************/
00168 
00169 static void BpValidMDP_ACT(lv_obj_t * btn, lv_event_t event);
00170 static void BpAnnulMDP_ACT(lv_obj_t * btn, lv_event_t event);
00171 static void mboxMdp_ACT(lv_obj_t * btn, lv_event_t event);
00172 static void mboxMdp_ACT2(lv_obj_t * btn, lv_event_t event);
00173 static void kb_MDP_ACT(lv_obj_t * event_kb, lv_event_t event);
00174 static void mbox_ACT(lv_obj_t * obj, lv_event_t event);
00175 
00176 /*********************
00177  *  OBJETS BP MENU
00178  *********************/
00179  
00180 static lv_obj_t * BPMENU;
00181 static lv_obj_t * M100;
00182 static lv_obj_t * M200;
00183 static lv_obj_t * M300;
00184 static lv_obj_t * M400;
00185 static lv_obj_t * M500;
00186 static lv_obj_t * M600;
00187 static lv_obj_t * M700;
00188 
00189 //FONCTIONS ASSOCIEES
00190 
00191 static void BPMENU_ACT(lv_obj_t * btn, lv_event_t event);
00192 static void M100_ACT(lv_obj_t * btn, lv_event_t event);
00193 static void M200_ACT(lv_obj_t * btn, lv_event_t event);
00194 static void M300_ACT(lv_obj_t * btn, lv_event_t event);
00195 static void M400_ACT(lv_obj_t * btn, lv_event_t event);
00196 static void M500_ACT(lv_obj_t * btn, lv_event_t event);
00197 static void M600_ACT(lv_obj_t * btn, lv_event_t event);
00198 static void M700_ACT(lv_obj_t * btn, lv_event_t event);
00199 
00200 static void SM_ACT(lv_obj_t * btn, lv_event_t event);
00201 
00202 int TpsAvFermMenu=5000;
00203 int TpsAvFermSousMenu=5000;
00204 int NumBandeauHaut;
00205 int NumSousMenu;
00206 bool DdeFermBandeauHaut;
00207 
00208 /*********************
00209  *  OBJETS 
00210  *********************/ 
00211 static lv_obj_t *FondGris ;
00212 static lv_obj_t *FondGris2 ;
00213 
00214 /*********************
00215  *  MATRICE DE BOUTONS 
00216  *********************/ 
00217 static const char * PAVE_MDP_MAP[] = {"7", "8", "9", LV_SYMBOL_CLOSE,"\n",
00218                                   "4", "5","6", LV_SYMBOL_OK, "\n",
00219                                   "1", "2", "3", LV_SYMBOL_BACKSPACE,"\n", 
00220                                   "0", ""};
00221   
00222 
00223 static const char * PAVE_NUMERIQUE_MAP[] = {
00224                                   "7", "8", "9","\n",
00225                                   "4", "5","6","\n",
00226                                   "1", "2", "3","\n", 
00227                                   "0",",","+/-","\n", 
00228                                   LV_SYMBOL_BACKSPACE,LV_SYMBOL_OK, LV_SYMBOL_CLOSE, ""};
00229                                   
00230                                   
00231        //                           "7", "8", "9","\n",
00232        //                           "4", "5","6", "\n",
00233        //                           "1", "2", "3","\n", 
00234        //                           "0", ".","+/-","\n",
00235        //                           LV_SYMBOL_BACKSPACE, LV_SYMBOL_OK,LV_SYMBOL_CLOSE};
00236 /*********************
00237  *  STYLES
00238  *********************/
00239 static lv_style_t P10,P12,P16,P18,P22,PG12,PG16,PG18,PG22;
00240 static lv_style_t P16Saisie;
00241 static lv_style_t Style_BP;
00242 
00243 static void StyleBPSM(lv_obj_t * Obj);
00244 static void StyleBPM(lv_obj_t * Obj);
00245 
00246 /*********************
00247  *  MULTILANGUE
00248  *********************/ 
00249 static void LANGUE_FR_ACT(lv_obj_t * btn, lv_event_t event);
00250 static void LANGUE_EN_ACT(lv_obj_t * btn, lv_event_t event);
00251 
00252 
00253 void initialisation();
00254 void interruptCompteur();
00255 
00256 static void BPRAZ_ACT(lv_obj_t * btn, lv_event_t event);
00257 static void BPPOMPE_ACT(lv_obj_t * btn, lv_event_t event);
00258 static lv_theme_t * th_act;
00259 static lv_obj_t * label;
00260 static lv_obj_t * label01;
00261 static lv_obj_t * label02;
00262 static lv_obj_t * label03;
00263 static lv_obj_t * label04;
00264 
00265 static lv_obj_t * AffCptPuls;
00266 static lv_obj_t * Aff1TpsEntre2Puls;
00267 static lv_obj_t * Aff2TpsEntre2Puls;
00268 static lv_obj_t * AffTpsMinEntre2Puls;
00269 static lv_obj_t * AffTpsMaxEntre2Puls;
00270 static lv_obj_t * BPRAZ;
00271 static lv_obj_t * BPPOMPE;
00272 
00273 
00274 static lv_obj_t * AffChemin;
00275 static lv_obj_t * AffSymbBat;
00276 static lv_obj_t * AffPourcBat;
00277 
00278 /************************
00279  *  TYPE DONNEES A SAISIR
00280  ************************/
00281 static lv_obj_t * kb;
00282 lv_obj_t *ChSaisi;
00283 
00284 typedef struct Float_S
00285 {
00286     float Val;
00287     const char * Unit;
00288     lv_obj_t * Aff;
00289     float Min;
00290     float Max;
00291     int Niveau; //0:aucun 1:Opérateur 2:superviseur 3:constructeur
00292     const char * Txt;
00293 };
00294 static Float_S *SaisieFloat;
00295 static void  DdeSaisieFloat(lv_obj_t * label, lv_event_t event);   
00296 static void PageSaisieFloat(lv_obj_t * label); 
00297 static void KbSaisieFloat_ACT(lv_obj_t * event_kb, lv_event_t event);
00298 
00299 typedef struct Int_S
00300 {
00301     int Val;
00302     const char * Unit;
00303     lv_obj_t * Aff;
00304     int Min;
00305     int Max;
00306     int Niveau; //0:aucun 1:Opérateur 2:superviseur 3:constructeur
00307     const char * Txt;
00308 };
00309 static Int_S *SaisieInt;
00310 static void DdeSaisieInt(lv_obj_t * label, lv_event_t event);   
00311 static void PageSaisieInt(lv_obj_t * label); 
00312 static void KbSaisieInt_ACT(lv_obj_t * event_kb, lv_event_t event);
00313 
00314 
00315 typedef struct Txt_S
00316 {
00317     char Val[];
00318     lv_obj_t * Aff;
00319     int Niveau; //0:aucun 1:Opérateur 2:superviseur 3:constructeur
00320     const char * Txt;
00321     int NbCarMax;    
00322 };
00323 static Txt_S *SaisieTxt;
00324 static void DdeSaisieTxt(lv_obj_t * label, lv_event_t event);   
00325 static void PageSaisieTxt(lv_obj_t * label); 
00326 static void KbSaisieTxt_ACT(lv_obj_t * event_kb, lv_event_t event);
00327 
00328 /**************************
00329  *  TYPE DONNEES A AFFICHER
00330  **************************/
00331 typedef struct Float_A
00332 {
00333     float Val;
00334     const char * Unit;
00335     lv_obj_t * Aff;
00336 };
00337 typedef struct Int_A
00338 {
00339     long int Val;
00340     const char * Unit;
00341     lv_obj_t * Aff;
00342 };
00343 typedef struct Txt_A
00344 {
00345     const char *  Val;
00346     lv_obj_t * Aff;
00347 };
00348 
00349 
00350 /*********************
00351  *  DONNEES A AFFICHER
00352  *********************/
00353 Float_S CsgDebit;
00354 Float_A Volume;
00355 Float_A Debit;
00356 Float_A DebitMoy;
00357 Txt_A ProgEC;
00358 Int_A Duree;
00359 Int_A TotalisateurVol;
00360 Int_A TotalisateurDuree;
00361 Int_S NPremiereMin;
00362 Int_S NDerniereMin;
00363 Float_A DebNPremiereMin;
00364 Float_A DebNDerniereMin;
00365 Float_A EcartType;
00366 Float_A TensionBat;
00367 Float_A Intensite;
00368 Float_A VitessePpe;
00369 Float_A ConsoPrelev;
00370 Float_A Puissance;
00371 Txt_S NomEquipement;
00372 Txt_S NumSerieEquipement;
00373 
00374 float MoyTensBat[101];
00375 float TpsCy=0;
00376 uint64_t CalcTpsCy=0;
00377 static lv_obj_t * AffTpsCy;
00378 
00379 void lv_ticker_func();
00380 void my_disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p);
00381 bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
00382 static void event_handler(lv_obj_t * obj, lv_event_t event);
00383 
00384 
00385 static void ddlist_event_cb(lv_obj_t * ddlist, lv_event_t event);
00386 static lv_obj_t * slider;
00387 
00388 int PosX_MenuDepart = 0;
00389 int PosX_MenuCible = 0;
00390 bool DdeAlignMenu = 0;
00391 
00392 int PosY_AnimSousMenu = 0;
00393 int AnimSousMenu=0;
00394 
00395 
00396 static void Reglage_R_RGB(lv_obj_t * obj, lv_event_t event);
00397 
00398 int TestAff = 0;
00399 
00400 
00401 static lv_obj_t  * Val_R;
00402 
00403 static lv_obj_t  * R;
00404 
00405 
00406 int Reglage_R;
00407 uint8_t Reglage_G;
00408 uint8_t Reglage_B;
00409 uint32_t Reglage_RGB;
00410 
00411 uint8_t R1=255,G1=255,B1=255,
00412         R2=0 ,G2=0 ,B2=0,
00413         R3=114 ,G3=179 ,B3=244,
00414         R4=255,G4=255,B4=240,
00415         R5=0,G5=145,B5=145,
00416         R6=0,G6=0,B6=0,
00417         R7=255,G7=255,B7=240,
00418         R8=114 ,G8=179 ,B8=244,
00419         R9=0,G9=145,B9=145,
00420         R10=155,G10=238,B10=131,
00421         R11=145,G11=145,B11=145,
00422         R12=51,G12=37,B12=22,
00423         R13=255,G13=255,B13=255,
00424         R14=153,G14=158,B14=117;
00425   
00426 int NumCouleur=0;
00427 
00428 
00429 static lv_theme_t * themes[8];
00430 
00431 
00432 int main()
00433 {      
00434      //demarrage communication avec PC
00435     serial.baud(9600);
00436     serial.printf("DEBUT DE PROGRAMME\r\n");
00437     //Entree impulsion
00438     DI_CPTPuls.mode(PullUp);
00439     
00440     //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"LittlevGL DEMO", CENTER_MODE);
00441     ticker.attach(&lv_ticker_func,0.005);// Appel de la fonction LittlVGL toutes les 5ms
00442     wait(0.5);
00443     lv_init();                                  //Initialize the LittlevGL
00444 
00445     static lv_disp_buf_t disp_buf;
00446     static lv_color_t buf[LV_HOR_RES_MAX * 10]; //Declare a buffer for 10 lines
00447     lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * 10); //Initialize the display buffer
00448 
00449     //Implement and register a function which can copy a pixel array to an area of your display
00450     lv_disp_drv_t disp_drv;               //Descriptor of a display driver
00451     lv_disp_drv_init(&disp_drv);          //Basic initialization
00452     disp_drv.flush_cb = my_disp_flush;    //Set your driver function
00453     disp_drv.buffer = &disp_buf;          //Assign the buffer to the display
00454     lv_disp_drv_register(&disp_drv);      //Finally register the driver
00455 
00456     //Implement and register a function which can read an input device. E.g. for a touch pad
00457     ts.Init(lcd.GetXSize(), lcd.GetYSize());   //ST touch initialization
00458     lv_indev_drv_t indev_drv;                  //Descriptor of a input device driver
00459     lv_indev_drv_init(&indev_drv);             //Basic initialization
00460     indev_drv.type = LV_INDEV_TYPE_POINTER;    //Touch pad is a pointer-like device
00461     indev_drv.read_cb = my_touchpad_read;      //Set your driver function
00462     lv_indev_drv_register(&indev_drv);         //Finally register the driver
00463 
00464     //INITIALISATION MULTILANGUE
00465     lv_i18n_init(lv_i18n_language_pack);
00466     lv_i18n_set_locale("fr");
00467 
00468     initialisation();
00469     AFFBandeauHaut(2);
00470     AFFPage(102);
00471   
00472     //demarrage tempo générale
00473     tempo.start();    
00474     //Interruption compteur 
00475    // DI_CPTPuls.rise(&interruptCompteur);
00476     
00477     while(1) {
00478           
00479         //TEMPO GENERALE
00480         Micros=tempo.read_high_resolution_us();           
00481        //TOP base de temps
00482         Top1ms=false;   if (Micros>=MemMicros0+1000) {      Top1ms=true;    MemMicros0=MemMicros0+1000;     } 
00483         Top10ms=false;  if (Micros>=MemMicros1+10000) {     Top10ms=true;   MemMicros1=MemMicros1+10000;    }  
00484         Top100ms=false; if (Micros>=MemMicros2+100000) {    Top100ms=true;  MemMicros2=MemMicros2+100000;   } 
00485         Top1s=false;    if (Micros>=MemMicros3+1000000) {   Top1s=true;     MemMicros3=MemMicros3+1000000;  }      
00486         Top5s=false;    if (Micros>=MemMicros4+5000000) {   Top5s=true;     MemMicros4=MemMicros4+5000000;  }   
00487         Top1min=false;  if (Micros>=MemMicros5+60000000) {  Top1min=true;   MemMicros5=MemMicros5+60000000; }     
00488                
00489         
00490         //temps fonctionnement pompe
00491          if (Top1s){
00492             if (DO_POMPE) {TpsMaPpe++;}  
00493         }  
00494         //ARRET POMPE SI TENSION BATTERIE <2,9V
00495          if (Top1min){
00496             if (TensionBat.Val<2.9) {
00497                     DO_POMPE=false;                    
00498                     //if (R!=NULL){ lv_slider_set_value(R,10000,LV_ANIM_ON);}
00499                     Reglage_R=10000;
00500             }  
00501             serial.printf("Temps fonctionnment pompe= %ds        Tension= %3.3fV \r\n",TpsMaPpe,TensionBat);   //ENREGISTREMENT DONNEES
00502         }         
00503         
00504         
00505         //CALCUL TEMPS DE CYCLE    
00506         CalcTpsCy++;
00507         if (Top1s){
00508             TpsCy=1000000000/CalcTpsCy;  
00509             TpsCy=TpsCy/1000;
00510             CalcTpsCy=0;   
00511             Duree.Val++;        
00512         }  
00513         //Raffraichissement affichage toutes les 10ms        
00514         if (Top10ms){
00515             lv_task_handler(); 
00516         }  
00517                   
00518        //MISE A JOUR DES VARIABLES AFFICHEES 
00519         if (Top1s or MemPageAff!=PageAff){  
00520             MemPageAff=PageAff; 
00521             //bandeau haut   
00522             if (NumBandeauHaut==1){
00523                 sprintf(text, Chemin); 
00524                 lv_label_set_text(AffChemin, text);   
00525             }  
00526             //Raffraichissement données affichées   
00527             AFFPage(0);         
00528         }      
00529         
00530         //DETECTION IMPULSION        
00531         if (DI_CPTPuls and Top1ms){     CalcFdPuls=0;CalcFmPuls++;}
00532         if (not DI_CPTPuls and Top1ms){ CalcFmPuls=0;CalcFdPuls++;}
00533         if (CalcFmPuls>20 and not FmCPTPuls){interruptCompteur();FmCPTPuls=true;}
00534         if (CalcFdPuls>20 and FmCPTPuls){FmCPTPuls=false;}
00535         if (CalcFmPuls>500){CalcFmPuls=500;}
00536         if (CalcFdPuls>500){CalcFdPuls=500;}
00537        
00538         //MESURE TENSION BATTERIE
00539         if (Top10ms){
00540             MoyTensBat[0]=AI_TENSION_BAT.read()*3.3*2+0.018;
00541             TensionBat.Val=0;
00542             for (int i=100;i>0;i--){
00543                 MoyTensBat[i]=MoyTensBat[i-1];
00544                 TensionBat.Val=TensionBat.Val+MoyTensBat[i];      
00545             }
00546             TensionBat.Val=TensionBat.Val/100;   
00547         }              
00548            
00549         //COMMANDE POMPE PWM
00550         if (Top100ms){
00551             CsgPompe=Reglage_R;
00552             fastpwm.period_ticks (10000); //setup the period for 100Khz 
00553             fastpwm.pulsewidth_ticks(CsgPompe);//setup duty cycle to 50%
00554         }
00555      
00556         //RAZ MOT DE PASSE
00557         if (TpsMdpEnCours>0 and Top1s){
00558             TpsMdpEnCours--;
00559             if (TpsMdpEnCours==0){
00560                 mbox=lv_mbox_create(lv_disp_get_scr_act(NULL), NULL);              
00561                 sprintf(text, "Fin de connexion pour %s",UserEC.Nom );
00562                 lv_mbox_set_text(mbox, text);
00563                 lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
00564                 lv_mbox_start_auto_close(mbox, 3000);
00565                 UserEC.Nom="";    
00566                 UserEC.Niveau=0;     
00567             }
00568         }
00569         
00570         //GESTION BANDEAU HAUT              
00571         if (Top1ms and TpsAvFermMenu>0){TpsAvFermMenu--;}
00572         if (Top1ms and SousMenu){TpsAvFermMenu=4000;}//maintien bandeau affiché si sous menu déployé
00573         if (TpsAvFermMenu>0 and X>0){TpsAvFermMenu=4000;} //mainitien bandeau affiché si appui sur écran
00574         if (TpsAvFermMenu>0 and PopupMDP){TpsAvFermMenu=4000;} //maintien bandeau affiché si Popup saisie MDP           
00575         if (TpsAvFermMenu==1){
00576             PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
00577             PosX_MenuCible = -lv_obj_get_x(M600);
00578             DdeAlignMenu=1;
00579             NumSousMenu=0;   
00580             DdeFermBandeauHaut=false;     
00581         }
00582         
00583         //ANIMATION BANDEAU HAUT
00584         if (Top1ms){
00585             if (DdeAlignMenu) {
00586                 if (PosX_MenuDepart>PosX_MenuCible) {
00587                     PosX_MenuDepart=PosX_MenuDepart-1;
00588                     lv_obj_set_pos(BandeauHaut, PosX_MenuDepart, 0);
00589                 }
00590                 if (PosX_MenuDepart<PosX_MenuCible) {
00591                     PosX_MenuDepart=PosX_MenuDepart+1;
00592                     lv_obj_set_pos(BandeauHaut, PosX_MenuDepart, 0);
00593                 }
00594                 if (PosX_MenuDepart==PosX_MenuCible) {
00595                     DdeAlignMenu=0;
00596                     if (NumSousMenu>0){AFFSousMenu(NumSousMenu);}//affichage page sous menu
00597                     if (NumSousMenu==0){AFFBandeauHaut(1);}//Bandeau haut sans menu
00598                 }
00599             }  
00600         }
00601         
00602         //ANIMATION SOUS MENU
00603         if (Top1ms){            
00604             //OUVERTURE SOUS MENU
00605             if (AnimSousMenu>0) {                
00606                 PosY_AnimSousMenu=PosY_AnimSousMenu+2;
00607                 lv_obj_set_size(SousMenu, 230, PosY_AnimSousMenu);
00608                 if (PosY_AnimSousMenu>=AnimSousMenu){AnimSousMenu=0;}  
00609                 TpsAvFermSousMenu=5000;    
00610             }   
00611             //TEMPS AVANT FERMEURE
00612             if (SousMenu and TpsAvFermSousMenu>0){TpsAvFermSousMenu--;}
00613             //FERMETURE SOUS MENU
00614             if (SousMenu and TpsAvFermSousMenu<=0) {                
00615                 PosY_AnimSousMenu=PosY_AnimSousMenu-2;
00616                 lv_obj_set_size(SousMenu, 230, PosY_AnimSousMenu);
00617                 if (PosY_AnimSousMenu<=0){
00618                     lv_obj_del_async(SousMenu); 
00619                     SousMenu=NULL;
00620                     if(DdeFermBandeauHaut){TpsAvFermMenu=10;DdeFermBandeauHaut=false;}
00621                 }           
00622             }  
00623         }
00624         if (SousMenu and X>0){TpsAvFermSousMenu=5000;}//mainitien sous menu affiché si appui sur écran        
00625         if (SousMenu and PopupMDP){TpsAvFermSousMenu=5000;} //maintien bandeau affiché si Popup saisie MDP  
00626             
00627   /**/      
00628     }//FIN BOUCLE
00629 }//FIN MAIN
00630 
00631 
00632 
00633 static void AffFloat(string Txt,Float_A &Var,int PosX, int PosY){
00634     label01 = lv_label_create(Page, NULL);       
00635     lv_obj_set_style(label01,&PG16);
00636     lv_obj_set_pos(label01,  PosX, PosY);   
00637     lv_label_set_text_fmt(label01, "%s",Txt);  
00638         
00639     Var.Aff = lv_label_create(Page, NULL);       
00640     lv_obj_set_style(Var.Aff,&P16);
00641     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00642     lv_label_set_text_fmt(Var.Aff, "%2.2f %s",Var.Val,Var.Unit);
00643 }
00644 
00645 static void AffInt(string Txt,Int_A &Var,int PosX, int PosY){
00646     label01 = lv_label_create(Page, NULL);       
00647     lv_obj_set_style(label01,&PG16);
00648     lv_obj_set_pos(label01,  PosX, PosY);   
00649     lv_label_set_text_fmt(label01, "%s",Txt);  
00650         
00651     Var.Aff = lv_label_create(Page, NULL);       
00652     lv_obj_set_style(Var.Aff,&P16);
00653     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00654     lv_label_set_text_fmt(Var.Aff, "%d %s",Var.Val,Var.Unit);
00655 }
00656 
00657 static void AffTxt(string Txt,Txt_A &Var,int PosX, int PosY){
00658     label01 = lv_label_create(Page, NULL);       
00659     lv_obj_set_style(label01,&PG16);
00660     lv_obj_set_pos(label01,  PosX, PosY); 
00661     lv_label_set_text_fmt(label01, "%s",Txt);  
00662        
00663     Var.Aff = lv_label_create(Page, NULL);       
00664     lv_obj_set_style(Var.Aff,&P16);
00665     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00666     lv_obj_set_click(Var.Aff, true);  
00667 }
00668 
00669 static void InFloat(string Txt,Float_S &Var,int PosX, int PosY){
00670     label01 = lv_label_create(Page, NULL);       
00671     lv_obj_set_style(label01,&PG16);
00672     lv_obj_set_pos(label01,  PosX, PosY); 
00673     lv_label_set_text_fmt(label01, "%s",Txt);  
00674         
00675     Var.Aff = lv_label_create(Page, NULL);       
00676     lv_obj_set_style(Var.Aff,&P16Saisie);
00677     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00678     lv_label_set_text_fmt(Var.Aff, "%2.2f %s",Var.Val,Var.Unit);
00679     
00680     lv_obj_set_click(Var.Aff, true);    
00681     lv_obj_set_user_data(Var.Aff, &Var);
00682     lv_obj_set_event_cb(Var.Aff, DdeSaisieFloat);
00683 }
00684 
00685 static void InInt(string Txt,Int_S &Var,int PosX, int PosY){
00686     label01 = lv_label_create(Page, NULL);       
00687     lv_obj_set_style(label01,&PG16);
00688     lv_obj_set_pos(label01,  PosX, PosY); 
00689     lv_label_set_text_fmt(label01, "%s",Txt);  
00690         
00691     Var.Aff = lv_label_create(Page, NULL);       
00692     lv_obj_set_style(Var.Aff,&P16Saisie);
00693     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00694     lv_label_set_text_fmt(Var.Aff, "%d %s",Var.Val,Var.Unit);
00695  
00696     lv_obj_set_click(Var.Aff, true);     
00697     lv_obj_set_user_data(Var.Aff, &Var);
00698     lv_obj_set_event_cb(Var.Aff, DdeSaisieInt);
00699 }
00700 
00701 static void InTxt(string Txt,Txt_S &Var,int PosX, int PosY){
00702     label01 = lv_label_create(Page, NULL);       
00703     lv_obj_set_style(label01,&PG16);
00704     lv_obj_set_pos(label01,  PosX, PosY);  
00705     lv_label_set_text_fmt(label01, "%s",Txt);  
00706        
00707     Var.Aff = lv_label_create(Page, NULL);       
00708     lv_obj_set_style(Var.Aff,&P16Saisie);
00709     lv_obj_align(Var.Aff, label01, LV_ALIGN_OUT_RIGHT_MID, 5, 0); 
00710     
00711     lv_obj_set_click(Var.Aff, true);  
00712     lv_obj_set_user_data(Var.Aff, &Var);
00713     lv_obj_set_event_cb(Var.Aff, DdeSaisieTxt); 
00714 }
00715 
00716 static void AFFPage(int Num)
00717 {
00718     //VARIABLES COMMUNES         
00719     int i=0;//index pour décalage ligne
00720     
00721     //CREATION PAGE
00722     if (Num>0){
00723         if(Page) {
00724             lv_obj_del(Page); ;
00725             Page = NULL;
00726         } 
00727         PageAff=Num;//MEMORISATION PAGE AFFICHEE       
00728         Page = lv_page_create(lv_scr_act(), NULL);
00729         lv_obj_set_size(Page, hres, vres-40);
00730         lv_obj_set_pos(Page,  0, 40);   
00731         lv_page_set_scrl_layout(Page, LV_LAYOUT_OFF);
00732         lv_page_set_scrl_fit2(Page, LV_FIT_FLOOD, LV_FIT_TIGHT);
00733         lv_coord_t max_w = lv_page_get_fit_width(Page);   
00734     }
00735      
00736       ////////////////////////////////////////    
00737      //CREATION PAGE 101: Etat d'avancement//
00738     ////////////////////////////////////////
00739     if (Num==101){   
00740         sprintf(Chemin, "%s \\ %s",_("M100"),_("M101")); 
00741         AffTxt(_("Etat de la mallette :"),ProgEC,5, i=i);        
00742         InFloat(_("Consigne débit :"),CsgDebit,5, i=i+20);          
00743         AffFloat(_("Débit intantanné :"),Debit,5, i=i+20);          
00744         AffFloat(_("Débit Moyen prélèvement :"),DebitMoy,5, i=i+20);     
00745         AffFloat(_("Volume prélevé :"),Volume,5, i=i+20);           
00746         AffInt(_("Durée prélèvement :"),Duree,5, i=i+20);            
00747         sprintf(text, _("Débit moyen des %d premières minutes :"),NPremiereMin.Val);       
00748         AffFloat(text,DebNPremiereMin,5, i=i+20);             
00749         sprintf(text, _("Débit moyen des %d dernières minutes :"),NDerniereMin.Val);       
00750         AffFloat(text,DebNDerniereMin,5, i=i+20);       
00751         AffFloat(_("Ecart type:"),EcartType,5, i=i+20);                
00752         AffInt(_("Totalisateur volume:"),TotalisateurVol,5, i=i+20); 
00753         AffInt(_("Totalisateur durée:"),TotalisateurDuree,5, i=i+20);  
00754         AffFloat(_("Tension :"),TensionBat,5, i=i+20);   
00755         AffFloat(_("Intensité :"),Intensite,5, i=i+20);   
00756         AffFloat(_("Vitesse pompe :"),VitessePpe,5, i=i+20);   
00757         AffFloat(_("Consommation prélèvement :"),ConsoPrelev,5, i=i+20);   
00758         AffFloat(_("Puissance :"),Puissance,5, i=i+20);                
00759         PageAff=101;                       
00760     }
00761     
00762     //RAFFRAICHISSEMENT DONNEES
00763     if (PageAff==101 and Num==0){     
00764         //PROGRAMME EN COURS  
00765         lv_label_set_text_fmt(ProgEC.Aff, "%s",ProgEC.Val);        
00766         //CONSIGNE DEBIT    
00767         lv_label_set_text_fmt(CsgDebit.Aff, "%2.2f %s",CsgDebit.Val,CsgDebit.Unit);               
00768         //DEBIT INSTANTANNE
00769         lv_label_set_text_fmt(Debit.Aff, "%2.2f %s",Debit.Val,Debit.Unit);        
00770         //DEBIT MOYEN
00771         lv_label_set_text_fmt(DebitMoy.Aff, "%2.2f %s",DebitMoy.Val,DebitMoy.Unit);        
00772         //VOLUME PRELEVE 
00773         lv_label_set_text_fmt(Volume.Aff, "%2.1f %s",Volume.Val,Volume.Unit); 
00774         //DUREE PRELEVEMENT  
00775         lv_label_set_text_fmt(Duree.Aff, "%s",HHMMSS(Duree.Val));         
00776         //DEBIT MOYEN DES N PREMIERES MINUTES
00777         lv_label_set_text_fmt(DebNPremiereMin.Aff, "%2.2f %s",DebNPremiereMin.Val,DebNPremiereMin.Unit);         
00778         //DEBIT MOYEN DES N DERNIERES MINUTES
00779         lv_label_set_text_fmt(DebNDerniereMin.Aff, "%2.2f %s",DebNDerniereMin.Val,DebNDerniereMin.Unit);         
00780         //ECART TYPE
00781         lv_label_set_text_fmt(EcartType.Aff, "%2.2f %s",EcartType.Val,EcartType.Unit);          
00782         //TOTALISATEUR VOLUME
00783         lv_label_set_text_fmt(TotalisateurVol.Aff, "%8.1f %s",TotalisateurVol.Val,TotalisateurVol.Unit);                       
00784         //TOTALISATEUR DUREE
00785         lv_label_set_text_fmt(TotalisateurDuree.Aff, "%2.2f %s",TotalisateurDuree.Val,TotalisateurDuree.Unit);       
00786         //TENSION
00787         lv_label_set_text_fmt(TensionBat.Aff, "%2.3f %s",TensionBat.Val,TensionBat.Unit);                
00788         //INTENSITE
00789         lv_label_set_text_fmt(Intensite.Aff, "%2.3f %s",Intensite.Val,Intensite.Unit);   
00790         //VITESSE POMPE
00791         lv_label_set_text_fmt(VitessePpe.Aff, "%4.0f %s",VitessePpe.Val,VitessePpe.Unit);         
00792         //CONSOMMATION PRELEVEMENT
00793         lv_label_set_text_fmt(ConsoPrelev.Aff, "%4.0f %s",ConsoPrelev.Val,ConsoPrelev.Unit);         
00794        //PUISSANCE
00795         lv_label_set_text_fmt(Puissance.Aff, "%4.0f %s",Puissance.Val,Puissance.Unit); 
00796     }
00797 
00798       ////////////////////////////////////////////    
00799      //CREATION PAGE 102: Information générales//
00800     ////////////////////////////////////////////
00801     if (Num==102){  
00802         sprintf(Chemin, "%s \\ %s",_("M100"),_("M102"));         
00803         InTxt(_("Nom équipement :"),NomEquipement,5, i=i);        
00804         InTxt(_("N°série constructeur :"),NumSerieEquipement,5, i=i+20);      
00805     }
00806     //RAFFRAICHISSEMENT DONNEES
00807     if (PageAff==102 and Num==0){   
00808         lv_label_set_text_fmt(NomEquipement.Aff, "%s",NomEquipement.Val);  
00809         lv_label_set_text_fmt(NumSerieEquipement.Aff, "%s",NumSerieEquipement.Val);       
00810     }
00811 
00812       ////////////////////////////////////////////    
00813      //CREATION PAGE 103: Information générales//
00814     ////////////////////////////////////////////
00815     if (Num==103){  
00816         // CHEMIN PAGE   
00817         sprintf(Chemin, "%s \\ %s",_("M100"),_("M103")); 
00818               
00819        
00820         PageAff=103;               
00821         
00822     }
00823     //RAFFRAICHISSEMENT DONNEES
00824     if (PageAff==103 and Num==0){       
00825              
00826   
00827     }
00828     
00829       ////////////////////////////////////////    
00830      //CREATION PAGE 201: Test d'étanchéité//
00831     ////////////////////////////////////////
00832     if (Num==201){  
00833         // CHEMIN PAGE   
00834         sprintf(Chemin, "%s \\ %s",_("M200"),_("M201")); 
00835              //affichage données
00836   /*      AffTensionBat = lv_label_create(Page, NULL);  
00837         lv_obj_set_pos(AffTensionBat,  50, i);    
00838         
00839         AffTpsCy = lv_label_create(Page, NULL);   
00840         i=i+16;lv_obj_set_pos(AffTpsCy,  50, i);
00841         
00842         AffCptPuls = lv_label_create(Page, NULL);   
00843         i=i+16;lv_obj_set_pos(AffCptPuls,  50, i);
00844         
00845         Aff1TpsEntre2Puls = lv_label_create(Page, NULL);   
00846         i=i+16;lv_obj_set_pos(Aff1TpsEntre2Puls,  50, i);
00847         
00848         Aff2TpsEntre2Puls = lv_label_create(Page, NULL);   
00849         i=i+16;lv_obj_set_pos(Aff2TpsEntre2Puls,  50, i);
00850         
00851         AffTpsMinEntre2Puls = lv_label_create(Page, NULL);   
00852         i=i+16;lv_obj_set_pos(AffTpsMinEntre2Puls,  50, i);
00853         
00854         AffTpsMaxEntre2Puls = lv_label_create(Page, NULL);   
00855         i=i+16;lv_obj_set_pos(AffTpsMaxEntre2Puls,  50, i);
00856         
00857         //BP RAZ
00858         BPRAZ = lv_btn_create(Page, NULL);
00859         i=i+30;lv_obj_set_pos(BPRAZ,  50, i);
00860         label = lv_label_create(BPRAZ, NULL);
00861         lv_label_set_text(label, "RAZ");
00862         lv_obj_set_size(BPRAZ,60,40);
00863         lv_obj_set_event_cb(BPRAZ, BPRAZ_ACT);
00864         
00865         //BP POMPE
00866         BPPOMPE = lv_btn_create(Page, NULL);
00867         lv_obj_set_pos(BPPOMPE,  150, i);
00868         label = lv_label_create(BPPOMPE, NULL);
00869         lv_label_set_text(label, "POMPE");
00870         lv_obj_set_size(BPPOMPE,90,40);
00871         lv_btn_set_toggle(BPPOMPE, true);
00872         lv_obj_set_event_cb(BPPOMPE, BPPOMPE_ACT);
00873         
00874          // SLIDER
00875         static lv_style_t style_bg,style_knob;
00876         static lv_style_t style_indic_R;    
00877     
00878         lv_style_copy(&style_bg, &lv_style_pretty);
00879         style_bg.body.main_color =  LV_COLOR_BLACK;
00880         style_bg.body.grad_color =  LV_COLOR_BLACK;
00881         style_bg.body.radius = LV_RADIUS_CIRCLE;
00882         style_bg.body.border.color = LV_COLOR_SILVER;
00883     
00884         lv_style_copy(&style_indic_R, &lv_style_pretty_color);
00885         style_indic_R.body.main_color =  LV_COLOR_RED;
00886         style_indic_R.body.grad_color =  LV_COLOR_RED;
00887         style_indic_R.body.radius = LV_RADIUS_CIRCLE;
00888         style_indic_R.body.shadow.width = 4;
00889         style_indic_R.body.shadow.color = LV_COLOR_RED;
00890         style_indic_R.body.padding.left = 3;
00891         style_indic_R.body.padding.right = 3;
00892         style_indic_R.body.padding.top = 3;
00893         style_indic_R.body.padding.bottom = 3;
00894     
00895         lv_style_copy(&style_knob, &lv_style_pretty);
00896         style_knob.body.radius = LV_RADIUS_CIRCLE;
00897         style_knob.body.opa = LV_OPA_70;
00898         style_knob.body.padding.top = 10 ;
00899         style_knob.body.padding.bottom = 10 ;
00900     
00901         //Create a slider ROUGE
00902         R = lv_slider_create(Page, NULL);
00903         lv_obj_set_pos(R,  10, 40);
00904         lv_obj_set_width(R, 30);
00905         lv_obj_set_height(R, 180);
00906         lv_slider_set_range(R, 0, 10000);
00907         lv_slider_set_value(R, Reglage_R, false);
00908         style_indic_R.body.main_color =  LV_COLOR_RED;
00909         style_indic_R.body.grad_color =  LV_COLOR_RED;
00910         style_indic_R.body.shadow.color = LV_COLOR_RED;
00911         lv_slider_set_style(R, LV_SLIDER_STYLE_BG, &style_bg);
00912         lv_slider_set_style(R, LV_SLIDER_STYLE_INDIC,&style_indic_R);
00913         lv_slider_set_style(R, LV_SLIDER_STYLE_KNOB, &style_knob);
00914         lv_obj_set_event_cb(R, Reglage_R_RGB);
00915         Val_R = lv_label_create(Page, NULL);
00916         lv_obj_align(Val_R, R, LV_ALIGN_OUT_TOP_MID, 0, -5);
00917         sprintf(text, " %d ", lv_slider_get_value(R));
00918         lv_label_set_text(Val_R, text);
00919     */    
00920        
00921         PageAff=201;               
00922         
00923     }
00924     //RAFFRAICHISSEMENT DONNEES
00925     if (PageAff==201 and Num==0){       
00926                
00927   //      sprintf(text, _("Temps de cycle = %3.3f us"),TpsCy);       lv_label_set_text(AffTpsCy, text);         
00928    //     sprintf(text, _("Tension= %3.3f V "),TensionBat );         lv_label_set_text(AffTensionBat, text);
00929    //     sprintf(text, "Temps fonctionnment pompe= %d s",TpsMaPpe );      lv_label_set_text(AffCptPuls, text);
00930    //     sprintf(text, "Nombre d'impulsion= %d ",CptPuls );      lv_label_set_text(AffCptPuls, text);
00931    //     sprintf(text, "Volume = %3.3f L",Volume );              lv_label_set_text(AffVolume, text);           
00932    //     sprintf(text, "Debit= %3.3f L/min ",Debit );            lv_label_set_text(AffDebit, text);   
00933    //     sprintf(text, "%3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f ",TpsEntre2Puls[1],TpsEntre2Puls[2],TpsEntre2Puls[3],TpsEntre2Puls[4],TpsEntre2Puls[5],TpsEntre2Puls[6],TpsEntre2Puls[7],TpsEntre2Puls[8]); lv_label_set_text(Aff1TpsEntre2Puls, text);
00934     //    sprintf(text, "%3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f / %3.0f ",TpsEntre2Puls[9],TpsEntre2Puls[10],TpsEntre2Puls[11],TpsEntre2Puls[12],TpsEntre2Puls[13],TpsEntre2Puls[14],TpsEntre2Puls[15],TpsEntre2Puls[16]); lv_label_set_text(Aff2TpsEntre2Puls, text);
00935     //    sprintf(text, "Temps mini entre 2 impulsions = %d ",NumSousMenu ); lv_label_set_text(AffTpsMinEntre2Puls, text);   
00936     //    sprintf(text, "Temps maxi entre 2 impulsions = %d",test ); lv_label_set_text(AffTpsMaxEntre2Puls, text);     
00937   
00938     }
00939     
00940       //////////////////////////////////////    
00941      //CREATION PAGE 202: Séquence unique//
00942     //////////////////////////////////////
00943     if (Num==202){  
00944         // CHEMIN PAGE   
00945         sprintf(Chemin, "%s \\ %s",_("M200"),_("M202")); 
00946               
00947        
00948         PageAff=202;               
00949         
00950     }
00951     //RAFFRAICHISSEMENT DONNEES
00952     if (PageAff==202 and Num==0){       
00953              
00954   
00955     }
00956       ////////////////////////////////////////    
00957      //CREATION PAGE 203: //
00958     ////////////////////////////////////////
00959     if (Num==203){  
00960         // CHEMIN PAGE   
00961         sprintf(Chemin, "%s \\ %s",_("M200"),_("M203")); 
00962               
00963        
00964         PageAff=203;               
00965         
00966     }
00967     //RAFFRAICHISSEMENT DONNEES
00968     if (PageAff==203 and Num==0){       
00969              
00970   
00971     }
00972     
00973       //////////////////////////////////////    
00974      //CREATION PAGE 204: //
00975     //////////////////////////////////////
00976     if (Num==204){  
00977         // CHEMIN PAGE   
00978         sprintf(Chemin, "%s \\ %s",_("M200"),_("M204")); 
00979               
00980        
00981         PageAff=204;               
00982         
00983     }
00984     //RAFFRAICHISSEMENT DONNEES
00985     if (PageAff==204 and Num==0){       
00986              
00987   
00988     }
00989       
00990       ////////////////////////////////////////    
00991      //CREATION PAGE 301: //
00992     ////////////////////////////////////////
00993     if (Num==301){  
00994         // CHEMIN PAGE   
00995         sprintf(Chemin, "%s \\ %s",_("M300"),_("M301")); 
00996               
00997        
00998         PageAff=301;               
00999         
01000     }
01001     //RAFFRAICHISSEMENT DONNEES
01002     if (PageAff==301 and Num==0){       
01003              
01004   
01005     }
01006     
01007       //////////////////////////////////////    
01008      //CREATION PAGE 302: //
01009     //////////////////////////////////////
01010     if (Num==302){  
01011         // CHEMIN PAGE   
01012         sprintf(Chemin, "%s \\ %s",_("M300"),_("M302")); 
01013               
01014        
01015         PageAff=302;               
01016         
01017     }
01018     //RAFFRAICHISSEMENT DONNEES
01019     if (PageAff==302 and Num==0){       
01020              
01021   
01022     }
01023       ////////////////////////////////////////    
01024      //CREATION PAGE 303: //
01025     ////////////////////////////////////////
01026     if (Num==303){  
01027         // CHEMIN PAGE   
01028         sprintf(Chemin, "%s \\ %s",_("M300"),_("M303")); 
01029               
01030        
01031         PageAff=303;               
01032         
01033     }
01034     //RAFFRAICHISSEMENT DONNEES
01035     if (PageAff==303 and Num==0){       
01036              
01037   
01038     }
01039     
01040       //////////////////////////////////////    
01041      //CREATION PAGE 304: //
01042     //////////////////////////////////////
01043     if (Num==304){  
01044         // CHEMIN PAGE   
01045         sprintf(Chemin, "%s \\ %s",_("M300"),_("M304")); 
01046               
01047        
01048         PageAff=304;               
01049         
01050     }
01051     //RAFFRAICHISSEMENT DONNEES
01052     if (PageAff==304 and Num==0){       
01053              
01054   
01055     }
01056       //////////////////////////////////////    
01057      //CREATION PAGE 305: //
01058     //////////////////////////////////////
01059     if (Num==305){  
01060         // CHEMIN PAGE   
01061         sprintf(Chemin, "%s \\ %s",_("M300"),_("M305")); 
01062               
01063        
01064         PageAff=305;               
01065         
01066     }
01067     //RAFFRAICHISSEMENT DONNEES
01068     if (PageAff==305 and Num==0){       
01069              
01070   
01071     }
01072       //////////////////////////////////////    
01073      //CREATION PAGE 306: //
01074     //////////////////////////////////////
01075     if (Num==306){  
01076         // CHEMIN PAGE   
01077         sprintf(Chemin, "%s \\ %s",_("M300"),_("M306")); 
01078               
01079        
01080         PageAff=306;               
01081         
01082     }
01083     //RAFFRAICHISSEMENT DONNEES
01084     if (PageAff==306 and Num==0){       
01085              
01086   
01087     }
01088       ////////////////////////////////////////    
01089      //CREATION PAGE 401: Test d'étanchéité//
01090     ////////////////////////////////////////
01091     if (Num==401){  
01092         // CHEMIN PAGE   
01093         sprintf(Chemin, "%s \\ %s",_("M400"),_("M401")); 
01094               
01095        
01096         PageAff=401;               
01097         
01098     }
01099     //RAFFRAICHISSEMENT DONNEES
01100     if (PageAff==401 and Num==0){       
01101              
01102   
01103     }
01104     
01105       //////////////////////////////////////    
01106      //CREATION PAGE 402: Séquence unique//
01107     //////////////////////////////////////
01108     if (Num==402){  
01109         // CHEMIN PAGE   
01110         sprintf(Chemin, "%s \\ %s",_("M400"),_("M402")); 
01111               
01112        
01113         PageAff=402;               
01114         
01115     }
01116     //RAFFRAICHISSEMENT DONNEES
01117     if (PageAff==402 and Num==0){       
01118              
01119   
01120     }
01121       ////////////////////////////////////////    
01122      //CREATION PAGE 403: //
01123     ////////////////////////////////////////
01124     if (Num==403){  
01125         // CHEMIN PAGE   
01126         sprintf(Chemin, "%s \\ %s",_("M400"),_("M403")); 
01127               
01128        
01129         PageAff=403;               
01130         
01131     }
01132     //RAFFRAICHISSEMENT DONNEES
01133     if (PageAff==403 and Num==0){       
01134              
01135   
01136     }
01137     
01138       //////////////////////////////////////    
01139      //CREATION PAGE 404: //
01140     //////////////////////////////////////
01141     if (Num==404){  
01142         // CHEMIN PAGE   
01143         sprintf(Chemin, "%s \\ %s",_("M400"),_("M404")); 
01144            
01145               
01146         //CREATION LISTE ETALON POUR AFFICHAGE
01147         int i; 
01148         int j; 
01149         int k=0; 
01150         char p[2200];    
01151         for (i = 1; i < 2200; i++) { p[i]=='\0';}    
01152         
01153         for (i = 1; i < 20; i++) { 
01154             string s=EtalCpt[i].Nom; 
01155             if (s.length()>0){
01156                 for (j = 0; j < s.length(); j++) { 
01157                     p[k] = s[j];
01158                     k++;
01159                 } 
01160                 p[k]='\n';
01161                 k++;
01162             }
01163         }    
01164         p[k+1]='\0'; 
01165         char * ListeEtal= p  ;
01166     
01167         //TITRE TEST
01168         lv_obj_t * test = lv_label_create(Page, NULL);        
01169         lv_label_set_text(test, _("test"));
01170         lv_obj_align(test, Page, LV_ALIGN_OUT_TOP_MID, 0, 0);
01171         
01172         //SELECTEUR COMPTEUR ETALON    
01173         lv_obj_t * SelectEtal = lv_roller_create(Page, NULL);
01174         lv_roller_set_options(SelectEtal,ListeEtal,LV_ROLLER_MODE_NORMAL);
01175         lv_roller_set_visible_row_count(SelectEtal, 4);  
01176         lv_roller_set_fix_width(SelectEtal, 130);
01177         lv_obj_align(SelectEtal, Page, LV_ALIGN_IN_TOP_LEFT, 10, 20); 
01178         
01179         //TITRE COMPTEUR ETALON
01180         lv_obj_t * Titre = lv_label_create(Page, NULL);        
01181         lv_label_set_text(Titre, _("COMPTEUR"));
01182         lv_obj_align(Titre, SelectEtal, LV_ALIGN_OUT_TOP_MID, 0, 0);   
01183          
01184         //BP MODIFIER
01185         lv_obj_t * BPModifCompt = lv_btn_create(Page, NULL);         
01186    //     StyleBPSM(BPModifCompt);  
01187         lv_obj_set_size(BPModifCompt,130,30);       
01188         lv_obj_align(BPModifCompt, SelectEtal, LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
01189         label = lv_label_create(BPModifCompt, NULL);
01190         lv_label_set_text(label, _("Modifier"));
01191       //  lv_obj_set_event_cb(BPModifCompt, BPModifCompt_ACT);  
01192         
01193         //BP AJOUTER
01194         lv_obj_t * BPAjoutCompt = lv_btn_create(Page, NULL);        
01195      //   StyleBPSM(BPAjoutCompt);   
01196         lv_obj_set_size(BPAjoutCompt,130,30);      
01197         lv_obj_align(BPAjoutCompt, BPModifCompt, LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
01198         label = lv_label_create(BPAjoutCompt, NULL);
01199         lv_label_set_text(label, _("Ajouter"));
01200       //  lv_obj_set_event_cb(BPAjoutCompt, BPAjoutCompt_ACT);  
01201         
01202         //BP SUPPRIMER
01203         lv_obj_t * BPSupprCompt = lv_btn_create(Page, NULL);        
01204       //  StyleBPSM(BPModifCompt);    
01205         lv_obj_set_size(BPSupprCompt,130,30);     
01206         lv_obj_align(BPSupprCompt, BPAjoutCompt, LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
01207         label = lv_label_create(BPSupprCompt, NULL);
01208         lv_label_set_text(label, _("Supprimer"));
01209       //  lv_obj_set_event_cb(BPSupprCompt, BPSupprCompt_ACT);  
01210    
01211         PageAff=404;               
01212         
01213     }
01214     //RAFFRAICHISSEMENT DONNEES
01215     if (PageAff==404 and Num==0){       
01216              
01217   
01218     }
01219       //////////////////////////////////////    
01220      //CREATION PAGE 405: //
01221     //////////////////////////////////////
01222     if (Num==405){  
01223         // CHEMIN PAGE   
01224         sprintf(Chemin, "%s \\ %s",_("M400"),_("M405")); 
01225               
01226        
01227         PageAff=405;               
01228         
01229     }
01230     //RAFFRAICHISSEMENT DONNEES
01231     if (PageAff==405 and Num==0){       
01232              
01233   
01234     }
01235       //////////////////////////////////////    
01236      //CREATION PAGE 406: //
01237     //////////////////////////////////////
01238     if (Num==406){  
01239         // CHEMIN PAGE   
01240         sprintf(Chemin, "%s \\ %s",_("M400"),_("M406")); 
01241               
01242        
01243         PageAff=406;               
01244         
01245     }
01246     //RAFFRAICHISSEMENT DONNEES
01247     if (PageAff==406 and Num==0){       
01248              
01249   
01250     }
01251     
01252       ///////////////////////////////////////    
01253      //CREATION PAGE 501: Sélection langue//
01254     ///////////////////////////////////////
01255     if (Num==501){  
01256         // CHEMIN PAGE   
01257         sprintf(Chemin, "%s \\ %s",_("M500"),_("M501")); 
01258          
01259         //BP SELECTION LANGUE: FRANCAIS        
01260         lv_obj_t * LANGUE_FR = lv_btn_create(Page, NULL);        
01261         lv_obj_align(LANGUE_FR, Page, LV_ALIGN_IN_TOP_MID, -80, 50);
01262         label = lv_label_create(LANGUE_FR, NULL);
01263         lv_label_set_text(label, _("Francais"));
01264         lv_obj_set_size(LANGUE_FR,100,40);
01265         lv_obj_set_event_cb(LANGUE_FR, LANGUE_FR_ACT);
01266         
01267         //BP SELECTION LANGUE: ANGLAIS
01268         lv_obj_t * LANGUE_EN = lv_btn_create(Page, NULL);        
01269         lv_obj_align(LANGUE_EN, Page, LV_ALIGN_IN_TOP_MID, 80, 50);
01270         label = lv_label_create(LANGUE_EN, NULL);
01271         lv_label_set_text(label, _("English"));
01272         lv_obj_set_size(LANGUE_EN,100,40);
01273         lv_obj_set_event_cb(LANGUE_EN, LANGUE_EN_ACT);  
01274         
01275         PageAff=501;       
01276     }
01277     //RAFFRAICHISSEMENT DONNEES
01278     if (PageAff==501 and Num==0){       
01279         
01280     }
01281           
01282       //////////////////////////////////////    
01283      //CREATION PAGE 502: Séquence unique//
01284     //////////////////////////////////////
01285     if (Num==502){  
01286         // CHEMIN PAGE   
01287         sprintf(Chemin, "%s \\ %s",_("M500"),_("M502")); 
01288               
01289        
01290         PageAff=502;               
01291         
01292     }
01293     //RAFFRAICHISSEMENT DONNEES
01294     if (PageAff==502 and Num==0){       
01295              
01296   
01297     }
01298       ////////////////////////////////////////    
01299      //CREATION PAGE 503: //
01300     ////////////////////////////////////////
01301     if (Num==503){  
01302         // CHEMIN PAGE   
01303         sprintf(Chemin, "%s \\ %s",_("M500"),_("M503")); 
01304               
01305        
01306         PageAff=503;               
01307         
01308     }
01309     //RAFFRAICHISSEMENT DONNEES
01310     if (PageAff==503 and Num==0){       
01311              
01312   
01313     }
01314     
01315       //////////////////////////////////////    
01316      //CREATION PAGE 504: //
01317     //////////////////////////////////////
01318     if (Num==504){  
01319         // CHEMIN PAGE   
01320         sprintf(Chemin, "%s \\ %s",_("M500"),_("M504")); 
01321               
01322        
01323         PageAff=504;               
01324         
01325     }
01326     //RAFFRAICHISSEMENT DONNEES
01327     if (PageAff==504 and Num==0){       
01328              
01329   
01330     }
01331       //////////////////////////////////////    
01332      //CREATION PAGE 505: //
01333     //////////////////////////////////////
01334     if (Num==505){  
01335         // CHEMIN PAGE   
01336         sprintf(Chemin, "%s \\ %s",_("M500"),_("M505")); 
01337               
01338        
01339         PageAff=505;               
01340         
01341     }
01342     //RAFFRAICHISSEMENT DONNEES
01343     if (PageAff==505 and Num==0){       
01344              
01345   
01346     }
01347       //////////////////////////////////////    
01348      //CREATION PAGE 506: //
01349     //////////////////////////////////////
01350     if (Num==506){  
01351         // CHEMIN PAGE   
01352         sprintf(Chemin, "%s \\ %s",_("M500"),_("M506")); 
01353               
01354        
01355         PageAff=506;               
01356         
01357     }
01358     //RAFFRAICHISSEMENT DONNEES
01359     if (PageAff==506 and Num==0){       
01360              
01361   
01362     }
01363        ////////////////////////////////////////    
01364      //CREATION PAGE 601: Test d'étanchéité//
01365     ////////////////////////////////////////
01366     if (Num==601){  
01367         // CHEMIN PAGE   
01368         sprintf(Chemin, "%s \\ %s",_("M600"),_("M601")); 
01369               
01370        
01371         PageAff=601;               
01372         
01373     }
01374     //RAFFRAICHISSEMENT DONNEES
01375     if (PageAff==601 and Num==0){       
01376              
01377   
01378     }
01379     
01380       //////////////////////////////////////    
01381      //CREATION PAGE 602: Séquence unique//
01382     //////////////////////////////////////
01383     if (Num==602){  
01384         // CHEMIN PAGE   
01385         sprintf(Chemin, "%s \\ %s",_("M600"),_("M602")); 
01386               
01387        
01388         PageAff=602;               
01389         
01390     }
01391     //RAFFRAICHISSEMENT DONNEES
01392     if (PageAff==602 and Num==0){       
01393              
01394   
01395     }
01396       ////////////////////////////////////////    
01397      //CREATION PAGE 603: //
01398     ////////////////////////////////////////
01399     if (Num==603){  
01400         // CHEMIN PAGE   
01401         sprintf(Chemin, "%s \\ %s",_("M600"),_("M603")); 
01402               
01403        
01404         PageAff=603;               
01405         
01406     }
01407     //RAFFRAICHISSEMENT DONNEES
01408     if (PageAff==603 and Num==0){       
01409              
01410   
01411     }
01412     
01413       //////////////////////////////////////    
01414      //CREATION PAGE 604: //
01415     //////////////////////////////////////
01416     if (Num==604){  
01417         // CHEMIN PAGE   
01418         sprintf(Chemin, "%s \\ %s",_("M600"),_("M604")); 
01419               
01420        
01421         PageAff=604;               
01422         
01423     }
01424     //RAFFRAICHISSEMENT DONNEES
01425     if (PageAff==604 and Num==0){       
01426              
01427   
01428     }
01429       //////////////////////////////////////    
01430      //CREATION PAGE 605: //
01431     //////////////////////////////////////
01432     if (Num==605){  
01433         // CHEMIN PAGE   
01434         sprintf(Chemin, "%s \\ %s",_("M600"),_("M605")); 
01435               
01436        
01437         PageAff=605;               
01438         
01439     }
01440     //RAFFRAICHISSEMENT DONNEES
01441     if (PageAff==605 and Num==0){       
01442              
01443   
01444     }
01445       //////////////////////////////////////    
01446      //CREATION PAGE 606: //
01447     //////////////////////////////////////
01448     if (Num==606){  
01449         // CHEMIN PAGE   
01450         sprintf(Chemin, "%s \\ %s",_("M600"),_("M606")); 
01451               
01452        
01453         PageAff=606;               
01454         
01455     }
01456     //RAFFRAICHISSEMENT DONNEES
01457     if (PageAff==606 and Num==0){       
01458              
01459   
01460     }
01461       ////////////////////////////////////////    
01462      //CREATION PAGE 701:??????????????????//
01463     ////////////////////////////////////////
01464     if (Num==701){  
01465         // CHEMIN PAGE   
01466         sprintf(Chemin, "%s \\ %s",_("M700"),_("M701")); 
01467               
01468         //Programme en cours       
01469         lv_obj_t *ProgEC = lv_label_create(Page, NULL);  
01470         lv_obj_set_pos(ProgEC,  50, i);   
01471         
01472         PageAff=401;              
01473         
01474     }
01475     //RAFFRAICHISSEMENT DONNEES
01476     if (PageAff==701 and Num==0){       
01477         
01478     }
01479          
01480       //////////////////////////////////////    
01481      //CREATION PAGE 702: Séquence unique//
01482     //////////////////////////////////////
01483     if (Num==702){  
01484         // CHEMIN PAGE   
01485         sprintf(Chemin, "%s \\ %s",_("M700"),_("M702")); 
01486               
01487        
01488         PageAff=702;               
01489         
01490     }
01491     //RAFFRAICHISSEMENT DONNEES
01492     if (PageAff==702 and Num==0){       
01493              
01494   
01495     }
01496       ////////////////////////////////////////    
01497      //CREATION PAGE 703: //
01498     ////////////////////////////////////////
01499     if (Num==703){  
01500         // CHEMIN PAGE   
01501         sprintf(Chemin, "%s \\ %s",_("M700"),_("M703")); 
01502               
01503        
01504         PageAff=703;               
01505         
01506     }
01507     //RAFFRAICHISSEMENT DONNEES
01508     if (PageAff==703 and Num==0){       
01509              
01510   
01511     }
01512     
01513       //////////////////////////////////////    
01514      //CREATION PAGE 704: //
01515     //////////////////////////////////////
01516     if (Num==704){  
01517         // CHEMIN PAGE   
01518         sprintf(Chemin, "%s \\ %s",_("M700"),_("M704")); 
01519               
01520        
01521         PageAff=704;               
01522         
01523     }
01524     //RAFFRAICHISSEMENT DONNEES
01525     if (PageAff==704 and Num==0){       
01526              
01527   
01528     }
01529       //////////////////////////////////////    
01530      //CREATION PAGE 705: //
01531     //////////////////////////////////////
01532     if (Num==705){  
01533         // CHEMIN PAGE   
01534         sprintf(Chemin, "%s \\ %s",_("M700"),_("M705")); 
01535               
01536        
01537         PageAff=705;               
01538         
01539     }
01540     //RAFFRAICHISSEMENT DONNEES
01541     if (PageAff==705 and Num==0){       
01542              
01543   
01544     }
01545       //////////////////////////////////////    
01546      //CREATION PAGE 706: //
01547     //////////////////////////////////////
01548     if (Num==706){  
01549         // CHEMIN PAGE   
01550         sprintf(Chemin, "%s \\ %s",_("M700"),_("M706")); 
01551               
01552        
01553         PageAff=706;               
01554         
01555     }
01556     //RAFFRAICHISSEMENT DONNEES
01557     if (PageAff==706 and Num==0){       
01558              
01559   
01560     }
01561 }
01562 
01563 //FONCTION INTERRUPTION COMPTEUR D'IMPULSION
01564 void interruptCompteur()
01565 {   
01566     //Timestamp pulsation
01567     TimerPuls=tempo.read_high_resolution_us();
01568     
01569     // Calcul temps entre 2 impulsions 
01570     TpsPuls=TimerPuls-MemTpsPuls;
01571     MemTpsPuls=TimerPuls;
01572     
01573     //Incrementation numéro de dent roue
01574     NumDent++;
01575     
01576      //Memorisation ecart entre chaque impulsion et Calcul des Min Max    
01577     Calcul=TpsPuls;
01578     Calcul=Calcul/1000;
01579     TpsEntre2Puls[NumDent]=Calcul;
01580     if (Calcul<TpsMinEntre2Puls){TpsMinEntre2Puls=Calcul;}
01581     if (Calcul>TpsMaxEntre2Puls){TpsMaxEntre2Puls=Calcul;}
01582         
01583     //Calcul débit
01584     if (NumDent>=16){
01585         CalcDebit=VolParTour;
01586         CalcDebit=60000000*CalcDebit/(TimerPuls-MemTps16Puls);
01587         Debit.Val=CalcDebit;
01588         Debit.Val=Debit.Val/1000;
01589         MemTps16Puls=TimerPuls;
01590         NumDent=0;
01591     }
01592         
01593     //Nombre d'impulsion total   
01594     CptPuls++;
01595     
01596     //Calcul Volume
01597     Volume.Val=CptPuls*VolParTour/16000;
01598      
01599 }
01600 
01601 void initialisation(void)
01602 {
01603     //CHARGEMENT DU THEME
01604        th_act = lv_theme_rb_init(0, &RB_lv_font_roboto_16); //Gabor: When i change something in my Theme nothing's happen. Can you see in /lvgl_RB/lv_theme_rb.c
01605  
01606  //   th_act = lv_theme_rb_init(0, NULL); //Gabor: When i change something in my Theme nothing's happen. Can you see in /lvgl_RB/lv_theme_rb.c
01607   //    th_act = lv_theme_night_init(0, NULL);
01608     lv_theme_set_current(th_act);
01609 
01610     lv_obj_t * scr = lv_obj_create(NULL, NULL);
01611     lv_disp_load_scr(scr);
01612     
01613     //POLICES
01614     lv_style_copy(&P10, &lv_style_pretty);     P10.text.font = &RB_lv_font_roboto_10;
01615     lv_style_copy(&P12, &lv_style_pretty);     P12.text.font = &RB_lv_font_roboto_12;
01616     lv_style_copy(&P16, &lv_style_pretty);     P16.text.font = &RB_lv_font_roboto_16;
01617     lv_style_copy(&P18, &lv_style_pretty);     P18.text.font = &RB_lv_font_roboto_18;
01618     lv_style_copy(&P22, &lv_style_pretty);     P22.text.font = &RB_lv_font_roboto_22;
01619     lv_style_copy(&PG12, &lv_style_pretty);    PG12.text.font = &RB_lv_font_roboto_bold_12;
01620     lv_style_copy(&PG16, &lv_style_pretty);    PG16.text.font = &RB_lv_font_roboto_bold_16;      
01621     lv_style_copy(&PG18, &lv_style_pretty);    PG18.text.font = &RB_lv_font_roboto_bold_18;
01622     lv_style_copy(&PG22, &lv_style_pretty);    PG22.text.font = &RB_lv_font_roboto_bold_22;    
01623     
01624     lv_style_copy(&P16Saisie, &lv_style_pretty);     P16Saisie.text.font = &RB_lv_font_roboto_16;  P16Saisie.text.color = LV_COLOR_MAKE(0, 0, 255); 
01625 
01626     
01627     //INITIALISATION TABLEAU UTILISATEUR
01628      User[1].Nom="Romain BECAN";        User[1].MDP="1234";   User[1].Niveau=3; User[1].Tps=1;
01629      User[2].Nom="Guy HERVE";           User[2].MDP="5678";   User[2].Niveau=2; User[2].Tps=120;
01630      User[31].Nom="OPERATEUR 1";        User[31].MDP="4321";  User[31].Niveau=1; User[31].Tps=1;
01631      User[32].Nom="OPERATEUR 2";        User[32].MDP="4321";  User[32].Niveau=1; User[32].Tps=60;
01632      User[33].Nom="OPERATEUR 3";        User[33].MDP="4321";  User[33].Niveau=1; User[33].Tps=70;
01633      User[34].Nom="OPERATEUR 4";        User[34].MDP="4321";  User[34].Niveau=1; User[34].Tps=30;
01634      User[35].Nom="OPERATEUR 5";        User[35].MDP="4321";  User[35].Niveau=3; User[35].Tps=30;
01635      User[36].Nom="OPERATEUR 6";        User[36].MDP="4321";  User[36].Niveau=3; User[36].Tps=30;
01636      User[99].Nom="OPERATEUR 100";      User[99].MDP="4321";  User[99].Niveau=3; User[99].Tps=30;
01637           
01638     
01639     //INITIALISATION TABLEAU ETALON
01640      EtalCpt[1].Nom="COMPT AB1";    EtalCpt[1].ValPuls=68.38;   EtalCpt[1].EMT=5.0;  
01641             EtalCpt[1].Hist[1].Annee=2020; EtalCpt[1].Hist[1].Mois=01;     EtalCpt[1].Hist[1].ProvDeriv1=1.2;  EtalCpt[1].Hist[1].Ajustage=true;
01642             EtalCpt[1].Hist[1].Annee=2019; EtalCpt[1].Hist[1].Mois=02;     EtalCpt[1].Hist[1].ProvDeriv1=1.3;  EtalCpt[1].Hist[1].Ajustage=false;
01643             EtalCpt[1].Hist[1].Annee=2018; EtalCpt[1].Hist[1].Mois=10;     EtalCpt[1].Hist[1].ProvDeriv1=1.4;  EtalCpt[1].Hist[1].Ajustage=false;
01644             EtalCpt[1].Hist[1].Annee=2017; EtalCpt[1].Hist[1].Mois=03;     EtalCpt[1].Hist[1].ProvDeriv1=1.5;  EtalCpt[1].Hist[1].Ajustage=true;
01645             EtalCpt[1].Hist[1].Annee=2016; EtalCpt[1].Hist[1].Mois=04;     EtalCpt[1].Hist[1].ProvDeriv1=1.6;  EtalCpt[1].Hist[1].Ajustage=true;
01646      EtalCpt[2].Nom="COMPT 123";    EtalCpt[2].ValPuls=66.35;   EtalCpt[2].EMT=5.0;  
01647             EtalCpt[2].Hist[1].Annee=2020; EtalCpt[2].Hist[1].Mois=01;     EtalCpt[2].Hist[1].ProvDeriv1=1.2;  EtalCpt[2].Hist[1].Ajustage=true;
01648             EtalCpt[2].Hist[1].Annee=2019; EtalCpt[2].Hist[1].Mois=02;     EtalCpt[2].Hist[1].ProvDeriv1=1.3;  EtalCpt[2].Hist[1].Ajustage=false;
01649             EtalCpt[2].Hist[1].Annee=2018; EtalCpt[2].Hist[1].Mois=10;     EtalCpt[2].Hist[1].ProvDeriv1=1.4;  EtalCpt[2].Hist[1].Ajustage=false;
01650             EtalCpt[2].Hist[1].Annee=2017; EtalCpt[2].Hist[1].Mois=03;     EtalCpt[2].Hist[1].ProvDeriv1=1.5;  EtalCpt[2].Hist[1].Ajustage=true;
01651             EtalCpt[2].Hist[1].Annee=2016; EtalCpt[2].Hist[1].Mois=04;     EtalCpt[2].Hist[1].ProvDeriv1=1.6;  EtalCpt[2].Hist[1].Ajustage=true;
01652     EtalCpt[3].Nom="COMPT 446";    EtalCpt[3].ValPuls=64.18;   EtalCpt[3].EMT=5.0;  
01653             EtalCpt[3].Hist[1].Annee=2020; EtalCpt[3].Hist[1].Mois=01;     EtalCpt[3].Hist[1].ProvDeriv1=1.2;  EtalCpt[3].Hist[1].Ajustage=true;
01654             EtalCpt[3].Hist[1].Annee=2019; EtalCpt[3].Hist[1].Mois=02;     EtalCpt[3].Hist[1].ProvDeriv1=1.3;  EtalCpt[3].Hist[1].Ajustage=false;
01655             EtalCpt[3].Hist[1].Annee=2018; EtalCpt[3].Hist[1].Mois=10;     EtalCpt[3].Hist[1].ProvDeriv1=1.4;  EtalCpt[3].Hist[1].Ajustage=false;
01656             EtalCpt[3].Hist[1].Annee=2017; EtalCpt[3].Hist[1].Mois=03;     EtalCpt[3].Hist[1].ProvDeriv1=1.5;  EtalCpt[3].Hist[1].Ajustage=true;
01657             EtalCpt[3].Hist[1].Annee=2016; EtalCpt[3].Hist[1].Mois=04;     EtalCpt[3].Hist[1].ProvDeriv1=1.6;  EtalCpt[3].Hist[1].Ajustage=true;
01658         
01659     CsgDebit.Val = 50;  CsgDebit.Unit = "L/min";   CsgDebit.Min = 10;  CsgDebit.Max = 100;    CsgDebit.Txt = "Consigne Débit";    CsgDebit.Niveau = 1;  
01660     Volume.Val = 12345; Volume.Unit = "L"; 
01661     Debit.Val = 8;      Debit.Unit = "L/min"; 
01662     DebitMoy.Val =7;    DebitMoy.Unit = "L/min";
01663     ProgEC.Val ="AUCUN PROGRAMME EN COURS";
01664     Duree.Val =7;       Duree.Unit = "";
01665     TotalisateurVol.Val =7;     TotalisateurVol.Unit = "L";
01666     TotalisateurDuree.Val =7;   TotalisateurDuree.Unit = "h";
01667     NPremiereMin.Val =10;       NPremiereMin.Unit = "min";
01668     NDerniereMin.Val =10;       NDerniereMin.Unit = "min";
01669     DebNPremiereMin.Val =8;     DebNPremiereMin.Unit = "L/min";
01670     DebNDerniereMin.Val =8;     DebNDerniereMin.Unit = "L/min";
01671     EcartType.Val =0.12;        EcartType.Unit = "L/min";
01672     TensionBat.Val =3.2;        TensionBat.Unit = "V";
01673     Intensite.Val =1;           Intensite.Unit = "A";
01674     VitessePpe.Val =4000;       VitessePpe.Unit = "tr/min";
01675     ConsoPrelev.Val =100;       ConsoPrelev.Unit = "W";
01676     Puissance.Val =100;         Puissance.Unit = "Wh";   
01677     
01678     char chaine[] = "Texte";  
01679     strcpy(NomEquipement.Val, chaine);
01680   //  NomEquipement.Val[]="1234567890";   NomEquipement.NbCarMax = 10;    NomEquipement.Txt = "Nom équipement";    NomEquipement.Niveau = 1;  
01681  //   NumSerieEquipement.Val="12345678";   NumSerieEquipement.NbCarMax = 8;    NumSerieEquipement.Txt = "Numéro série constructeur";    NumSerieEquipement.Niveau = 3;  
01682 }
01683 
01684   //////////////////    
01685  // BANDEAU HAUT //
01686 //////////////////
01687 static void AFFBandeauHaut(int Num)
01688 {
01689     if(BandeauHaut) {
01690         lv_obj_del(BandeauHaut);
01691         BandeauHaut = NULL;
01692     } 
01693     NumBandeauHaut=Num;
01694     
01695     //Bandeau haut sans Menu
01696     if (NumBandeauHaut==1){          
01697         // CREATION OBJET BANDEAU HAUT
01698         BandeauHaut = lv_cont_create(lv_scr_act(), NULL);
01699         lv_obj_set_size(BandeauHaut,hres,40);
01700         lv_obj_set_pos(BandeauHaut, 0, 0);
01701         
01702         //BP APPEL MENU        
01703         BPMENU = lv_btn_create(BandeauHaut, NULL);
01704         label = lv_label_create(BPMENU, NULL);
01705         lv_label_set_text(label, LV_SYMBOL_PLAY);
01706         lv_obj_set_size(BPMENU,40,40);
01707         lv_obj_set_pos(BandeauHaut, 0, 0);
01708         lv_obj_set_event_cb(BPMENU, BPMENU_ACT);
01709         
01710         //CHEMIN PAGE
01711         AffChemin = lv_label_create(BandeauHaut, NULL);   
01712         lv_obj_set_style(AffChemin, &P22);                 
01713         lv_obj_align(AffChemin, BandeauHaut, LV_ALIGN_IN_LEFT_MID, 45, 0); 
01714         sprintf(text, Chemin); lv_label_set_text(AffChemin, text);  
01715                 
01716         //ETAT BATTERIE
01717         AffSymbBat = lv_label_create(BandeauHaut, NULL); 
01718         lv_obj_set_style(AffSymbBat, &P22);           
01719         lv_obj_align(AffSymbBat, BandeauHaut, LV_ALIGN_IN_TOP_RIGHT, -15, 3); 
01720         sprintf(text,LV_SYMBOL_BATTERY_3 ); lv_label_set_text(AffSymbBat, text); 
01721         AffPourcBat = lv_label_create(BandeauHaut, NULL); 
01722         lv_obj_set_style(AffPourcBat, &P12);           
01723         lv_obj_align(AffPourcBat, AffSymbBat, LV_ALIGN_OUT_BOTTOM_LEFT, 0, -8); 
01724         sprintf(text,"75%%"); lv_label_set_text(AffPourcBat, text);   
01725         
01726     }
01727     
01728     //Bandeau haut avec Menu
01729     if (NumBandeauHaut==2){  
01730         //TEMPS D'AFFICHAGE BANDEAU HAUT
01731         TpsAvFermMenu=5000;
01732         
01733          // CREATION OBJET BANDEAU HAUT
01734         BandeauHaut = lv_cont_create(lv_scr_act(), NULL);
01735         lv_obj_set_size(BandeauHaut,2000,40);
01736        // lv_cont_set_fit2(BandeauHaut,LV_FIT_TIGHT, LV_FIT_NONE);
01737         lv_obj_set_pos(BandeauHaut, 0, 0);
01738         lv_obj_set_drag_dir(BandeauHaut, LV_DRAG_DIR_HOR);
01739         lv_obj_set_drag_throw(BandeauHaut, true);
01740         
01741         //MENU 1
01742         M100 = lv_btn_create(BandeauHaut, NULL);
01743         StyleBPM(M100);  
01744         lv_obj_t * label = lv_label_create(M100, NULL);
01745         lv_label_set_text(label, _("M100"));
01746         lv_obj_set_size(M100,130,40);
01747         lv_obj_set_drag_parent(M100, true);
01748         lv_obj_set_event_cb(M100, M100_ACT);
01749     
01750         //MENU 2
01751         M200 = lv_btn_create(BandeauHaut, NULL);
01752         StyleBPM(M200);  
01753         label = lv_label_create(M200, NULL);
01754         lv_label_set_text(label, _("M200"));
01755         lv_obj_set_size(M200,130,40);
01756         lv_obj_align(M200, M100, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01757         lv_obj_set_drag_parent(M200, true);
01758         lv_obj_set_event_cb(M200, M200_ACT);
01759     
01760         //MENU 3
01761         M300 = lv_btn_create(BandeauHaut, NULL);
01762         StyleBPM(M300);  
01763         label = lv_label_create(M300, NULL);
01764         lv_label_set_text(label, _("M300"));
01765         lv_obj_set_size(M300,130,40);
01766         lv_obj_align(M300, M200, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01767         lv_obj_set_drag_parent(M300, true);
01768         lv_obj_set_event_cb(M300, M300_ACT);
01769     
01770         //MENU 4
01771         M400 = lv_btn_create(BandeauHaut, NULL);
01772         StyleBPM(M400);  
01773         label = lv_label_create(M400, NULL);
01774         lv_label_set_text(label, _("M400"));
01775         lv_obj_set_size(M400,130,40);
01776         lv_obj_align(M400, M300, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01777         lv_obj_set_drag_parent(M400, true);
01778         lv_obj_set_event_cb(M400, M400_ACT);
01779     
01780         //MENU 5
01781         M500 = lv_btn_create(BandeauHaut, NULL);
01782         StyleBPM(M500);  
01783         label = lv_label_create(M500, NULL);
01784         lv_label_set_text(label, _("M500"));
01785         lv_obj_set_size(M500,130,40);
01786         lv_obj_align(M500, M400, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01787         lv_obj_set_drag_parent(M500, true);
01788         lv_obj_set_event_cb(M500, M500_ACT);
01789     
01790         //MENU 6
01791         M600 = lv_btn_create(BandeauHaut, NULL);
01792         StyleBPM(M600);  
01793         label = lv_label_create(M600, NULL);
01794         lv_label_set_text(label, _("M600"));
01795         lv_obj_set_size(M600,130,40);
01796         lv_obj_align(M600, M500, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01797         lv_obj_set_drag_parent(M600, true);
01798         lv_obj_set_event_cb(M600, M600_ACT);
01799         
01800         //MENU 7
01801  //       M700 = lv_btn_create(BandeauHaut, NULL);
01802  //       StyleBPM(M700);  
01803  //       label = lv_label_create(M700, NULL);
01804  //       lv_label_set_text(label, _("M700"));
01805  //       lv_obj_set_size(M700,130,40);
01806  //       lv_obj_align(M700, M600, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
01807  //       lv_obj_set_drag_parent(M700, true);
01808  //       lv_obj_set_event_cb(M700, M700_ACT);
01809     }    
01810 }
01811 
01812 
01813 static void AFFSousMenu(int Num)
01814 {
01815     //SI SOUS MENU DEJA AFFICHE : SUPPRIMER PAGE AVANT CREATION NOUVELLE
01816     if(SousMenu) {
01817         lv_obj_del(SousMenu);
01818         SousMenu = NULL;
01819     } 
01820    //Memorisation sousmenu en cours
01821    NumSousMenu=Num;
01822     /*Create a list*/
01823     SousMenu = lv_list_create(lv_scr_act(), NULL);
01824     lv_obj_set_pos(SousMenu, 0, 40);
01825     StyleBPSM(SousMenu);  
01826     AnimSousMenu=48;//TAILLE FENETRE FOIS NB BOUTON
01827 
01828     //SOUS MENU 100
01829     if (Num==100){
01830         AnimSousMenu=AnimSousMenu*2;//TAILLE FENETRE
01831         lv_obj_t * SM101 = lv_list_add_btn(SousMenu, NULL, _("M101")); 
01832         if (UserEC.Niveau<0){lv_btn_set_state(SM101, LV_BTN_STATE_INA );}
01833         lv_obj_set_event_cb(SM101, SM_ACT);
01834            
01835         lv_obj_t * SM102 = lv_list_add_btn(SousMenu, NULL, _("M102")); 
01836         if (UserEC.Niveau<0){lv_btn_set_state(SM102, LV_BTN_STATE_INA );}
01837         lv_obj_set_event_cb(SM102, SM_ACT);
01838     }
01839     
01840     //SOUS MENU 200
01841     if (Num==200){
01842         AnimSousMenu=AnimSousMenu*3;//TAILLE FENETRE
01843         lv_obj_t * SM201 = lv_list_add_btn(SousMenu, NULL, _("M201")); 
01844         if (UserEC.Niveau<1){lv_btn_set_state(SM201, LV_BTN_STATE_INA );}
01845         lv_obj_set_event_cb(SM201, SM_ACT);
01846     
01847         lv_obj_t * SM202 = lv_list_add_btn(SousMenu, NULL, _("M202")); 
01848         if (UserEC.Niveau<0){lv_btn_set_state(SM202, LV_BTN_STATE_INA );}
01849         lv_obj_set_event_cb(SM202, SM_ACT);
01850         
01851         lv_obj_t * SM203 = lv_list_add_btn(SousMenu, NULL, _("M203")); 
01852         if (UserEC.Niveau<0){lv_btn_set_state(SM203, LV_BTN_STATE_INA );}
01853         lv_obj_set_event_cb(SM203, SM_ACT);
01854     }
01855      
01856     //SOUS MENU 300
01857     if (Num==300){
01858         AnimSousMenu=AnimSousMenu*9;//TAILLE FENETRE
01859         lv_obj_t * SM301 = lv_list_add_btn(SousMenu, NULL, _("M301")); 
01860         if (UserEC.Niveau<1){lv_btn_set_state(SM301, LV_BTN_STATE_INA );}
01861         lv_obj_set_event_cb(SM301, SM_ACT);
01862     
01863         lv_obj_t * SM302 = lv_list_add_btn(SousMenu, NULL, _("M302")); 
01864         if (UserEC.Niveau<0){lv_btn_set_state(SM302, LV_BTN_STATE_INA );}
01865         lv_obj_set_event_cb(SM302, SM_ACT);
01866         
01867         lv_obj_t * SM303 = lv_list_add_btn(SousMenu, NULL, _("M303")); 
01868         if (UserEC.Niveau<0){lv_btn_set_state(SM303, LV_BTN_STATE_INA );}
01869         lv_obj_set_event_cb(SM303, SM_ACT);
01870         
01871         lv_obj_t * SM304 = lv_list_add_btn(SousMenu, NULL, _("M304")); 
01872         if (UserEC.Niveau<0){lv_btn_set_state(SM304, LV_BTN_STATE_INA );}
01873         lv_obj_set_event_cb(SM304, SM_ACT);
01874         
01875         lv_obj_t * SM305 = lv_list_add_btn(SousMenu, NULL, _("M305")); 
01876         if (UserEC.Niveau<0){lv_btn_set_state(SM305, LV_BTN_STATE_INA );}
01877         lv_obj_set_event_cb(SM305, SM_ACT);
01878         
01879         lv_obj_t * SM306 = lv_list_add_btn(SousMenu, NULL, _("M306")); 
01880         if (UserEC.Niveau<0){lv_btn_set_state(SM306, LV_BTN_STATE_INA );}
01881         lv_obj_set_event_cb(SM306, SM_ACT);     
01882            
01883         lv_obj_t * SM307 = lv_list_add_btn(SousMenu, NULL, _("M307")); 
01884         if (UserEC.Niveau<0){lv_btn_set_state(SM307, LV_BTN_STATE_INA );}
01885         lv_obj_set_event_cb(SM307, SM_ACT);
01886                 
01887         lv_obj_t * SM308 = lv_list_add_btn(SousMenu, NULL, _("M308")); 
01888         if (UserEC.Niveau<0){lv_btn_set_state(SM308, LV_BTN_STATE_INA );}
01889         lv_obj_set_event_cb(SM308, SM_ACT);
01890                 
01891         lv_obj_t * SM309 = lv_list_add_btn(SousMenu, NULL, _("M309")); 
01892         if (UserEC.Niveau<0){lv_btn_set_state(SM309, LV_BTN_STATE_INA );}
01893         lv_obj_set_event_cb(SM309, SM_ACT);
01894     }   
01895     
01896     //SOUS MENU 400
01897     if (Num==400){
01898         AnimSousMenu=AnimSousMenu*5;//TAILLE FENETRE
01899         lv_obj_t * SM401 = lv_list_add_btn(SousMenu, NULL, _("M401")); 
01900         if (UserEC.Niveau<1){lv_btn_set_state(SM401, LV_BTN_STATE_INA );}
01901         lv_obj_set_event_cb(SM401, SM_ACT);
01902     
01903         lv_obj_t * SM402 = lv_list_add_btn(SousMenu, NULL, _("M402")); 
01904         if (UserEC.Niveau<0){lv_btn_set_state(SM402, LV_BTN_STATE_INA );}
01905         lv_obj_set_event_cb(SM402, SM_ACT);
01906         
01907         lv_obj_t * SM403 = lv_list_add_btn(SousMenu, NULL, _("M403")); 
01908         if (UserEC.Niveau<0){lv_btn_set_state(SM403, LV_BTN_STATE_INA );}
01909         lv_obj_set_event_cb(SM403, SM_ACT);
01910         
01911         lv_obj_t * SM404 = lv_list_add_btn(SousMenu, NULL, _("M404")); 
01912         if (UserEC.Niveau<0){lv_btn_set_state(SM404, LV_BTN_STATE_INA );}
01913         lv_obj_set_event_cb(SM404, SM_ACT);
01914         
01915         lv_obj_t * SM405 = lv_list_add_btn(SousMenu, NULL, _("M405")); 
01916         if (UserEC.Niveau<0){lv_btn_set_state(SM405, LV_BTN_STATE_INA );}
01917         lv_obj_set_event_cb(SM405, SM_ACT);
01918     }
01919     
01920     //SOUS MENU 500
01921     if (Num==500){
01922         AnimSousMenu=AnimSousMenu*3;//TAILLE FENETRE
01923         lv_obj_t * SM501 = lv_list_add_btn(SousMenu, NULL, _("M501")); 
01924         if (UserEC.Niveau<1){lv_btn_set_state(SM501, LV_BTN_STATE_INA );}
01925         lv_obj_set_event_cb(SM501, SM_ACT);
01926     
01927         lv_obj_t * SM502 = lv_list_add_btn(SousMenu, NULL, _("M502")); 
01928         if (UserEC.Niveau<0){lv_btn_set_state(SM502, LV_BTN_STATE_INA );}
01929         lv_obj_set_event_cb(SM502, SM_ACT);
01930     
01931         lv_obj_t * SM503 = lv_list_add_btn(SousMenu, NULL, _("M503")); 
01932         if (UserEC.Niveau<0){lv_btn_set_state(SM503, LV_BTN_STATE_INA );}
01933         lv_obj_set_event_cb(SM503, SM_ACT);
01934     } 
01935     
01936     //SOUS MENU 600
01937     if (Num==600){
01938         AnimSousMenu=AnimSousMenu*1;//TAILLE FENETRE
01939         lv_obj_t * SM601 = lv_list_add_btn(SousMenu, NULL, _("M601")); 
01940         if (UserEC.Niveau<1){lv_btn_set_state(SM601, LV_BTN_STATE_INA );}
01941         lv_obj_set_event_cb(SM601, SM_ACT);
01942     }  
01943     
01944     //SOUS MENU 700
01945  //   if (Num==700){
01946  //       AnimSousMenu=AnimSousMenu*1;//TAILLE FENETRE
01947  //       lv_obj_t * SM701 = lv_list_add_btn(SousMenu, NULL, _("M701")); 
01948  //       if (UserEC.Niveau<1){lv_btn_set_state(SM701, LV_BTN_STATE_INA );}
01949  //       lv_obj_set_event_cb(SM701, SM_ACT);       
01950  //   } 
01951     if (AnimSousMenu>232){AnimSousMenu=232;}//TAILLE FENETRE MAXI 232=272-40
01952 }
01953 
01954 
01955 //********************
01956 // POPUP CONNEXION MDP
01957 //********************
01958 static void AFFPopupMDP(){
01959     //FOND GRISE 
01960     static lv_style_t modal_style;
01961     lv_style_copy(&modal_style, &lv_style_plain_color);
01962     modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
01963     modal_style.body.opa = LV_OPA_50;
01964     FondGris = lv_obj_create(lv_scr_act(), NULL);
01965     lv_obj_set_style(FondGris, &modal_style);
01966     lv_obj_set_pos(FondGris, 0, 0);
01967     lv_obj_set_size(FondGris, LV_HOR_RES, LV_VER_RES);
01968     lv_obj_set_opa_scale_enable(FondGris, true); 
01969     
01970     //CREATION POPUP CONNEXION MDP
01971     PopupMDP = lv_obj_create(FondGris, NULL);
01972     lv_obj_set_size(PopupMDP,400,260); 
01973     lv_obj_align(PopupMDP, FondGris, LV_ALIGN_CENTER, 0, 0);
01974     lv_obj_set_opa_scale_enable(PopupMDP, true);
01975     lv_obj_set_opa_scale(PopupMDP, 240);
01976     
01977     //TITRE
01978     label = lv_label_create(PopupMDP, NULL);  
01979     lv_obj_set_style(label,&PG12);        
01980     lv_label_set_text(label, _("NIVEAU D'ACCES INSSUFISANT POUR REALISER CETTE ACTION\nVEUILLEZ VOUS IDENTIFER:"));
01981     lv_obj_align(label, PopupMDP, LV_ALIGN_IN_TOP_MID, 0, 3);
01982     lv_obj_set_opa_scale_enable(label, true);
01983     lv_obj_set_opa_scale(label, LV_OPA_COVER);
01984     
01985     //CREATION LISTE UTILISATEUR POUR AFFICHAGE
01986     //G/ABOR: Mabye you have a better solution than:
01987     //ROMAIN: There is no much better way, but I have a few comments
01988     int i; 
01989     int j; 
01990     int k=0; 
01991     char p[2200];    
01992     
01993     //ROMAIN:
01994     // - p[i]=='\0'; it should be p[i]='\0'; isn't it?
01995     // - If so why not start from i = 0 to initalize?
01996     // - memset(p, '\0', sizeof(p)) can be a clearer option to initialize
01997     for (i = 1; i < 2200; i++) { p[i]=='\0';}    
01998     
01999     for (i = 1; i < 100; i++) { //ROMAIN: Why start from 1?
02000         string s=User[i].Nom; 
02001         if (s.length()>0){
02002             //ROMAIN: I suggest using memcpy instead
02003             // memcpy(&p[k], s, s.length())
02004             // k += s.length();
02005             // p[k] = '\n';
02006             // k++;
02007             for (j = 0; j < s.length(); j++) { 
02008                 p[k] = s[j];
02009                 k++;
02010             } 
02011             p[k]='\n';
02012             k++;
02013         }
02014     }    
02015     //ROMAIN: 
02016     // - you alraedy incremented k, so it should p[k] = '\0', shouldn't it?
02017     // - and you initialized p to '\0' so it's not required 
02018     p[k+1]='\0'; 
02019     char * ListeUser= p  ;
02020     
02021     //SELECTEUR UTILISATEUR    
02022     SelectID = lv_roller_create(PopupMDP, NULL);
02023     lv_roller_set_options(SelectID,ListeUser,LV_ROLLER_MODE_NORMAL);
02024     lv_roller_set_visible_row_count(SelectID, 9);  
02025     lv_roller_set_fix_width(SelectID, 175);
02026     lv_obj_align(SelectID, PopupMDP, LV_ALIGN_IN_TOP_LEFT, 10, 40); 
02027  
02028     //CHAMPS MOT DE PASSE
02029     MDP = lv_ta_create(PopupMDP, NULL);
02030     lv_ta_set_text(MDP, "");
02031     lv_ta_set_pwd_mode(MDP, true);
02032     lv_ta_set_one_line(MDP, true);
02033     lv_obj_set_width(MDP, 175);
02034     lv_obj_align(MDP, PopupMDP, LV_ALIGN_IN_TOP_RIGHT, -10, 40); 
02035     lv_obj_set_opa_scale_enable(MDP, true);
02036     lv_obj_set_opa_scale(MDP, LV_OPA_COVER); 
02037     lv_ta_set_max_length(MDP, 4);
02038         
02039     // PAVE NUMERIQUE SAISIE MOT DE PASSE
02040     static lv_style_t rel_style, pr_style; //STYLE CLAVIER
02041     lv_style_copy(&rel_style, &lv_style_btn_rel);
02042     rel_style.body.radius = 0;
02043     rel_style.body.border.width = 1;
02044     lv_style_copy(&pr_style, &lv_style_btn_pr);
02045     pr_style.body.radius = 0;
02046     pr_style.body.border.width = 1;
02047   
02048     kb = lv_kb_create(PopupMDP, NULL);
02049     lv_kb_set_mode(kb, LV_KB_MODE_NUM );
02050     lv_obj_set_event_cb(kb, kb_MDP_ACT);
02051     lv_kb_set_ta(kb, MDP);
02052     lv_obj_set_size(kb,175,175);     
02053     lv_btnm_set_map(kb, PAVE_MDP_MAP);
02054     lv_obj_align(kb, MDP, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); 
02055     lv_obj_set_opa_scale_enable(kb, true);
02056     lv_obj_set_opa_scale(kb, LV_OPA_COVER);     
02057     lv_kb_set_cursor_manage(kb, true);
02058     lv_kb_set_style(kb, LV_KB_STYLE_BG, &lv_style_transp_tight);
02059     lv_kb_set_style(kb, LV_KB_STYLE_BTN_REL, &rel_style);
02060     lv_kb_set_style(kb, LV_KB_STYLE_BTN_PR, &pr_style); 
02061     lv_ta_set_text(MDP, "");
02062     
02063         
02064 }
02065 static void kb_MDP_ACT(lv_obj_t * event_kb, lv_event_t event)
02066 {    
02067     lv_kb_def_event_cb(event_kb, event);
02068     if(event == LV_EVENT_APPLY ) { 
02069       //RECUPERATION DU NOM DE L'UTILISATEUR SELECTIONNE
02070         char NomSelect[20];        
02071         lv_roller_get_selected_str(SelectID, NomSelect, sizeof(NomSelect));
02072          
02073         //RECUPERATION MOT DE PASSE SAISIE 
02074         string MdpSaisie;
02075         MdpSaisie = lv_ta_get_text(MDP);
02076         
02077         //FOND GRISE 
02078         static lv_style_t modal_style;
02079         lv_style_copy(&modal_style, &lv_style_plain_color);
02080         modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02081         modal_style.body.opa = LV_OPA_50;
02082         FondGris2 = lv_obj_create(lv_scr_act(), NULL);
02083         lv_obj_set_style(FondGris2, &modal_style);
02084         lv_obj_set_pos(FondGris2, 0, 0);
02085         lv_obj_set_size(FondGris2, LV_HOR_RES, LV_VER_RES);
02086         lv_obj_set_opa_scale_enable(FondGris2, true); 
02087         //COMPARAISON AVEC LISTE           
02088         static const char * btns2[] = {"Ok", ""}; 
02089         for (int i = 1; i < 100; i++) { 
02090             if (User[i].Nom==NomSelect)
02091                 if (User[i].MDP==MdpSaisie){                   
02092                     mbox=lv_mbox_create(FondGris2, NULL);
02093                     lv_mbox_add_btns(mbox, btns2);
02094                     if (User[i].Niveau==1){sprintf(text2, "qu'operateur" );}
02095                     if (User[i].Niveau==2){sprintf(text2, "que superviseur");}  
02096                     if (User[i].Niveau==3){sprintf(text2, "que constructeur");}                    
02097                     sprintf(text, "Connexion autorisee a %s en tant %s pour une duree de %d min",User[i].Nom ,text2,User[i].Tps );
02098                     lv_mbox_set_text(mbox, text);
02099                     lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
02100                     lv_obj_set_event_cb(mbox, mboxMdp_ACT);                      
02101                     TpsMdpEnCours=User[i].Tps*60;
02102                     UserEC=User[i];                           
02103                     //RECLASSEMENT DU TABLEAU DES UTILISATEURS POUR AVOIR LE DERNIER CONNECTé EN PREMIER
02104                     User[0]=User[i];
02105                     for (int j = i; j >0; j--) { //DECALAGE TABLEAU
02106                        User[j]=User[j-1]; 
02107                     }
02108                     return;
02109                 }           
02110          }  
02111          mbox=lv_mbox_create(FondGris2, NULL);
02112          lv_mbox_add_btns(mbox, btns2);
02113          lv_mbox_set_text(mbox, "MOT DE PASSE ERRONE");
02114          lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
02115          lv_obj_set_event_cb(mbox, mboxMdp_ACT2); 
02116     }
02117     if(event == LV_EVENT_CANCEL ) {  
02118         lv_obj_del_async(FondGris);        
02119         PopupMDP=NULL;
02120     } 
02121 }
02122 static void mboxMdp_ACT(lv_obj_t * obj, lv_event_t event)
02123 {     
02124     if(event == LV_EVENT_CLICKED) {
02125         lv_obj_del_async(FondGris);
02126         lv_obj_del_async(FondGris2);
02127         PopupMDP=NULL;
02128         if(BandeauHaut){AFFBandeauHaut(NumBandeauHaut);}
02129         if(SousMenu){AFFSousMenu(NumSousMenu);}
02130     }  
02131 }
02132 static void mboxMdp_ACT2(lv_obj_t * obj, lv_event_t event)
02133 {
02134     if(event == LV_EVENT_CLICKED) {
02135         lv_obj_del_async(FondGris2);   
02136         lv_ta_set_text(MDP, "");
02137     }
02138 }
02139 
02140 
02141 //********************
02142 // SAISIE FLOAT
02143 //********************
02144 static void DdeSaisieFloat(lv_obj_t * label, lv_event_t event)
02145 {
02146     if(event == LV_EVENT_CLICKED) {       
02147         SaisieFloat = (Float_S *)lv_obj_get_user_data(label);
02148         if (UserEC.Niveau<SaisieFloat->Niveau){
02149             AFFPopupMDP();
02150         }
02151         else{
02152             PageSaisieFloat(label);
02153         }
02154     }
02155 }
02156 static void PageSaisieFloat(lv_obj_t * label){
02157     
02158     //STRUCTURE SAISIE
02159     SaisieFloat = (Float_S *)lv_obj_get_user_data(label);
02160     
02161     //FOND GRISE 
02162     static lv_style_t modal_style;
02163     lv_style_copy(&modal_style, &lv_style_plain_color);
02164     modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02165     modal_style.body.opa = LV_OPA_50;
02166     FondGris = lv_obj_create(lv_scr_act(), NULL);
02167     lv_obj_set_style(FondGris, &modal_style);
02168     lv_obj_set_pos(FondGris, 0, 0);
02169     lv_obj_set_size(FondGris, LV_HOR_RES, LV_VER_RES);
02170     lv_obj_set_opa_scale_enable(FondGris, true); 
02171     
02172     //CREATION POPUP 
02173     lv_obj_t *PopupNum = lv_obj_create(FondGris, NULL);
02174     lv_obj_set_size(PopupNum,400,260); 
02175     lv_obj_align(PopupNum, FondGris, LV_ALIGN_CENTER, 0, 0);
02176     lv_obj_set_opa_scale_enable(PopupNum, true);
02177     lv_obj_set_opa_scale(PopupNum, 240);
02178     
02179     //TITRE
02180     label = lv_label_create(PopupNum, NULL); 
02181     lv_obj_set_style(label,&PG16);  
02182     sprintf(text, "%s", SaisieFloat->Txt);
02183     lv_label_set_text(label, text);   
02184     lv_obj_align(label, PopupNum, LV_ALIGN_IN_TOP_MID, 0, 3);
02185     lv_obj_set_opa_scale_enable(label, true);
02186     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02187     
02188     //CHAMPS SAISI
02189     ChSaisi = lv_ta_create(PopupNum, NULL);
02190     lv_ta_set_text(ChSaisi, "");
02191     lv_ta_set_one_line(ChSaisi, true);
02192     lv_obj_set_width(ChSaisi, 200);
02193     lv_obj_align(ChSaisi, PopupNum, LV_ALIGN_IN_TOP_LEFT, 20, 25); 
02194     lv_obj_set_opa_scale_enable(ChSaisi, true);
02195     lv_obj_set_opa_scale(ChSaisi, LV_OPA_COVER); 
02196     
02197     //VALEUR EN COURS / mini /maxi
02198     label = lv_label_create(PopupNum, NULL); 
02199     lv_obj_set_style(label,&P12);  
02200     sprintf(text, _("Valeur Actuelle = %2.2f %s\nValeur mini = %2.2f %s\nValeur maxi = %2.2f %s\n"), SaisieFloat->Val, SaisieFloat->Unit, SaisieFloat->Min, SaisieFloat->Unit, SaisieFloat->Max, SaisieFloat->Unit);
02201     lv_label_set_text(label, text);
02202     lv_obj_align(label, ChSaisi, LV_ALIGN_OUT_RIGHT_MID,5, 30);
02203     lv_obj_set_opa_scale_enable(label, true);
02204     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02205        
02206    // PAVE NUMERIQUE SAISIE 
02207     static lv_style_t rel_style, pr_style; //STYLE CLAVIER
02208     lv_style_copy(&rel_style, &lv_style_btn_rel);
02209     rel_style.body.radius = 0;
02210     rel_style.body.border.width = 1;
02211     lv_style_copy(&pr_style, &lv_style_btn_pr);
02212     pr_style.body.radius = 0;
02213     pr_style.body.border.width = 1;
02214   
02215     kb = lv_kb_create(PopupNum, NULL);
02216     lv_kb_set_mode(kb, LV_KB_MODE_NUM );
02217     lv_obj_set_event_cb(kb, KbSaisieFloat_ACT);
02218     lv_kb_set_ta(kb, ChSaisi);
02219     lv_obj_set_size(kb,200,180);     
02220  //   lv_btnm_set_map(kb, PAVE_NUMERIQUE_MAP);
02221     lv_obj_align(kb, ChSaisi, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); 
02222     lv_obj_set_opa_scale_enable(kb, true);
02223     lv_obj_set_opa_scale(kb, LV_OPA_COVER);     
02224     lv_kb_set_cursor_manage(kb, true);
02225     lv_kb_set_style(kb, LV_KB_STYLE_BG, &lv_style_transp_tight);
02226     lv_kb_set_style(kb, LV_KB_STYLE_BTN_REL, &rel_style);
02227     lv_kb_set_style(kb, LV_KB_STYLE_BTN_PR, &pr_style); 
02228     lv_ta_set_text(ChSaisi, "");  
02229     
02230  }   
02231      
02232 static void KbSaisieFloat_ACT(lv_obj_t * event_kb, lv_event_t event)
02233 {    
02234     lv_kb_def_event_cb(event_kb, event);
02235     if(event == LV_EVENT_APPLY ) { 
02236         //CONVERSION VALEUR SAISIE        
02237         const char * tmp = lv_ta_get_text(ChSaisi);
02238         float ValSaisie=strtof(tmp, NULL);
02239         //VALEUR OK
02240         if (ValSaisie>=SaisieFloat->Min and ValSaisie<=SaisieFloat->Max){
02241             SaisieFloat->Val=ValSaisie;
02242             lv_obj_del_async(FondGris); 
02243         }
02244         else{                
02245         //VALEUR HORS LIMITES
02246         //MESSAGE BOX SUR FOND GRISE 
02247             static lv_style_t modal_style;
02248             lv_style_copy(&modal_style, &lv_style_plain_color);
02249             modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02250             modal_style.body.opa = LV_OPA_50;
02251             FondGris2 = lv_obj_create(lv_scr_act(), NULL);
02252             lv_obj_set_style(FondGris2, &modal_style);
02253             lv_obj_set_pos(FondGris2, 0, 0);
02254             lv_obj_set_size(FondGris2, LV_HOR_RES, LV_VER_RES);
02255             lv_obj_set_opa_scale_enable(FondGris2, true);             
02256             static const char * btns2[] = {"Ok", ""}; 
02257             mbox=lv_mbox_create(FondGris2, NULL);
02258             lv_mbox_add_btns(mbox, btns2);
02259             lv_mbox_set_text(mbox, "VALEUR SAISIE HORS LIMITES");
02260             lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
02261             lv_obj_set_event_cb(mbox, mbox_ACT);        
02262         }      
02263     }
02264     if(event == LV_EVENT_CANCEL ) {            
02265         lv_obj_del_async(FondGris);  
02266     } 
02267 }
02268 
02269 //********************
02270 // SAISIE INT
02271 //********************
02272 static void DdeSaisieInt(lv_obj_t * label, lv_event_t event)
02273 {
02274     if(event == LV_EVENT_CLICKED) {       
02275         SaisieFloat = (Float_S *)lv_obj_get_user_data(label);
02276         if (UserEC.Niveau<SaisieInt->Niveau){
02277             AFFPopupMDP();
02278         }
02279         else{
02280             PageSaisieInt(label);
02281         }
02282     }
02283 }
02284 static void PageSaisieInt(lv_obj_t * label)
02285 {    
02286     //STRUCTURE SAISIE
02287     SaisieInt = (Int_S *)lv_obj_get_user_data(label);
02288     
02289     //FOND GRISE 
02290     static lv_style_t modal_style;
02291     lv_style_copy(&modal_style, &lv_style_plain_color);
02292     modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02293     modal_style.body.opa = LV_OPA_50;
02294     FondGris = lv_obj_create(lv_scr_act(), NULL);
02295     lv_obj_set_style(FondGris, &modal_style);
02296     lv_obj_set_pos(FondGris, 0, 0);
02297     lv_obj_set_size(FondGris, LV_HOR_RES, LV_VER_RES);
02298     lv_obj_set_opa_scale_enable(FondGris, true); 
02299     
02300     //CREATION POPUP 
02301     lv_obj_t *PopupNum = lv_obj_create(FondGris, NULL);
02302     lv_obj_set_size(PopupNum,400,260); 
02303     lv_obj_align(PopupNum, FondGris, LV_ALIGN_CENTER, 0, 0);
02304     lv_obj_set_opa_scale_enable(PopupNum, true);
02305     lv_obj_set_opa_scale(PopupNum, 240);
02306     
02307     //TITRE
02308     label = lv_label_create(PopupNum, NULL); 
02309     lv_obj_set_style(label,&PG16);  
02310     sprintf(text, "%s", SaisieInt->Txt);
02311     lv_label_set_text(label, text);   
02312     lv_obj_align(label, PopupNum, LV_ALIGN_IN_TOP_MID, 0, 3);
02313     lv_obj_set_opa_scale_enable(label, true);
02314     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02315     
02316     //CHAMPS SAISI
02317     ChSaisi = lv_ta_create(PopupNum, NULL);
02318     lv_ta_set_text(ChSaisi, "");
02319     lv_ta_set_one_line(ChSaisi, true);
02320     lv_obj_set_width(ChSaisi, 200);
02321     lv_obj_align(ChSaisi, PopupNum, LV_ALIGN_IN_TOP_LEFT, 20, 25); 
02322     lv_obj_set_opa_scale_enable(ChSaisi, true);
02323     lv_obj_set_opa_scale(ChSaisi, LV_OPA_COVER); 
02324     
02325     //VALEUR EN COURS / mini /maxi
02326     label = lv_label_create(PopupNum, NULL); 
02327     lv_obj_set_style(label,&P12);  
02328     sprintf(text, _("Valeur Actuelle = %d %s\nValeur mini = %d %s\nValeur maxi = %d %s\n"), SaisieInt->Val, SaisieInt->Unit, SaisieInt->Min, SaisieInt->Unit, SaisieInt->Max, SaisieInt->Unit);
02329     lv_label_set_text(label, text);
02330     lv_obj_align(label, ChSaisi, LV_ALIGN_OUT_RIGHT_MID,5, 30);
02331     lv_obj_set_opa_scale_enable(label, true);
02332     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02333        
02334    // PAVE NUMERIQUE SAISIE 
02335     static lv_style_t rel_style, pr_style; //STYLE CLAVIER
02336     lv_style_copy(&rel_style, &lv_style_btn_rel);
02337     rel_style.body.radius = 0;
02338     rel_style.body.border.width = 1;
02339     lv_style_copy(&pr_style, &lv_style_btn_pr);
02340     pr_style.body.radius = 0;
02341     pr_style.body.border.width = 1;
02342   
02343     kb = lv_kb_create(PopupNum, NULL);
02344     lv_kb_set_mode(kb, LV_KB_MODE_NUM );
02345     lv_obj_set_event_cb(kb, KbSaisieInt_ACT);
02346     lv_kb_set_ta(kb, ChSaisi);
02347     lv_obj_set_size(kb,200,180);     
02348  //   lv_btnm_set_map(kb, PAVE_NUMERIQUE_MAP);
02349     lv_obj_align(kb, ChSaisi, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); 
02350     lv_obj_set_opa_scale_enable(kb, true);
02351     lv_obj_set_opa_scale(kb, LV_OPA_COVER);     
02352     lv_kb_set_cursor_manage(kb, true);
02353     lv_kb_set_style(kb, LV_KB_STYLE_BG, &lv_style_transp_tight);
02354     lv_kb_set_style(kb, LV_KB_STYLE_BTN_REL, &rel_style);
02355     lv_kb_set_style(kb, LV_KB_STYLE_BTN_PR, &pr_style); 
02356     lv_ta_set_text(ChSaisi, "");      
02357 }   
02358      
02359 static void KbSaisieInt_ACT(lv_obj_t * event_kb, lv_event_t event)
02360 {    
02361     lv_kb_def_event_cb(event_kb, event);
02362     if(event == LV_EVENT_APPLY ) { 
02363         //CONVERSION VALEUR SAISIE        
02364         const char * tmp = lv_ta_get_text(ChSaisi);
02365         int ValSaisie=strtof(tmp, NULL);
02366         //VALEUR OK
02367         if (ValSaisie>=SaisieInt->Min and ValSaisie<=SaisieInt->Max){
02368             SaisieInt->Val=ValSaisie;
02369             lv_obj_del_async(FondGris); 
02370         }
02371         else{                
02372         //VALEUR HORS LIMITES
02373         //MESSAGE BOX SUR FOND GRISE 
02374             static lv_style_t modal_style;
02375             lv_style_copy(&modal_style, &lv_style_plain_color);
02376             modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02377             modal_style.body.opa = LV_OPA_50;
02378             FondGris2 = lv_obj_create(lv_scr_act(), NULL);
02379             lv_obj_set_style(FondGris2, &modal_style);
02380             lv_obj_set_pos(FondGris2, 0, 0);
02381             lv_obj_set_size(FondGris2, LV_HOR_RES, LV_VER_RES);
02382             lv_obj_set_opa_scale_enable(FondGris2, true);             
02383             static const char * btns2[] = {"Ok", ""}; 
02384             mbox=lv_mbox_create(FondGris2, NULL);
02385             lv_mbox_add_btns(mbox, btns2);
02386             lv_mbox_set_text(mbox, "VALEUR SAISIE HORS LIMITES");
02387             lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
02388             lv_obj_set_event_cb(mbox, mbox_ACT);        
02389         }      
02390     }
02391     if(event == LV_EVENT_CANCEL ) {            
02392         lv_obj_del_async(FondGris);  
02393     } 
02394 }
02395 
02396 //********************
02397 // SAISIE TEXTE
02398 //********************
02399 static void DdeSaisieTxt(lv_obj_t * label, lv_event_t event)
02400 {
02401     if(event == LV_EVENT_CLICKED) {       
02402         SaisieTxt = (Txt_S *)lv_obj_get_user_data(label);
02403         if (UserEC.Niveau<SaisieTxt->Niveau){
02404             AFFPopupMDP();
02405         }
02406         else{
02407             PageSaisieTxt(label);
02408         }
02409     }
02410 }
02411 static void PageSaisieTxt(lv_obj_t * label)
02412 {    
02413     //STRUCTURE SAISIE
02414     SaisieTxt = (Txt_S *)lv_obj_get_user_data(label);
02415     
02416     //FOND GRISE 
02417     static lv_style_t modal_style;
02418     lv_style_copy(&modal_style, &lv_style_plain_color);
02419     modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02420     modal_style.body.opa = LV_OPA_50;
02421     FondGris = lv_obj_create(lv_scr_act(), NULL);
02422     lv_obj_set_style(FondGris, &modal_style);
02423     lv_obj_set_pos(FondGris, 0, 0);
02424     lv_obj_set_size(FondGris, LV_HOR_RES, LV_VER_RES);
02425     lv_obj_set_opa_scale_enable(FondGris, true); 
02426     
02427     //CREATION POPUP 
02428     lv_obj_t *PopupNum = lv_obj_create(FondGris, NULL);
02429     lv_obj_set_size(PopupNum,480,260); 
02430     lv_obj_align(PopupNum, FondGris, LV_ALIGN_CENTER, 0, 0);
02431     lv_obj_set_opa_scale_enable(PopupNum, true);
02432     lv_obj_set_opa_scale(PopupNum, 240);
02433     
02434     //TITRE
02435     label = lv_label_create(PopupNum, NULL); 
02436     lv_obj_set_style(label,&PG16);  
02437     sprintf(text, "%s", SaisieTxt->Txt);
02438     lv_label_set_text(label, text);   
02439     lv_obj_align(label, PopupNum, LV_ALIGN_IN_TOP_MID, 0, 3);
02440     lv_obj_set_opa_scale_enable(label, true);
02441     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02442     
02443     //CHAMPS SAISI
02444     ChSaisi = lv_ta_create(PopupNum, NULL);
02445     lv_ta_set_text(ChSaisi, "");
02446     lv_ta_set_one_line(ChSaisi, true);
02447     lv_obj_set_width(ChSaisi, 250);
02448     lv_obj_align(ChSaisi, PopupNum, LV_ALIGN_IN_TOP_LEFT, 20, 25); 
02449     lv_obj_set_opa_scale_enable(ChSaisi, true);
02450     lv_obj_set_opa_scale(ChSaisi, LV_OPA_COVER); 
02451     lv_ta_set_max_length(ChSaisi, SaisieTxt->NbCarMax);
02452     
02453     //VALEUR EN COURS /Nombre de caractère maxi
02454     label = lv_label_create(PopupNum, NULL); 
02455     lv_obj_set_style(label,&P12);  
02456     sprintf(text, _("Actuel = %s\n%d caractères maximum"), SaisieTxt->Val, SaisieTxt->NbCarMax);
02457     lv_label_set_text(label, text);
02458     lv_obj_align(label, ChSaisi, LV_ALIGN_OUT_RIGHT_MID,5, 0);
02459     lv_obj_set_opa_scale_enable(label, true);
02460     lv_obj_set_opa_scale(label, LV_OPA_COVER);
02461        
02462    // PAVE NUMERIQUE SAISIE 
02463     static lv_style_t rel_style, pr_style; //STYLE CLAVIER
02464     lv_style_copy(&rel_style, &lv_style_btn_rel);
02465     rel_style.body.radius = 0;
02466     rel_style.body.border.width = 1;
02467     lv_style_copy(&pr_style, &lv_style_btn_pr);
02468     pr_style.body.radius = 0;
02469     pr_style.body.border.width = 1;
02470   
02471     kb = lv_kb_create(PopupNum, NULL);
02472 //    lv_kb_set_mode(kb, LV_KB_MODE_NUM );
02473     lv_obj_set_event_cb(kb, KbSaisieTxt_ACT);
02474     lv_kb_set_ta(kb, ChSaisi);
02475     lv_obj_set_size(kb,480,190);     ;
02476     lv_obj_align(kb, PopupNum, LV_ALIGN_IN_TOP_LEFT, 0, 65); 
02477     lv_obj_set_opa_scale_enable(kb, true);
02478     lv_obj_set_opa_scale(kb, LV_OPA_COVER);     
02479     lv_kb_set_cursor_manage(kb, true);
02480     lv_kb_set_style(kb, LV_KB_STYLE_BG, &lv_style_transp_tight);
02481     lv_kb_set_style(kb, LV_KB_STYLE_BTN_REL, &rel_style);
02482     lv_kb_set_style(kb, LV_KB_STYLE_BTN_PR, &pr_style); 
02483     lv_ta_set_text(ChSaisi, "");      
02484 }   
02485      
02486 static void KbSaisieTxt_ACT(lv_obj_t * event_kb, lv_event_t event)
02487 {    
02488     lv_kb_def_event_cb(event_kb, event);
02489     if(event == LV_EVENT_APPLY ) { 
02490         //CONVERSION VALEUR SAISIE      
02491         const char * ValSaisie = lv_ta_get_text(ChSaisi);
02492         string CalcNbCar = lv_ta_get_text(ChSaisi);
02493         char test[100];
02494         
02495         //VALEUR OK
02496         if (CalcNbCar.length()>0){
02497             strcpy(SaisieTxt->Val, ValSaisie);
02498           //  SaisieTxt->Val=ValSaisie;
02499             lv_obj_del_async(FondGris); 
02500         }
02501         else{                
02502         //VALEUR HORS LIMITES
02503         //MESSAGE BOX SUR FOND GRISE 
02504             static lv_style_t modal_style;
02505             lv_style_copy(&modal_style, &lv_style_plain_color);
02506             modal_style.body.main_color = modal_style.body.grad_color = LV_COLOR_BLACK;
02507             modal_style.body.opa = LV_OPA_50;
02508             FondGris2 = lv_obj_create(lv_scr_act(), NULL);
02509             lv_obj_set_style(FondGris2, &modal_style);
02510             lv_obj_set_pos(FondGris2, 0, 0);
02511             lv_obj_set_size(FondGris2, LV_HOR_RES, LV_VER_RES);
02512             lv_obj_set_opa_scale_enable(FondGris2, true);             
02513             static const char * btns2[] = {"Ok", ""}; 
02514             mbox=lv_mbox_create(FondGris2, NULL);
02515             lv_mbox_add_btns(mbox, btns2);
02516             lv_mbox_set_text(mbox, "SAISIR AU MOINS 1 CARACTERE");
02517             lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
02518             lv_obj_set_event_cb(mbox, mbox_ACT);        
02519         }              
02520     }
02521     if(event == LV_EVENT_CANCEL ) {            
02522         lv_obj_del_async(FondGris);  
02523     } 
02524 }
02525 
02526 
02527 
02528 //FERMETURE POPUP MESSAGE BOX
02529 static void mbox_ACT(lv_obj_t * obj, lv_event_t event)
02530 {   
02531     if(event == LV_EVENT_CLICKED) {
02532         lv_obj_del_async(FondGris2); 
02533     }
02534 }
02535 
02536 
02537 
02538 //**************************
02539 // ACTION BOUTONS MENUS
02540 //**************************
02541 
02542 static void Reglage_R_RGB(lv_obj_t * obj, lv_event_t event)
02543 {
02544     if(event == LV_EVENT_PRESSING) {
02545         Reglage_R= lv_slider_get_value(obj);
02546         sprintf(text, " %d ",Reglage_R );
02547         lv_label_set_text(Val_R, text);
02548     }
02549 }
02550 
02551 static void BPRAZ_ACT(lv_obj_t * btn, lv_event_t event)
02552 {
02553     if(event == LV_EVENT_CLICKED) {
02554         TpsMinEntre2Puls=999999;
02555         TpsMaPpe=0;
02556         TpsMaxEntre2Puls=0;
02557         CptPuls=0;   
02558         Volume.Val=0;
02559         Duree.Val=50*60;
02560         for (NumDent=20;NumDent>0;NumDent--){
02561                TpsEntre2Puls[NumDent]=0;    
02562                MemTpsPuls=0;  
02563                MemTps16Puls=0;
02564         }
02565     }
02566 }
02567 static void BPPOMPE_ACT(lv_obj_t * btn, lv_event_t event)
02568 {
02569     if(event == LV_EVENT_CLICKED) {
02570         DO_POMPE=!DO_POMPE;
02571     }
02572 }
02573 static void LANGUE_FR_ACT(lv_obj_t * btn, lv_event_t event)
02574 {
02575     if(event == LV_EVENT_CLICKED) {       
02576         lv_i18n_set_locale("fr");     
02577         AFFBandeauHaut(1);
02578         AFFPage(PageAff);
02579     }
02580 }
02581 static void LANGUE_EN_ACT(lv_obj_t * btn, lv_event_t event)
02582 {
02583     if(event == LV_EVENT_CLICKED) {        
02584        lv_i18n_set_locale("en-GB");       
02585        AFFBandeauHaut(1);
02586        AFFPage(PageAff);
02587    }
02588 }
02589 
02590 static void BPMENU_ACT(lv_obj_t * btn, lv_event_t event)
02591 {
02592     if(event == LV_EVENT_CLICKED) {
02593         AFFBandeauHaut(2);
02594     }
02595 }
02596 
02597 static void M100_ACT(lv_obj_t * btn, lv_event_t event)
02598 {
02599     if(event == LV_EVENT_CLICKED) {
02600         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02601         PosX_MenuCible = -lv_obj_get_x(M100);
02602         DdeAlignMenu=1;
02603         NumSousMenu=100;
02604     }
02605 }
02606 static void M200_ACT(lv_obj_t * btn, lv_event_t event)
02607 {
02608     if(event == LV_EVENT_CLICKED) {
02609         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02610         PosX_MenuCible = -lv_obj_get_x(M200);
02611         DdeAlignMenu=1;
02612         NumSousMenu=200;
02613     }
02614 }
02615 static void M300_ACT(lv_obj_t * btn, lv_event_t event)
02616 {
02617     if(event == LV_EVENT_CLICKED) {
02618         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02619         PosX_MenuCible = -lv_obj_get_x(M300);
02620         DdeAlignMenu=1;
02621         NumSousMenu=300;
02622     }
02623 }
02624 static void M400_ACT(lv_obj_t * btn, lv_event_t event)
02625 {
02626     if(event == LV_EVENT_CLICKED) {
02627         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02628         PosX_MenuCible = -lv_obj_get_x(M400);
02629         DdeAlignMenu=1;
02630         NumSousMenu=400;
02631     }
02632 }
02633 static void M500_ACT(lv_obj_t * btn, lv_event_t event)
02634 {
02635     if(event == LV_EVENT_CLICKED) {
02636         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02637         PosX_MenuCible = -lv_obj_get_x(M500);
02638         DdeAlignMenu=1;
02639         NumSousMenu=500;
02640     }
02641 }
02642 static void M600_ACT(lv_obj_t * btn, lv_event_t event)
02643 {
02644     if(event == LV_EVENT_CLICKED) {
02645         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02646         PosX_MenuCible = -lv_obj_get_x(M600);
02647         DdeAlignMenu=1;
02648         NumSousMenu=600;
02649     }
02650 }
02651 static void M700_ACT(lv_obj_t * btn, lv_event_t event)
02652 {
02653     if(event == LV_EVENT_CLICKED) {
02654         PosX_MenuDepart = lv_obj_get_x(BandeauHaut);
02655         PosX_MenuCible = -lv_obj_get_x(M700);
02656         DdeAlignMenu=1;
02657         NumSousMenu=700;
02658     }
02659 }
02660 //**************************
02661 // ACTION BOUTONS SOUS MENUS
02662 //**************************
02663 static void SM_ACT(lv_obj_t * btn, lv_event_t event)
02664 {
02665     if(event == LV_EVENT_CLICKED) {  
02666         //VERIFICATION AUTORISATION ACCES
02667         uint8_t EtatBp = lv_btn_get_state(btn);
02668         if (EtatBp==LV_BTN_STATE_INA){   
02669             AFFPopupMDP();
02670         }    
02671         else{               
02672             DdeFermBandeauHaut=true;
02673             TpsAvFermSousMenu=0;
02674      //       AFFPage(101);
02675             lv_obj_t * label =  lv_obj_get_child(btn, NULL);
02676             const char * txt = lv_label_get_text(label);
02677             if(strcmp(txt, _("M101")) == 0) {AFFPage(101);} 
02678             if(strcmp(txt, _("M102")) == 0) {AFFPage(102);} 
02679             if(strcmp(txt, _("M103")) == 0) {AFFPage(103);} 
02680             if(strcmp(txt, _("M104")) == 0) {AFFPage(104);} 
02681             if(strcmp(txt, _("M105")) == 0) {AFFPage(105);} 
02682             if(strcmp(txt, _("M106")) == 0) {AFFPage(106);} 
02683             if(strcmp(txt, _("M107")) == 0) {AFFPage(107);}             
02684             
02685             if(strcmp(txt, _("M201")) == 0) {AFFPage(201);} 
02686             if(strcmp(txt, _("M202")) == 0) {AFFPage(202);} 
02687             if(strcmp(txt, _("M203")) == 0) {AFFPage(203);} 
02688             if(strcmp(txt, _("M204")) == 0) {AFFPage(204);} 
02689             if(strcmp(txt, _("M205")) == 0) {AFFPage(205);} 
02690             if(strcmp(txt, _("M206")) == 0) {AFFPage(206);} 
02691             if(strcmp(txt, _("M207")) == 0) {AFFPage(207);}      
02692             
02693             if(strcmp(txt, _("M301")) == 0) {AFFPage(301);} 
02694             if(strcmp(txt, _("M302")) == 0) {AFFPage(302);} 
02695             if(strcmp(txt, _("M303")) == 0) {AFFPage(303);} 
02696             if(strcmp(txt, _("M304")) == 0) {AFFPage(304);} 
02697             if(strcmp(txt, _("M305")) == 0) {AFFPage(305);} 
02698             if(strcmp(txt, _("M306")) == 0) {AFFPage(306);} 
02699             if(strcmp(txt, _("M307")) == 0) {AFFPage(307);}      
02700             
02701             if(strcmp(txt, _("M401")) == 0) {AFFPage(401);} 
02702             if(strcmp(txt, _("M402")) == 0) {AFFPage(402);} 
02703             if(strcmp(txt, _("M403")) == 0) {AFFPage(403);} 
02704             if(strcmp(txt, _("M404")) == 0) {AFFPage(404);} 
02705             if(strcmp(txt, _("M405")) == 0) {AFFPage(405);} 
02706             if(strcmp(txt, _("M406")) == 0) {AFFPage(406);} 
02707             if(strcmp(txt, _("M407")) == 0) {AFFPage(407);}      
02708             
02709             if(strcmp(txt, _("M501")) == 0) {AFFPage(501);} 
02710             if(strcmp(txt, _("M502")) == 0) {AFFPage(502);} 
02711             if(strcmp(txt, _("M503")) == 0) {AFFPage(503);} 
02712             if(strcmp(txt, _("M504")) == 0) {AFFPage(504);} 
02713             if(strcmp(txt, _("M505")) == 0) {AFFPage(505);} 
02714             if(strcmp(txt, _("M506")) == 0) {AFFPage(506);} 
02715             if(strcmp(txt, _("M507")) == 0) {AFFPage(507);}      
02716             
02717             if(strcmp(txt, _("M601")) == 0) {AFFPage(601);} 
02718             if(strcmp(txt, _("M602")) == 0) {AFFPage(602);} 
02719             if(strcmp(txt, _("M603")) == 0) {AFFPage(603);} 
02720             if(strcmp(txt, _("M604")) == 0) {AFFPage(604);} 
02721             if(strcmp(txt, _("M605")) == 0) {AFFPage(605);} 
02722             if(strcmp(txt, _("M606")) == 0) {AFFPage(606);} 
02723             if(strcmp(txt, _("M607")) == 0) {AFFPage(607);}      
02724             
02725             if(strcmp(txt, _("M701")) == 0) {AFFPage(701);} 
02726             if(strcmp(txt, _("M702")) == 0) {AFFPage(702);} 
02727             if(strcmp(txt, _("M703")) == 0) {AFFPage(703);} 
02728             if(strcmp(txt, _("M704")) == 0) {AFFPage(704);} 
02729             if(strcmp(txt, _("M705")) == 0) {AFFPage(705);} 
02730             if(strcmp(txt, _("M706")) == 0) {AFFPage(706);} 
02731             if(strcmp(txt, _("M707")) == 0) {AFFPage(707);} 
02732             
02733         }
02734     }
02735 }
02736 
02737 
02738 //********************
02739 // FONCTIONS GENERALES
02740 //********************
02741 void lv_ticker_func()
02742 {
02743     lv_tick_inc(5); //Call lv_tick_inc(x) every x milliseconds in a Timer or Task (x should be between 1 and 10). It is required for the internal timing of LittlevGL.
02744 }
02745 
02746 //FONCTION D'AFFICHAGE
02747 void my_disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p)
02748 {
02749     //The most simple case (but also the slowest) to put all pixels to the screen one-by-one
02750     uint16_t x, y;
02751     for(y = area->y1; y <= area->y2; y++) {
02752         for(x = area->x1; x <= area->x2; x++) {
02753 
02754             lcd.DrawPixel( x, y, color_p->full);
02755             color_p++;
02756         }
02757     }
02758 
02759     // IMPORTANT!!!
02760     // Inform the graphics library that you are ready with the flushing
02761     lv_disp_flush_ready(disp_drv);
02762 }
02763 
02764 //FONCTION RECUPERATION COORDONNEES APPUI
02765 bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)
02766 {
02767     static lv_coord_t last_x = 0;
02768     static lv_coord_t last_y = 0;
02769 
02770     //Save the state and save the pressed coordinate
02771     ts.GetState(&TS_State);
02772 
02773     if(TS_State.touchDetected == 1) {
02774         data->state = LV_INDEV_STATE_PR;
02775     } else {
02776         data->state = LV_INDEV_STATE_REL;
02777     }
02778 
02779     //data->state = tttt ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
02780     //  if(data->state == LV_INDEV_STATE_PR){
02781     if(data->state == LV_INDEV_STATE_PR) {
02782         //touchpad_get_xy(&last_x, &last_y);
02783         last_x = TS_State.touchX[0];
02784         last_y = TS_State.touchY[0];
02785     }
02786 
02787     //Set the coordinates (if released use the last pressed coordinates)
02788     data->point.x = last_x;
02789     data->point.y = last_y;
02790 
02791     X = TS_State.touchDetected ;
02792 
02793 
02794 
02795     return false; //Return `false` because we are not buffering and no more data to read
02796 }
02797 
02798 //FONCTION CONVERSION STRING EN CHAINE DE CARACTERE
02799 static char *S(string S){
02800     char Ch[100];
02801     for (int i = 0; i < S.length(); i++) { Ch[i] = S[i];} 
02802     return Ch;    
02803 }
02804 // FONCTION CONVERSION DUREE EN SECONDE EN CHAINE DE CARACTERES hh:mm:ss
02805 static char *HHMMSS(int32_t Seconde){
02806         char Ch[8];
02807         char HH[2];
02808         char MM[2];
02809         char SS[2];
02810         int32_t h = (Seconde / 3600);
02811         int32_t m = ((Seconde - (h * 3600)) / 60);
02812         int32_t s = (Seconde - ((h * 3600) + (m * 60)));
02813         sprintf(HH, "%d",h );
02814         if (h<10){sprintf(HH, "0%d",h );}
02815         sprintf(MM, "%d",m );
02816         if (m<10){sprintf(MM, "0%d",m );}
02817         sprintf(SS, "%d",s );
02818         if (s<10){sprintf(SS, "0%d",s );}
02819         sprintf(Ch, "%s:%s:%s",HH,MM,SS );
02820         return Ch;    
02821         
02822 }
02823 
02824 /*****************************
02825 **********STYLES**************
02826 *****************************/
02827 static void StyleBPM(lv_obj_t * Obj){
02828     static lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
02829      
02830     lv_style_copy(&btn_rel, &lv_style_btn_rel);    
02831     btn_rel.text.font = &RB_lv_font_roboto_bold_18;   
02832     btn_rel.body.padding.top    = 10;
02833     btn_rel.body.padding.bottom = 10;       
02834     btn_rel.body.main_color     = LV_COLOR_MAKE(R3, G3, B3);
02835     btn_rel.body.grad_color     = LV_COLOR_MAKE(R4, G4, B4);
02836     btn_rel.body.border.color   = LV_COLOR_MAKE(R5, G5, B5);
02837     btn_rel.text.color          = LV_COLOR_MAKE(R6, G6, B6); 
02838  
02839     lv_style_copy(&btn_pr, &lv_style_btn_pr); 
02840     btn_pr.text.font = &RB_lv_font_roboto_bold_16;
02841     btn_pr.body.padding.top    = 10;
02842     btn_pr.body.padding.bottom = 10;        
02843     btn_pr.body.main_color = LV_COLOR_MAKE(R7, G7, B7);
02844     btn_pr.body.grad_color = LV_COLOR_MAKE(R8, G8, B8);
02845     btn_pr.body.border.color   = LV_COLOR_MAKE(R9, G9, B9);
02846     btn_pr.text.color          = LV_COLOR_MAKE(R10, G10, B10); 
02847 
02848     lv_style_copy(&btn_tgl_rel, &btn_rel);  
02849     btn_tgl_rel.text.font = &RB_lv_font_roboto_bold_16;
02850     btn_tgl_rel.body.padding.top    = 10;
02851     btn_tgl_rel.body.padding.bottom = 10;           
02852 
02853     lv_style_copy(&btn_tgl_pr, &btn_pr); 
02854     btn_tgl_pr.text.font = &RB_lv_font_roboto_bold_16;
02855     btn_tgl_pr.body.padding.top    = 10;
02856     btn_tgl_pr.body.padding.bottom = 10;        
02857 
02858     lv_style_copy(&btn_ina, &lv_style_btn_ina); 
02859     btn_ina.text.font = &RB_lv_font_roboto_bold_16;  
02860     btn_ina.body.padding.top    = 10;
02861     btn_ina.body.padding.bottom = 10;      
02862     btn_ina.body.main_color = LV_COLOR_MAKE(R11, G11, B11);
02863     btn_ina.body.grad_color = LV_COLOR_MAKE(R12, G12, B12);
02864     btn_ina.body.border.color = LV_COLOR_MAKE(R13, G13, B13);
02865     btn_ina.text.color          = LV_COLOR_MAKE(R14, G14, B14); 
02866    
02867     lv_btn_set_style(Obj, LV_BTN_STATE_REL, &btn_rel);
02868     lv_btn_set_style(Obj, LV_BTN_STATE_PR, &btn_pr);
02869     lv_btn_set_style(Obj, LV_BTN_STATE_TGL_REL, &btn_pr);
02870     lv_btn_set_style(Obj, LV_BTN_STATE_TGL_PR, &btn_tgl_pr);
02871     lv_btn_set_style(Obj, LV_BTN_STATE_INA, &btn_ina);    
02872 }
02873 
02874 static void StyleBPSM(lv_obj_t * Obj){
02875     
02876     static lv_style_t btn_rel, btn_pr, btn_tgl_rel, btn_tgl_pr, btn_ina;
02877       
02878     lv_style_copy(&btn_rel, &lv_style_btn_rel);    
02879     btn_rel.text.font = &RB_lv_font_roboto_16;   
02880     btn_rel.body.padding.top    = 10;
02881     btn_rel.body.padding.bottom = 10;       
02882     btn_rel.body.padding.left = 5;          
02883     btn_rel.body.padding.right = 50;   
02884     btn_rel.body.main_color     = LV_COLOR_MAKE(R3, G3, B3);
02885     btn_rel.body.grad_color     = LV_COLOR_MAKE(R4, G4, B4);
02886     btn_rel.body.border.color   = LV_COLOR_MAKE(R5, G5, B5);
02887     btn_rel.text.color          = LV_COLOR_MAKE(R6, G6, B6); 
02888  
02889     lv_style_copy(&btn_pr, &lv_style_btn_pr); 
02890     btn_pr.text.font = &RB_lv_font_roboto_16;
02891     btn_pr.body.padding.top    = 10;
02892     btn_pr.body.padding.bottom = 10;   
02893     btn_pr.body.padding.left = 5;          
02894     btn_pr.body.padding.right = 50;    
02895     btn_pr.body.main_color = LV_COLOR_MAKE(R7, G7, B7);
02896     btn_pr.body.grad_color = LV_COLOR_MAKE(R8, G8, B8);
02897     btn_pr.body.border.color   = LV_COLOR_MAKE(R9, G9, B9);
02898     btn_pr.text.color          = LV_COLOR_MAKE(R10, G10, B10); 
02899 
02900     lv_style_copy(&btn_tgl_rel, &btn_rel);  
02901     btn_tgl_rel.text.font = &RB_lv_font_roboto_16;
02902     btn_tgl_rel.body.padding.top    = 10;
02903     btn_tgl_rel.body.padding.bottom = 10; 
02904     btn_tgl_rel.body.padding.left = 5;          
02905     btn_tgl_rel.body.padding.right = 50;              
02906 
02907     lv_style_copy(&btn_tgl_pr, &btn_pr); 
02908     btn_tgl_pr.text.font = &RB_lv_font_roboto_16;
02909     btn_tgl_pr.body.padding.top    = 10;
02910     btn_tgl_pr.body.padding.bottom = 10;    
02911     btn_tgl_pr.body.padding.left = 5;          
02912     btn_tgl_pr.body.padding.right = 50;          
02913 
02914     lv_style_copy(&btn_ina, &lv_style_btn_ina); 
02915     btn_ina.text.font = &RB_lv_font_roboto_16;  
02916     btn_ina.body.padding.top    = 10;
02917     btn_ina.body.padding.bottom = 10;     
02918     btn_ina.body.padding.left = 5;          
02919     btn_ina.body.padding.right = 50;      
02920     btn_ina.body.main_color = LV_COLOR_MAKE(R11, G11, B11);
02921     btn_ina.body.grad_color = LV_COLOR_MAKE(R12, G12, B12);
02922     btn_ina.body.border.color = LV_COLOR_MAKE(R13, G13, B13);
02923     btn_ina.text.color          = LV_COLOR_MAKE(R14, G14, B14); 
02924     
02925     lv_list_set_style(Obj, LV_LIST_STYLE_BTN_REL, &btn_rel);
02926     lv_list_set_style(Obj, LV_LIST_STYLE_BTN_PR, &btn_pr);
02927     lv_list_set_style(Obj, LV_LIST_STYLE_BTN_TGL_REL, &btn_pr);
02928     lv_list_set_style(Obj, LV_LIST_STYLE_BTN_TGL_PR, &btn_tgl_pr);
02929     lv_list_set_style(Obj, LV_LIST_STYLE_BTN_INA, &btn_ina);
02930     
02931 }
02932 
02933 
02934 
02935