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:
Alfredo Orozco 2023-07-24 22:30:59 -06:00
parent f62fad2b7b
commit c10242c09d
4 changed files with 69 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View 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