Files
simple-pos-system/PLANS AND STRATEGIES/PRINTER_BEEP_STRATEGY.md

3.1 KiB
Raw Permalink Blame History

Printer Beep Strategy

How beeping works on the Jolimark TP850UE

The printer has a built-in buzzer. Three commands are available:

Command Bytes Parameters Notes
BEL 0x07 none Single short beep, ~50ms. Simplest.
ESC BEL n1 n2 n3 0x1B 0x07 n1 n2 n3 n1=on-time (×100ms), n2=off-time (×100ms), n3=count Full control over length, gap, repetitions.
GS BEL n1 n2 n3 0x1D 0x07 n1 n2 n3 n1=count, n2=on-time (×100ms), n3=off-time (×100ms) Same as ESC BEL but parameter order differs.

Confirmed working on our test: ESC BEL with n1=2, n2=2, n3=1 = one 200ms beep. Pattern beeps also work: ESC BEL 1 1 3 = three short beeps in quick succession.

The beep is triggered by sending these bytes immediately before or after the print job — it does not need to be part of a complete print page. You can send a beep-only job (connect, send beep bytes, close) without printing anything.


Where to add beeps in the system

1. New kitchen ticket arrives (MOST IMPORTANT)

Where: printer_service.py_print_kitchen_ticket(), just before or after the cut command. Pattern: 2 short beeps — signals a new order without being annoying.

p._raw(bytes([0x1b, 0x07, 1, 1, 2]))  # 2× 100ms beeps
p.cut()

2. Re-print of an existing ticket

Where: Same function, but only 1 beep to distinguish from a new order.

p._raw(bytes([0x1b, 0x07, 1, 2, 1]))  # 1× 100ms beep

3. Urgent / rush order (future feature)

Where: If we add an "urgent" flag to orders, trigger a longer or triple beep.

p._raw(bytes([0x1b, 0x07, 3, 1, 3]))  # 3× 300ms beeps

4. Test print

Where: send_test_print() — already sends a test page, add 1 beep so the cook knows to look at the printer.


Implementation plan (when ready)

  1. Add a per-printer setting: print.beep_on_ticket = true/false (some stations may not want beeping, e.g. a bar printer near customers)

  2. Add a beep pattern setting: print.beep_pattern = single / double / triple

  3. In _print_kitchen_ticket: After building the ticket, before p.cut():

    if beep_enabled:
        p._raw(beep_bytes_for_pattern)
    
  4. No separate beep job needed — bake it into the ticket job. The buzzer fires as the paper is cutting, which is the natural attention signal.


Settings keys to add (future)

print.beep_on_ticket    "true" / "false"    default: "true"
print.beep_pattern      "single" / "double" / "triple"    default: "double"

These can go in the Printer management UI (per-printer toggle) and in the Print Settings tab (global default pattern).


Notes

  • Beep bytes are sent over the same TCP socket as print data — no separate connection needed.
  • The buzzer is hardware-limited; very short intervals (< 50ms) may be ignored.
  • Beeping does NOT require paper to be loaded or printing to succeed — it fires independently.
  • If spoof-printing mode is ON, the beep should also be suppressed (no real connection is made).