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
 | // Buzzer
 | ||||||
| #if HAS_BUZZER | #if HAS_BUZZER | ||||||
|   #if ENABLED(SPEAKER) |  | ||||||
|     #include "speaker.h" |  | ||||||
|     extern Speaker buzzer; |  | ||||||
|   #else |  | ||||||
|   #include "buzzer.h" |   #include "buzzer.h" | ||||||
|   extern Buzzer buzzer; |   extern Buzzer buzzer; | ||||||
|   #endif |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | |||||||
| @ -375,11 +375,7 @@ static millis_t stepper_inactive_time = (DEFAULT_STEPPER_DEACTIVE_TIME) * 1000UL | |||||||
| 
 | 
 | ||||||
| // Buzzer
 | // Buzzer
 | ||||||
| #if HAS_BUZZER | #if HAS_BUZZER | ||||||
|   #if ENABLED(SPEAKER) |  | ||||||
|     Speaker buzzer; |  | ||||||
|   #else |  | ||||||
|     Buzzer buzzer; |     Buzzer buzzer; | ||||||
|   #endif |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| static uint8_t target_extruder; | static uint8_t target_extruder; | ||||||
|  | |||||||
| @ -32,7 +32,6 @@ | |||||||
| /**
 | /**
 | ||||||
|  * @brief Tone structure |  * @brief Tone structure | ||||||
|  * @details Simple abstraction of a tone based on a duration and a frequency. |  * @details Simple abstraction of a tone based on a duration and a frequency. | ||||||
|  * |  | ||||||
|  */ |  */ | ||||||
| struct tone_t { | struct tone_t { | ||||||
|   uint16_t duration; |   uint16_t duration; | ||||||
| @ -116,14 +115,23 @@ class Buzzer { | |||||||
|      *          playing the tones in the queue. |      *          playing the tones in the queue. | ||||||
|      */ |      */ | ||||||
|     virtual void tick() { |     virtual void tick() { | ||||||
|  |       const millis_t now = millis(); | ||||||
|  | 
 | ||||||
|       if (!this->state.endtime) { |       if (!this->state.endtime) { | ||||||
|         if (this->buffer.isEmpty()) return; |         if (this->buffer.isEmpty()) return; | ||||||
| 
 | 
 | ||||||
|         this->state.tone = this->buffer.dequeue(); |         this->state.tone = this->buffer.dequeue(); | ||||||
|         this->state.endtime = millis() + this->state.tone.duration; |         this->state.endtime = now + this->state.tone.duration; | ||||||
|         if (this->state.tone.frequency > 0) this->on(); | 
 | ||||||
|  |         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