mbed-os github

Dependencies:   ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep

Fork of ARNSRS_testDFU by POTLESS

Revision:
61:c3391376ca21
Parent:
60:e2922f9e309c
--- a/main.cpp	Sat Jun 30 01:18:40 2018 +0000
+++ b/main.cpp	Thu Jul 05 08:47:11 2018 +0000
@@ -194,7 +194,20 @@
 
 void sleepDemande()
 {
+
+    OUTPUT("tentative effacage \r\n");
+    UTILS::EffacePage(2, 30, 1);
+    OUTPUT("effacage termine \r\n");
+
+    UTILS::Write(DFU_ADDR, 0xBABEFACE);
+    OUTPUT("ecriture babeface realisee\r\n");
+while(1);
+    wait(2);
+    //debug
+    
+    
     buzzer.beep(1000,0.1);
+    /*
     wait_ms(100);
     buzzer.beep(1000,0.1);
     wait_ms(100);
@@ -202,18 +215,25 @@
     wait_ms(100);
     buzzer.beep(1000,0.1);
     wait(1);
+    */
+    
+    OUTPUT("sleep demande\r\n");
     
     Commande_IHM = 1;
     IHM("<0 0 ;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;%d>\r\n", Commande_IHM);
     FLAG_DISPLAY = false;
     Commande_IHM = 0;
-    // mise à zero UART IHM pour éviter son redémarrage intempestif (le tx suffirait)
-    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_4);
-    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
+    wait(1);
+    OUTPUT("extinction ecran demande\r\n");
     
-    E5V = 0;
-    UTILS::EffacePage(2, 29, 1);
-    UTILS::Write(DFU_ADDR, 0xBABEFACE);
+    // mise à zero UART IHM pour éviter son redémarrage intempestif (le tx suffirait)
+    HAL_PWREx_EnablePullUpPullDownConfig() ;
+    OUTPUT("Enable pulldownconfig fait \r\n");
+    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_4);
+    OUTPUT("bit 4 pulldown fait \r\n");
+    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
+    OUTPUT("bit 5 pulldown fait \r\n");
+    
     
     //Mise en veille
     HAL_PWREx_EnablePullUpPullDownConfig() ;
@@ -226,15 +246,15 @@
     // Set RTC back-up register RTC_BKP31R to indicate
     //later on that system has entered shutdown mode
     WRITE_REG( RTC->BKP31R, 0x1 );
-    
     //Enter shutdown mode
     HAL_PWREx_EnterSHUTDOWNMode();
+
 }
 
 
 // gestion du cas où le sleep est demandé volontairement 
 // et où l'utilisateur coupe ensuite l'alimentation en débranchant ou interrupteur sur off
-// on refait un shutdown mais avec un wake up sur le branchement du cable + interrupteur sur ON
+// on refait un shutdown mais avec un wake up HIGH sur le branchement du cable + interrupteur sur ON
 void flagSleep(){
     
     if ((int) UTILS::Read(DFU_ADDR) == 0xBABEFACE ) {
@@ -243,13 +263,17 @@
                 FLAG_DISPLAY = false;
                 Commande_IHM = 0;
                 
+            // on tire vers le bas le RX / TX de l'écran pour ne pas qu'il redémarre    
             HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_4);
             HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
-            buzzer.beep(1000,0.1);
-            wait_ms(100);
-            buzzer.beep(1000,0.1);
-            wait(1);
+            
+            //debug
+            while(1);
+        
+        // on efface le BABEFACE
         UTILS::EffacePage(2, 29, 1);
+        
+        // on reconfigure le wake up sur HIGH pour un redémarrage normal en rebranchant le cable
         HAL_PWREx_EnablePullUpPullDownConfig() ;
         HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A, PWR_GPIO_BIT_0);
         HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); // pour PA_0
@@ -262,7 +286,7 @@
         WRITE_REG( RTC->BKP31R, 0x1 );
     
         //Enter shutdown mode
-        E3V = 0;
+        E3V=0;
         //HAL_PWREx_EnterSHUTDOWNMode();
         }
         
@@ -271,12 +295,9 @@
 void USB_unplugged()
 {
     DEBUG("  La prise USB a été débranchée.\n");
-    
-    buzzer.beep(1000,0.3);
-    wait_ms(500);
-    buzzer.beep(1000,0.3);
-    wait(1);
-    
+       
+    //buzzer.beep(1000,0.3); // ce beep semble etrangement long
+
     //Arrêt des enregistrements
     FLAG_REC = false;
 
@@ -304,7 +325,7 @@
     HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_5);
       
     //Mise en veille version cable arraché
-    DEBUG("  Mise en veille...\r\n");
+    DEBUG("  Mise en veille, suite coupure alimentation...\r\n");
     //wait(1);
         //Mise en veille
     HAL_PWREx_EnablePullUpPullDownConfig() ;
@@ -317,20 +338,19 @@
     // Set RTC back-up register RTC_BKP31R to indicate
     //later on that system has entered shutdown mode
     WRITE_REG( RTC->BKP31R, 0x1 );
-    
     //Enter shutdown mode
     HAL_PWREx_EnterSHUTDOWNMode();
 }
 
-void PILES_unpluged()
+void PILES_unplugged()
 {
     DEBUG("  Les piles ont été débranchées.\n");
-    
+    E5V=1;
     buzzer.beep(1000,0.3);
     wait_ms(500);
     buzzer.beep(1000,0.3);
     wait(1);
-    
+    E5V=0;
     //Arrêt des enregistrements
     FLAG_REC = false;
 
@@ -356,7 +376,19 @@
     //Mise en veille
     DEBUG("  Mise en veille...\r\n");
     //wait(1);
-    sleepDemande();
+        //Mise en veille
+    HAL_PWREx_EnablePullUpPullDownConfig() ;
+    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A, PWR_GPIO_BIT_0);
+    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); // pour PA_0
+    // Clear wake up Flag
+    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
+    // Enable wakeup pin WKUP2
+    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // high est la valeur par défaut
+    // Set RTC back-up register RTC_BKP31R to indicate
+    //later on that system has entered shutdown mode
+    WRITE_REG( RTC->BKP31R, 0x1 );
+    //Enter shutdown mode
+    HAL_PWREx_EnterSHUTDOWNMode();
 }
 
 void Affichage()
@@ -400,12 +432,13 @@
     Volets_Speed = 1;
     Volet_DeadBand = 10;
 
-
+    //todo a decommenter
+    /*
     while(1) {
         wait_ms(100);
         if (Servo_Poumon.Pos_OK() == true && Servo_Fuite.Pos_OK() == true) break;
     }
-
+    */
 
     OUTPUT("  Appareil en mode SECU\r\n");
 
@@ -426,6 +459,9 @@
     DEBUG("  position volet fuite sauvegardée = %d pulse(s)\r\n", Pos_F);
     OUTPUT("  Volet fuite en sécu\r\n");
     */
+    
+    /*
+    TODO à remettre si servo présents
     UTILS::EffacePage(2, 31, 1);
     //Enregistrement position des servos en sécu pour plus de précision
     uint64_t Pos_P = Servo_Poumon.getPulses();
@@ -437,9 +473,10 @@
     UTILS::Write(VOLET_FUITE_ADDR, Pos_F);
     DEBUG("  position volet fuite sauvegardée = %d pulse(s)\r\n",(int) Pos_F);
     OUTPUT("  Volet fuite en sécu\r\n");
-
+    
     Servo_Poumon.Sleep();
     Servo_Fuite.Sleep();
+    */
 }
 
 //Sequence d'arrêt
@@ -448,8 +485,10 @@
     OUTPUT("  Mise en veille de l'appareil.\r\n");
 
     wait(1);
-
+    
     Mode_SECU();
+    
+    OUTPUT("  retour Mise en veille de l'appareil.\r\n");
 
     wait(1);
 
@@ -898,7 +937,8 @@
 
     bool calib_O2 = false;
     bool calib_CO2 = false;
-
+    
+    //todo à remettre si tête capteur présente
     //sensors.Sensors_INIT(calib_O2, calib_CO2);
 
     wait(1);
@@ -968,7 +1008,7 @@
     
     vusb_off_on.fall(&USB_unplugged);
     
-    vpiles_off_on.fall(&PILES_unpluged);
+    vpiles_off_on.fall(&PILES_unplugged);
 
     buzzer.beep(1000,0.3);
     wait_ms(500);