Consolidates Buzzer and Speaker into a single object
This commit is contained in:
		
							parent
							
								
									8093c5f534
								
							
						
					
					
						commit
						2b5faa61e2
					
				| @ -386,13 +386,8 @@ void calculate_volumetric_multipliers(); | ||||
| 
 | ||||
| // Buzzer
 | ||||
| #if HAS_BUZZER | ||||
|   #if ENABLED(SPEAKER) | ||||
|     #include "speaker.h" | ||||
|     extern Speaker buzzer; | ||||
|   #else | ||||
|   #include "buzzer.h" | ||||
|   extern Buzzer buzzer; | ||||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -375,11 +375,7 @@ static millis_t stepper_inactive_time = (DEFAULT_STEPPER_DEACTIVE_TIME) * 1000UL | ||||
| 
 | ||||
| // Buzzer
 | ||||
| #if HAS_BUZZER | ||||
|   #if ENABLED(SPEAKER) | ||||
|     Speaker buzzer; | ||||
|   #else | ||||
|     Buzzer buzzer; | ||||
|   #endif | ||||
| #endif | ||||
| 
 | ||||
| static uint8_t target_extruder; | ||||
|  | ||||
| @ -32,7 +32,6 @@ | ||||
| /**
 | ||||
|  * @brief Tone structure | ||||
|  * @details Simple abstraction of a tone based on a duration and a frequency. | ||||
|  * | ||||
|  */ | ||||
| struct tone_t { | ||||
|   uint16_t duration; | ||||
| @ -116,14 +115,23 @@ class Buzzer { | ||||
|      *          playing the tones in the queue. | ||||
|      */ | ||||
|     virtual void tick() { | ||||
|       const millis_t now = millis(); | ||||
| 
 | ||||
|       if (!this->state.endtime) { | ||||
|         if (this->buffer.isEmpty()) return; | ||||
| 
 | ||||
|         this->state.tone = this->buffer.dequeue(); | ||||
|         this->state.endtime = millis() + this->state.tone.duration; | ||||
|         if (this->state.tone.frequency > 0) this->on(); | ||||
|         this->state.endtime = now + this->state.tone.duration; | ||||
| 
 | ||||
|         if (this->state.tone.frequency > 0) { | ||||
|           #if ENABLED(SPEAKER) | ||||
|             ::tone(BEEPER_PIN, this->state.tone.frequency, this->state.tone.duration); | ||||
|           #else | ||||
|             this->on(); | ||||
|           #endif | ||||
|         } | ||||
|       else if (ELAPSED(millis(), this->state.endtime)) this->reset(); | ||||
|       } | ||||
|       else if (ELAPSED(now, this->state.endtime)) this->reset(); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -1,74 +0,0 @@ | ||||
| /**
 | ||||
|  * Marlin 3D Printer Firmware | ||||
|  * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 | ||||
|  * | ||||
|  * Based on Sprinter and grbl. | ||||
|  * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __SPEAKER_H__ | ||||
| #define __SPEAKER_H__ | ||||
| 
 | ||||
| #include "buzzer.h" | ||||
| 
 | ||||
| class Speaker: public Buzzer { | ||||
|   private: | ||||
|     typedef Buzzer super; | ||||
| 
 | ||||
|     struct state_t { | ||||
|       tone_t   tone; | ||||
|       millis_t next; | ||||
|     } state; | ||||
| 
 | ||||
|   protected: | ||||
|     /**
 | ||||
|      * @brief Resets the state of the class | ||||
|      * @details Brings the class state to a known one. | ||||
|      */ | ||||
|     void reset() { | ||||
|       super::reset(); | ||||
|       this->state.next = 0; | ||||
|     } | ||||
| 
 | ||||
|   public: | ||||
|     /**
 | ||||
|      * @brief Class constructor | ||||
|      */ | ||||
|     Speaker() { | ||||
|       this->reset(); | ||||
|     } | ||||
| 
 | ||||
|     /**
 | ||||
|      * @brief Loop function | ||||
|      * @details This function should be called at loop, it will take care of | ||||
|      * playing the tones in the queue. | ||||
|      */ | ||||
|     virtual void tick() { | ||||
|       const uint32_t now = millis(); | ||||
| 
 | ||||
|       if (now >= this->state.next) { | ||||
|         if (this->buffer.isEmpty()) return; | ||||
| 
 | ||||
|         this->reset(); | ||||
|         this->state.tone = this->buffer.dequeue(); | ||||
|         this->state.next = now + this->state.tone.duration; | ||||
|         ::tone(BEEPER_PIN, this->state.tone.frequency, this->state.tone.duration); | ||||
|       } | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user