mirror of
https://github.com/pdewacht/brlaser
synced 2025-07-20 07:39:47 +02:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
ff68db0f93 | |||
dbc897787e | |||
17a24ef7a1 | |||
779f71e80f | |||
7b4bf383bd | |||
aa5fb9e2f0 | |||
7e1cc6911e | |||
4414717ed4 | |||
41c56264a8 | |||
7ed0d6f2e8 | |||
4f2f1d606e | |||
de26cc4bf0 |
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.1)
|
cmake_minimum_required(VERSION 3.1)
|
||||||
project(brlaser CXX)
|
project(brlaser CXX)
|
||||||
set(BRLASER_VERSION "4")
|
set(BRLASER_VERSION "5")
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
message(STATUS "No build type selected, default to RelWithDebInfo")
|
message(STATUS "No build type selected, default to RelWithDebInfo")
|
||||||
@ -112,7 +112,7 @@ target_compile_options(rastertobrlaser PRIVATE ${CUPS_CFLAGS})
|
|||||||
target_link_libraries(rastertobrlaser ${CUPS_LIBS})
|
target_link_libraries(rastertobrlaser ${CUPS_LIBS})
|
||||||
target_link_libraries(rastertobrlaser ${CUPS_LDFLAGS})
|
target_link_libraries(rastertobrlaser ${CUPS_LDFLAGS})
|
||||||
|
|
||||||
add_executable(brdecode src/brdecode.cc)
|
add_executable(brdecode EXCLUDE_FROM_ALL src/brdecode.cc)
|
||||||
add_executable(test_lest test/test_lest.cc)
|
add_executable(test_lest test/test_lest.cc)
|
||||||
add_executable(test_line test/test_line.cc src/line.cc)
|
add_executable(test_line test/test_line.cc src/line.cc)
|
||||||
add_executable(test_block test/test_block.cc)
|
add_executable(test_block test/test_block.cc)
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
brlaser v5 (2019-05-18)
|
||||||
|
Fixed problems with Brother HL-series printers in 600 dpi mode. Thanks
|
||||||
|
to Onno Kortmann for the fix.
|
||||||
|
Added several printers.
|
||||||
|
|
||||||
brlaser v4 (2018-02-25)
|
brlaser v4 (2018-02-25)
|
||||||
Added several printers.
|
Added several printers.
|
||||||
Merged duplex printing support from @xc-racer99. Enabled for DCP-7065DN.
|
Merged duplex printing support from @xc-racer99. Enabled for DCP-7065DN.
|
||||||
|
20
README.md
20
README.md
@ -8,16 +8,32 @@ such as PCL or PostScript, not all do. If you have a monochrome
|
|||||||
Brother laser printer (or multi-function device) and the other open
|
Brother laser printer (or multi-function device) and the other open
|
||||||
source drivers don't work, this one might help.
|
source drivers don't work, this one might help.
|
||||||
|
|
||||||
This driver is known to work with these printers:
|
This driver has been reported to work with these printers:
|
||||||
|
|
||||||
* Brother DCP-1510
|
* Brother DCP-1510
|
||||||
|
* Brother DCP-1602
|
||||||
* Brother DCP-7030
|
* Brother DCP-7030
|
||||||
* Brother DCP-7040
|
* Brother DCP-7040
|
||||||
* Brother DCP-7055
|
* Brother DCP-7055
|
||||||
* Brother DCP-7055W
|
* Brother DCP-7055W
|
||||||
|
* Brother DCP-7060D
|
||||||
* Brother DCP-7065DN
|
* Brother DCP-7065DN
|
||||||
* Brother HL-L2300D
|
* Brother DCP-7080
|
||||||
|
* Brother DCP-L2500D
|
||||||
|
* Brother DCP-L2540DW
|
||||||
|
* Brother HL-1110 series
|
||||||
|
* Brother HL-1200 series
|
||||||
|
* Brother HL-L2300D series
|
||||||
|
* Brother HL-L2320D series
|
||||||
|
* Brother HL-L2340D series
|
||||||
|
* Brother HL-L2360D series
|
||||||
|
* Brother MFC-1910W
|
||||||
|
* Brother MFC-7240
|
||||||
* Brother MFC-7360N
|
* Brother MFC-7360N
|
||||||
|
* Brother MFC-7365DN
|
||||||
|
* Brother MFC-7840W
|
||||||
|
* Brother MFC-L2710DW
|
||||||
|
* Lenovo M7605D
|
||||||
|
|
||||||
|
|
||||||
Other printers
|
Other printers
|
||||||
|
121
brlaser.drv.in
121
brlaser.drv.in
@ -87,6 +87,13 @@ Option "brlaserEconomode/Toner save mode" Boolean AnySetup 10
|
|||||||
PCFileName "br1510.ppd"
|
PCFileName "br1510.ppd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-1600 series"
|
||||||
|
Attribute "NickName" "" "Brother DCP-1600 series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,XL2HB;MDL:DCP-1600 series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
PCFileName "br1600.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ModelName "DCP-7030"
|
ModelName "DCP-7030"
|
||||||
Attribute "NickName" "" "Brother DCP-7030, $USING"
|
Attribute "NickName" "" "Brother DCP-7030, $USING"
|
||||||
@ -119,6 +126,14 @@ Option "brlaserEconomode/Toner save mode" Boolean AnySetup 10
|
|||||||
PCFileName "br7055w.ppd"
|
PCFileName "br7055w.ppd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-7060D"
|
||||||
|
Attribute "NickName" "" "Brother DCP-7060D, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-7060D;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "br7060d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ModelName "DCP-7065DN"
|
ModelName "DCP-7065DN"
|
||||||
Attribute "NickName" "" "Brother DCP-7065DN, $USING"
|
Attribute "NickName" "" "Brother DCP-7065DN, $USING"
|
||||||
@ -127,17 +142,119 @@ Option "brlaserEconomode/Toner save mode" Boolean AnySetup 10
|
|||||||
PCFileName "br7065dn.ppd"
|
PCFileName "br7065dn.ppd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-7080"
|
||||||
|
Attribute "NickName" "" "Brother DCP-7080, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-7080;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
PCFileName "br7080.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-7080D"
|
||||||
|
Attribute "NickName" "" "Brother DCP-7080D, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-7080D;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "br7080d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-L2500D"
|
||||||
|
Attribute "NickName" "" "Brother DCP-L2500D series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-L2500D series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2500d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "DCP-L2540DW"
|
||||||
|
Attribute "NickName" "" "Brother DCP-L2540DW series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:DCP-L2540DW series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2540.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "HL-1110"
|
||||||
|
Attribute "NickName" "" "Brother HL-1110 series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:HL-1110 series;CLS:PRINTER;CID:Brother Laser Type3;"
|
||||||
|
Resolution k 1 0 0 0 "300dpi/300 DPI"
|
||||||
|
PCFileName "br1110.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "HL-1200"
|
||||||
|
Attribute "NickName" "" "Brother HL-1200 series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:HL-1200 series;CLS:PRINTER;CID:Brother Laser Type3;"
|
||||||
|
PCFileName "br1200.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ModelName "HL-L2300D"
|
ModelName "HL-L2300D"
|
||||||
Attribute "NickName" "" "Brother HL-L2300D, $USING"
|
Attribute "NickName" "" "Brother HL-L2300D series, $USING"
|
||||||
Attribute "1284DeviceID" "" " MFG:Brother;CMD:PJL,HBP;MDL:HL-L2300D series;CLS:PRINTER;CID:Brother Laser Type1;"
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:HL-L2300D series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
Duplex rotated
|
Duplex rotated
|
||||||
PCFileName "brl2300d.ppd"
|
PCFileName "brl2300d.ppd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "HL-L2320D"
|
||||||
|
Attribute "NickName" "" "Brother HL-L2320D series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:HL-L2320D series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2320d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "HL-L2340D"
|
||||||
|
Attribute "NickName" "" "Brother HL-L2340D series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP,URF;MDL:HL-L2340D series;CLS:PRINTER;CID:Brother Laser Type1;URF:W8,CP1,IS4-1,MT1-3-4-5-8,OB10,PQ4,RS300-600,V1.3,DM1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2340d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "HL-L2360D"
|
||||||
|
Attribute "NickName" "" "Brother HL-L2360D series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,PCL,PCLXL,URF;MDL:HL-L2360D series;CLS:PRINTER;CID:Brother Laser Type1;URF:W8,CP1,IS4-1,MT1-3-4-5-8,OB10,PQ4,RS300-600,V1.3,DM1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2360d.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "MFC-1910W"
|
||||||
|
Attribute "NickName" "" "Brother MFC-1910W, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;MFG:Brother;CMD:PJL,HBP;MDL:MFC-1910W series;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
PCFileName "br1910w.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "MFC-7240"
|
||||||
|
Attribute "NickName" "" "Brother MFC-7240, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;MFG:Brother;CMD:PJL,HBP;MDL:MFC-7240;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
PCFileName "br7240.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
ModelName "MFC-7360N"
|
ModelName "MFC-7360N"
|
||||||
Attribute "NickName" "" "Brother MFC-7360N, $USING"
|
Attribute "NickName" "" "Brother MFC-7360N, $USING"
|
||||||
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:MFC-7360N;CLS:PRINTER;CID:Brother Laser Type1;"
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:MFC-7360N;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
PCFileName "br7360n.ppd"
|
PCFileName "br7360n.ppd"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "MFC-7365DN"
|
||||||
|
Attribute "NickName" "" "Brother MFC-7365DN, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP;MDL:MFC-7365DN;CLS:PRINTER;CID:Brother Laser Type1;"
|
||||||
|
Resolution k 1 0 0 0 "300dpi/300 DPI"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "br7365dn.ppd"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ModelName "MFC-L2710DW series"
|
||||||
|
Attribute "NickName" "" "Brother MFC-L2710DW series, $USING"
|
||||||
|
Attribute "1284DeviceID" "" "MFG:Brother;CMD:PJL,HBP,URF;MDL:MFC-L2710DW series;CLS:PRINTER;CID:Brother Laser Type1;URF:W8,CP1,IS4-1,MT1-3-4-5-8,OB10,PQ3-4-5,RS300-600-1200,V1.4,DM1;"
|
||||||
|
Duplex rotated
|
||||||
|
PCFileName "brl2710.ppd"
|
||||||
|
}
|
||||||
|
@ -59,7 +59,7 @@ class block {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static const unsigned max_block_size_ = 16350;
|
static const unsigned max_block_size_ = 16350;
|
||||||
static const unsigned max_lines_per_block_ = 128;
|
static const unsigned max_lines_per_block_ = 64;
|
||||||
|
|
||||||
std::vector<std::vector<uint8_t>> lines_;
|
std::vector<std::vector<uint8_t>> lines_;
|
||||||
int line_bytes_;
|
int line_bytes_;
|
||||||
|
12
src/line.cc
12
src/line.cc
@ -145,10 +145,12 @@ vector<uint8_t> encode_line(const vector<uint8_t> &line,
|
|||||||
int num_edits = 0;
|
int num_edits = 0;
|
||||||
|
|
||||||
auto line_it = line.begin();
|
auto line_it = line.begin();
|
||||||
|
auto line_end_it =
|
||||||
|
std::mismatch(line.rbegin(), line.rend(), reference.rbegin()).first.base();
|
||||||
auto ref_it = reference.begin();
|
auto ref_it = reference.begin();
|
||||||
while (1) {
|
while (1) {
|
||||||
int offset = skip_to_next_mismatch(&line_it, line.end(), &ref_it);
|
int offset = skip_to_next_mismatch(&line_it, line_end_it, &ref_it);
|
||||||
if (line_it == line.end()) {
|
if (line_it == line_end_it) {
|
||||||
// No more differences, we're done.
|
// No more differences, we're done.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -156,17 +158,17 @@ vector<uint8_t> encode_line(const vector<uint8_t> &line,
|
|||||||
if (++num_edits == max_edits) {
|
if (++num_edits == max_edits) {
|
||||||
// We've run out of edits. Just output the rest of the line in a big
|
// We've run out of edits. Just output the rest of the line in a big
|
||||||
// substitute command.
|
// substitute command.
|
||||||
write_substitute(offset, line_it, line.end(), &output);
|
write_substitute(offset, line_it, line_end_it, &output);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int s = substitute_length(line_it, line.end(), ref_it);
|
int s = substitute_length(line_it, line_end_it, ref_it);
|
||||||
if (s > 0) {
|
if (s > 0) {
|
||||||
write_substitute(offset, line_it, std::next(line_it, s), &output);
|
write_substitute(offset, line_it, std::next(line_it, s), &output);
|
||||||
line_it += s;
|
line_it += s;
|
||||||
ref_it += s;
|
ref_it += s;
|
||||||
} else {
|
} else {
|
||||||
int r = repeat_length(line_it, line.end());
|
int r = repeat_length(line_it, line_end_it);
|
||||||
assert(r >= 2);
|
assert(r >= 2);
|
||||||
write_repeat(offset, r, *line_it, &output);
|
write_repeat(offset, r, *line_it, &output);
|
||||||
line_it += r;
|
line_it += r;
|
||||||
|
@ -29,6 +29,10 @@
|
|||||||
#include "job.h"
|
#include "job.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
#ifndef O_BINARY
|
||||||
|
#define O_BINARY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@ -146,7 +150,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
int fd = STDIN_FILENO;
|
int fd = STDIN_FILENO;
|
||||||
if (job_filename) {
|
if (job_filename) {
|
||||||
fd = open(job_filename, O_RDONLY);
|
fd = open(job_filename, O_RDONLY | O_BINARY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
fprintf(stderr, "ERROR: " PACKAGE ": Unable to open raster file\n");
|
fprintf(stderr, "ERROR: " PACKAGE ": Unable to open raster file\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -37,10 +37,10 @@ const lest::test specification[] = {
|
|||||||
EXPECT(!b.empty());
|
EXPECT(!b.empty());
|
||||||
},
|
},
|
||||||
|
|
||||||
"A block can contain 128 lines",
|
"A block can contain 64 lines",
|
||||||
[] {
|
[] {
|
||||||
block b;
|
block b;
|
||||||
for (int i = 0; i < 128; ++i) {
|
for (int i = 0; i < 64; ++i) {
|
||||||
EXPECT(b.line_fits(1));
|
EXPECT(b.line_fits(1));
|
||||||
b.add_line(vec(1));
|
b.add_line(vec(1));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user