# SPDX-FileCopyrightText: 2024-2026 Nicolai Buchwitz <nb@tipi-net.de>
#
# SPDX-License-Identifier: LGPL-2.1-or-later
"""Concrete printer implementations for Brother P-touch label printers."""
from .printer import LabelPrinter, TapeConfig
from .tape import (
HeatShrinkTube3_1_5_2mm,
HeatShrinkTube3_1_9_0mm,
HeatShrinkTube3_1_11_2mm,
HeatShrinkTube3_1_21_0mm,
HeatShrinkTube3_1_31_0mm,
HeatShrinkTube5_8mm,
HeatShrinkTube8_8mm,
HeatShrinkTube11_7mm,
HeatShrinkTube17_7mm,
HeatShrinkTube23_6mm,
Tape3_5mm,
Tape6mm,
Tape9mm,
Tape12mm,
Tape18mm,
Tape24mm,
Tape36mm,
)
[docs]
class PTE550W(LabelPrinter):
"""Brother PT-E550W label printer (128 pins, 180 DPI).
Note: E550W requires compression ON for cutting to work.
High resolution mode (180x360 dpi) is supported via ESC i K bit 6.
In high-res mode, each raster line must be sent twice and margin doubled.
"""
USB_PRODUCT_ID = 0x2060
TOTAL_PINS = 128
BYTES_PER_LINE = 16
RESOLUTION_DPI = 180
RESOLUTION_DPI_HIGH = 360
DEFAULT_USE_COMPRESSION = True # Required for cutting to work
# Pin configurations from official Brother PT-E550W specification document
# Source: cv_pte550wp750wp710bt_eng_raster_102.pdf, page 20, section "2.3 Print Area"
PIN_CONFIGS = {
# Laminated tapes (TZe series)
Tape3_5mm: TapeConfig(left_pins=52, print_pins=24, right_pins=52),
Tape6mm: TapeConfig(left_pins=48, print_pins=32, right_pins=48),
Tape9mm: TapeConfig(left_pins=39, print_pins=50, right_pins=39),
Tape12mm: TapeConfig(left_pins=29, print_pins=70, right_pins=29),
Tape18mm: TapeConfig(left_pins=8, print_pins=112, right_pins=8),
Tape24mm: TapeConfig(left_pins=0, print_pins=128, right_pins=0),
# Heat shrink tubes 2:1 series (HSe)
# Corrected configs: shifted -2 pins (up) based on testing
HeatShrinkTube5_8mm: TapeConfig(left_pins=52, print_pins=28, right_pins=48),
HeatShrinkTube8_8mm: TapeConfig(left_pins=42, print_pins=48, right_pins=38),
HeatShrinkTube11_7mm: TapeConfig(left_pins=33, print_pins=66, right_pins=29),
HeatShrinkTube17_7mm: TapeConfig(left_pins=13, print_pins=106, right_pins=9),
HeatShrinkTube23_6mm: TapeConfig(left_pins=0, print_pins=128, right_pins=0),
# Heat shrink tubes 3:1 series (HSe)
HeatShrinkTube3_1_5_2mm: TapeConfig(left_pins=56, print_pins=20, right_pins=52),
HeatShrinkTube3_1_9_0mm: TapeConfig(left_pins=44, print_pins=44, right_pins=40),
HeatShrinkTube3_1_11_2mm: TapeConfig(left_pins=41, print_pins=50, right_pins=37),
HeatShrinkTube3_1_21_0mm: TapeConfig(left_pins=6, print_pins=120, right_pins=2),
# Note: PT-E550W/P750W do NOT support 31.0mm 3:1 tubes
}
[docs]
class PTP750W(PTE550W):
"""Brother PT-P750W label printer (128 pins, 180 DPI).
Inherits all settings from PTE550W.
"""
USB_PRODUCT_ID = 0x2065
[docs]
class PTP710BT(PTE550W):
"""Brother PT-P710BT label printer (128 pins, 180 DPI, Bluetooth/USB).
Same raster protocol as PT-E550W / PT-P750W (covered by the same
Brother spec document: cv_pte550wp750wp710bt_eng_raster_102.pdf).
Note: PT-P710BT supports only laminated TZe tapes — no heat shrink
tubes (HSe series) and no 36 mm tape (the 128-pin head caps at 24 mm).
"""
USB_PRODUCT_ID = 0x20AF
# PT-P710BT does not support half-cut (basic consumer model — half-cut
# is a feature of the higher-end PT-E / PT-P series). The firmware
# silently ignores the half-cut bit, so default to full cuts.
SUPPORTS_HALF_CUT = False
DEFAULT_HALF_CUT = False
# PT-P710BT only supports laminated TZe tapes (3.5 / 6 / 9 / 12 / 18 / 24 mm).
PIN_CONFIGS = {
Tape3_5mm: TapeConfig(left_pins=52, print_pins=24, right_pins=52),
Tape6mm: TapeConfig(left_pins=48, print_pins=32, right_pins=48),
Tape9mm: TapeConfig(left_pins=39, print_pins=50, right_pins=39),
Tape12mm: TapeConfig(left_pins=29, print_pins=70, right_pins=29),
Tape18mm: TapeConfig(left_pins=8, print_pins=112, right_pins=8),
Tape24mm: TapeConfig(left_pins=0, print_pins=128, right_pins=0),
}
[docs]
class PTP900Series(LabelPrinter):
"""Base class for Brother PT-P900 series printers (560 pins, 360 DPI).
This is the base class for all P900 series printers. Use one of the
specific subclasses (PTP900, PTP900W, PTP950NW, PTP910BT) instead.
"""
TOTAL_PINS = 560
BYTES_PER_LINE = 70
RESOLUTION_DPI = 360
RESOLUTION_DPI_HIGH = 720
DEFAULT_USE_COMPRESSION = False
# Pin configurations from official Brother PT-P900 specification document
# Source: cv_ptp900_eng_raster_102.pdf, pages 23-24, section 2.3.5 "Raster line"
PIN_CONFIGS = {
# Laminated tapes (TZe series)
Tape3_5mm: TapeConfig(left_pins=248, print_pins=48, right_pins=264),
Tape6mm: TapeConfig(left_pins=240, print_pins=64, right_pins=256),
Tape9mm: TapeConfig(left_pins=219, print_pins=106, right_pins=235),
Tape12mm: TapeConfig(left_pins=197, print_pins=150, right_pins=213),
Tape18mm: TapeConfig(left_pins=155, print_pins=234, right_pins=171),
Tape24mm: TapeConfig(left_pins=112, print_pins=320, right_pins=128),
Tape36mm: TapeConfig(left_pins=45, print_pins=454, right_pins=61),
# Heat shrink tubes 2:1 series (HSe)
# Corrected configs: shifted +17 pins down based on Brother software analysis
HeatShrinkTube5_8mm: TapeConfig(left_pins=261, print_pins=56, right_pins=243),
HeatShrinkTube8_8mm: TapeConfig(left_pins=241, print_pins=96, right_pins=223),
HeatShrinkTube11_7mm: TapeConfig(left_pins=223, print_pins=132, right_pins=205),
HeatShrinkTube17_7mm: TapeConfig(left_pins=183, print_pins=212, right_pins=165),
HeatShrinkTube23_6mm: TapeConfig(left_pins=161, print_pins=256, right_pins=143),
# Heat shrink tubes 3:1 series (HSe)
HeatShrinkTube3_1_5_2mm: TapeConfig(left_pins=269, print_pins=40, right_pins=251),
HeatShrinkTube3_1_9_0mm: TapeConfig(left_pins=245, print_pins=88, right_pins=227),
HeatShrinkTube3_1_11_2mm: TapeConfig(left_pins=239, print_pins=100, right_pins=221),
HeatShrinkTube3_1_21_0mm: TapeConfig(left_pins=169, print_pins=240, right_pins=151),
HeatShrinkTube3_1_31_0mm: TapeConfig(left_pins=109, print_pins=360, right_pins=91),
}
[docs]
class PTP900(PTP900Series):
"""Brother PT-P900 label printer (USB only, no wireless)."""
USB_PRODUCT_ID = 0x2083
[docs]
class PTP900W(PTP900Series):
"""Brother PT-P900W label printer (with Wi-Fi)."""
USB_PRODUCT_ID = 0x2085
[docs]
class PTP950NW(PTP900Series):
"""Brother PT-P950NW label printer (with network connectivity)."""
USB_PRODUCT_ID = 0x2086
[docs]
class PTP910BT(PTP900Series):
"""Brother PT-P910BT label printer (with Bluetooth).
Note: PT-P910BT does NOT support heat shrink tubes (HSe series).
"""
USB_PRODUCT_ID = 0x20C7
# PT-P910BT only supports laminated tapes, not heat shrink tubes
PIN_CONFIGS = {
Tape3_5mm: TapeConfig(left_pins=248, print_pins=48, right_pins=264),
Tape6mm: TapeConfig(left_pins=240, print_pins=64, right_pins=256),
Tape9mm: TapeConfig(left_pins=219, print_pins=106, right_pins=235),
Tape12mm: TapeConfig(left_pins=197, print_pins=150, right_pins=213),
Tape18mm: TapeConfig(left_pins=155, print_pins=234, right_pins=171),
Tape24mm: TapeConfig(left_pins=112, print_pins=320, right_pins=128),
Tape36mm: TapeConfig(left_pins=45, print_pins=454, right_pins=61),
}