mirror of
				https://github.com/python-escpos/python-escpos
				synced 2025-10-23 09:30:00 +00:00 
			
		
		
		
	ture(escpos) Add buzzer function
- Add `buzzer(time, duration)` function to control the buzzer on supported printers. - Add unit tests for buzzer function.
This commit is contained in:
		
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ akeonly | |||||||
| Alejandro Hernández | Alejandro Hernández | ||||||
| Alex Debiasio | Alex Debiasio | ||||||
| Alexander Bougakov | Alexander Bougakov | ||||||
|  | Alfredo Orozco | ||||||
| Asuki Kono | Asuki Kono | ||||||
| B. Howell | B. Howell | ||||||
| belono | belono | ||||||
|   | |||||||
| @@ -63,6 +63,9 @@ PAPER_PART_CUT = _CUT_PAPER(b"\x01")  #: Partial cut paper | |||||||
| # Beep (please note that the actual beep sequence may differ between devices) | # Beep (please note that the actual beep sequence may differ between devices) | ||||||
| BEEP = b"\x07" | BEEP = b"\x07" | ||||||
|  |  | ||||||
|  | # Internal buzzer (only supported printers) | ||||||
|  | BUZZER = ESC + b"\x42" | ||||||
|  |  | ||||||
| # Panel buttons (e.g. the FEED button) | # Panel buttons (e.g. the FEED button) | ||||||
| _PANEL_BUTTON = lambda n: ESC + b"c5" + six.int2byte(n) | _PANEL_BUTTON = lambda n: ESC + b"c5" + six.int2byte(n) | ||||||
| PANEL_BUTTON_ON = _PANEL_BUTTON(0)  # enable all panel buttons | PANEL_BUTTON_ON = _PANEL_BUTTON(0)  # enable all panel buttons | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ from .constants import ( | |||||||
|     CD_KICK_2, |     CD_KICK_2, | ||||||
|     PAPER_FULL_CUT, |     PAPER_FULL_CUT, | ||||||
|     PAPER_PART_CUT, |     PAPER_PART_CUT, | ||||||
|  |     BUZZER, | ||||||
| ) | ) | ||||||
| from .constants import HW_RESET, HW_SELECT, HW_INIT | from .constants import HW_RESET, HW_SELECT, HW_INIT | ||||||
| from .constants import ( | from .constants import ( | ||||||
| @@ -1243,6 +1244,24 @@ class Escpos(object): | |||||||
|         """ |         """ | ||||||
|         self._raw(SLIP_SELECT) |         self._raw(SLIP_SELECT) | ||||||
|  |  | ||||||
|  |     def buzzer(self, times=2, duration=4): | ||||||
|  |         """Activate the internal printer buzzer (only supported printers). | ||||||
|  |  | ||||||
|  |         The 'times' paramreffers to the 'n' escpos command parameter, means how many | ||||||
|  |         times the buzzer will be 'beeped'. | ||||||
|  |  | ||||||
|  |         :param times: Integer between 1 and 9, indicates the buzzer beeps. | ||||||
|  |         :param duration: Integer between 1 and 9, indicates the beep duration. | ||||||
|  |         :returns: None | ||||||
|  |         """ | ||||||
|  |  | ||||||
|  |         if not 1 <= times <= 9: | ||||||
|  |             raise ValueError("times must be between 1 and 9") | ||||||
|  |         if not 1 <= duration <= 9: | ||||||
|  |             raise ValueError("duration must be between 1 and 9") | ||||||
|  |  | ||||||
|  |         self._raw(BUZZER + six.int2byte(times) + six.int2byte(duration)) | ||||||
|  |  | ||||||
|  |  | ||||||
| class EscposIO(object): | class EscposIO(object): | ||||||
|     """ESC/POS Printer IO object |     """ESC/POS Printer IO object | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								test/test_function_buzzer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								test/test_function_buzzer.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | import six | ||||||
|  | import pytest | ||||||
|  |  | ||||||
|  | from escpos import printer | ||||||
|  | from escpos.constants import BUZZER | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_buzzer_function_with_default_params(): | ||||||
|  |     instance = printer.Dummy() | ||||||
|  |     instance.buzzer() | ||||||
|  |     expected = BUZZER + six.int2byte(2) + six.int2byte(4) | ||||||
|  |     assert instance.output == expected | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.parametrize( | ||||||
|  |     "times, duration", | ||||||
|  |     [ | ||||||
|  |         [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], | ||||||
|  |     ] | ||||||
|  | ) | ||||||
|  | def test_buzzer_function(times, duration): | ||||||
|  |     instance = printer.Dummy() | ||||||
|  |     instance.buzzer(times, duration) | ||||||
|  |     expected = BUZZER + six.int2byte(times) + six.int2byte(duration) | ||||||
|  |     assert instance.output == expected | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.parametrize( | ||||||
|  |     "times, duration, expected_message", | ||||||
|  |     [ | ||||||
|  |         [0, 0, "times must be between 1 and 9"], | ||||||
|  |         [-1, 0, "times must be between 1 and 9"], | ||||||
|  |         [10, 0, "times must be between 1 and 9"], | ||||||
|  |         [11, 0, "times must be between 1 and 9"], | ||||||
|  |         [3, 0, "duration must be between 1 and 9"], | ||||||
|  |         [3, -1, "duration must be between 1 and 9"], | ||||||
|  |         [3, 10, "duration must be between 1 and 9"], | ||||||
|  |         [3, 11, "duration must be between 1 and 9"], | ||||||
|  |     ] | ||||||
|  | ) | ||||||
|  | def test_buzzer_fuction_with_outrange_values(times, duration, expected_message): | ||||||
|  |     instance = printer.Dummy() | ||||||
|  |     with pytest.raises(ValueError) as e: | ||||||
|  |         instance.buzzer(times, duration) | ||||||
|  |  | ||||||
|  |     assert str(e.value) == expected_message | ||||||
		Reference in New Issue
	
	Block a user
	 Alfredo Orozco
					Alfredo Orozco