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:
60:e2922f9e309c
Parent:
59:fd64ca9dae27
Child:
61:c3391376ca21
Child:
62:891379d80b1b
diff -r fd64ca9dae27 -r e2922f9e309c main.cpp
--- a/main.cpp	Fri Jun 29 15:50:15 2018 +0000
+++ b/main.cpp	Sat Jun 30 01:18:40 2018 +0000
@@ -192,59 +192,83 @@
 Thread thread_Volets_POUMON(osPriorityLow);
 Thread thread_Volets_FUITE(osPriorityLow);
 
-void Au_Dodo()
+void sleepDemande()
 {
+    buzzer.beep(1000,0.1);
+    wait_ms(100);
+    buzzer.beep(1000,0.1);
+    wait_ms(100);
+    buzzer.beep(1000,0.1);
+    wait_ms(100);
+    buzzer.beep(1000,0.1);
+    wait(1);
+    
+    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);
     
     E5V = 0;
-    //E3V = 0;
-        
-    /*
-    //Mise en veille
-    HAL_PWREx_EnablePullUpPullDownConfig() ;
-    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_A, PWR_GPIO_BIT_0);
-
-    HAL_PWREx_EnableGPIOPullDown(PWR_GPIO_C, PWR_GPIO_BIT_13);
-    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2); // pour PC_13 est le WKUP2_0 (présence PILES) ;
-
-    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); // pour PA_0 (présence USB)
-    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2); // pour PC_13 est le WKUP2_0 (présence PILES) ;
-
-    // Clear wake up Flag
-    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF1);
-    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2);
-
-    if (flag_USB) {
-        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW);
-        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_HIGH);
-    }
-    if (flag_Piles) {
-        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);
-        HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_LOW);
-    }
-
-    // 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();
-    */
+    UTILS::EffacePage(2, 29, 1);
+    UTILS::Write(DFU_ADDR, 0xBABEFACE);
     
     //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
+    HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1_LOW); // 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
+    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW); // 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 USB_unpluged()
+
+// 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
+void flagSleep(){
+    
+    if ((int) UTILS::Read(DFU_ADDR) == 0xBABEFACE ) {
+                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;
+                
+            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);
+        UTILS::EffacePage(2, 29, 1);
+        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
+        E3V = 0;
+        //HAL_PWREx_EnterSHUTDOWNMode();
+        }
+        
+    }
+
+void USB_unplugged()
 {
     DEBUG("  La prise USB a été débranchée.\n");
     
@@ -274,11 +298,28 @@
     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);
       
-    //Mise en veille
+    //Mise en veille version cable arraché
     DEBUG("  Mise en veille...\r\n");
     //wait(1);
-    Au_Dodo();
+        //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 PILES_unpluged()
@@ -315,7 +356,7 @@
     //Mise en veille
     DEBUG("  Mise en veille...\r\n");
     //wait(1);
-    Au_Dodo();
+    sleepDemande();
 }
 
 void Affichage()
@@ -419,7 +460,7 @@
 
     wait(1);
 
-    Au_Dodo();
+    sleepDemande();
 }
 
 //Fonction test de valeur d'entrée digitale
@@ -818,6 +859,7 @@
     HAL_PWR_EnableBkUpAccess();
 
     UTILS::DFU();
+    flagSleep(); // on vérifie si la demande de sleep n'est pas active (permet de redémarrer sur un front haut)
     
     E5V = 1;
     E3V = 1;
@@ -857,7 +899,7 @@
     bool calib_O2 = false;
     bool calib_CO2 = false;
 
-    sensors.Sensors_INIT(calib_O2, calib_CO2);
+    //sensors.Sensors_INIT(calib_O2, calib_CO2);
 
     wait(1);
 
@@ -885,7 +927,7 @@
     DEBUG("  Contrôle des paramètres de sécu démarré\r\n\r\n");
 
     wait(1);
-
+    
     thread_Head.start(callback(SENSORS_thread));
 
     DEBUG("  Tête capteurs démarrée\r\n\r\n");
@@ -924,7 +966,7 @@
     
     OTU_Ticker.attach(&Calcul_OTU, 60);
     
-    vusb_off_on.fall(&USB_unpluged);
+    vusb_off_on.fall(&USB_unplugged);
     
     vpiles_off_on.fall(&PILES_unpluged);