mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
Diff: main.cpp
- 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);