kopia lustrzana https://gitlab.com/sane-project/backends
brother_mfp: fix for makefile and other small enhancements.
rodzic
a7d6a553ee
commit
4f060d6cea
|
@ -382,8 +382,7 @@ libsane_bh_la_LIBADD = $(COMMON_LIBS) libbh.la \
|
||||||
EXTRA_DIST += bh.conf.in
|
EXTRA_DIST += bh.conf.in
|
||||||
|
|
||||||
|
|
||||||
libbrother_mfp_la_SOURCES = brother_mfp.h \
|
libbrother_mfp_la_SOURCES = brother_mfp-driver.cpp \
|
||||||
brother_mfp-driver.cpp \
|
|
||||||
brother_mfp-driver.h \
|
brother_mfp-driver.h \
|
||||||
brother_mfp-common.h \
|
brother_mfp-common.h \
|
||||||
brother_mfp-encoder.cpp \
|
brother_mfp-encoder.cpp \
|
||||||
|
|
|
@ -58,90 +58,6 @@ extern "C" void sanei_debug_brother_mfp_call(int level, const char *msg, ...);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------*/
|
/*-----------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
size_t dummy;
|
|
||||||
} Brother_jpeg_decode_state;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
size_t dummy;
|
|
||||||
} Brother_raw_decode_state;
|
|
||||||
|
|
||||||
//static void Brother_decode_gray_rlength_init (Brother_rlen_decode_state *state);
|
|
||||||
//static void Brother_decode_jpeg_init (Brother_jpeg_decode_state *state);
|
|
||||||
//static void Brother_decode_gray_raw_init (Brother_raw_decode_state *state);
|
|
||||||
//
|
|
||||||
//static SANE_Status Brother_decode_jpeg (Brother_jpeg_decode_state *state,
|
|
||||||
// const SANE_Byte *in_buffer, size_t in_buffer_len,
|
|
||||||
// SANE_Byte *out_buffer, size_t out_buffer_len,
|
|
||||||
// size_t *bytes_consumed, size_t *bytes_written);
|
|
||||||
//
|
|
||||||
//static SANE_Status Brother_decode_gray_raw (Brother_raw_decode_state *state,
|
|
||||||
// const SANE_Byte *in_buffer, size_t in_buffer_len,
|
|
||||||
// SANE_Byte *out_buffer, size_t out_buffer_len,
|
|
||||||
// size_t *bytes_consumed, size_t *bytes_written);
|
|
||||||
//
|
|
||||||
//static SANE_Status Brother_decode_gray_rlength (Brother_rlen_decode_state *state,
|
|
||||||
// const SANE_Byte *in_buffer, size_t in_buffer_len,
|
|
||||||
// SANE_Byte *out_buffer, size_t out_buffer_len,
|
|
||||||
// size_t *bytes_consumed, size_t *bytes_written);
|
|
||||||
|
|
||||||
|
|
||||||
//static void
|
|
||||||
//Brother_decode_jpeg_init (Brother_jpeg_decode_state *state)
|
|
||||||
//{
|
|
||||||
// (void)state;
|
|
||||||
//// state->decode_bytes_left = 0;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//static void
|
|
||||||
//Brother_decode_gray_raw_init (Brother_raw_decode_state *state)
|
|
||||||
//{
|
|
||||||
// (void)state;
|
|
||||||
//// state->decode_bytes_left = block_size;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//static SANE_Status
|
|
||||||
//Brother_decode_jpeg (Brother_jpeg_decode_state *state,
|
|
||||||
// const SANE_Byte *in_buffer, size_t in_buffer_len,
|
|
||||||
// SANE_Byte *out_buffer, size_t out_buffer_len,
|
|
||||||
// size_t *bytes_consumed, size_t *bytes_written)
|
|
||||||
//{
|
|
||||||
// (void)state;
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// * TODO: replace with JPEG decoding.
|
|
||||||
// *
|
|
||||||
// */
|
|
||||||
// size_t bytes_to_copy = MIN(in_buffer_len, (size_t)out_buffer_len);
|
|
||||||
// (void) memcpy (out_buffer, in_buffer, bytes_to_copy);
|
|
||||||
//
|
|
||||||
// *bytes_written = bytes_to_copy;
|
|
||||||
// *bytes_consumed = bytes_to_copy;
|
|
||||||
//
|
|
||||||
// return SANE_STATUS_GOOD;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//static SANE_Status
|
|
||||||
//Brother_decode_gray_raw (Brother_raw_decode_state *state,
|
|
||||||
// const SANE_Byte *in_buffer, size_t in_buffer_len,
|
|
||||||
// SANE_Byte *out_buffer, size_t out_buffer_len,
|
|
||||||
// size_t *bytes_consumed, size_t *bytes_written)
|
|
||||||
//{
|
|
||||||
// (void)state;
|
|
||||||
//
|
|
||||||
// size_t bytes_to_copy = MIN(in_buffer_len, (size_t )out_buffer_len);
|
|
||||||
// (void) memcpy (out_buffer, in_buffer, bytes_to_copy);
|
|
||||||
//
|
|
||||||
// *bytes_written = bytes_to_copy;
|
|
||||||
// *bytes_consumed = bytes_to_copy;
|
|
||||||
//
|
|
||||||
// return SANE_STATUS_GOOD;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
const char* BrotherDriver::ScanModeToText (BrotherScanMode scan_mode)
|
const char* BrotherDriver::ScanModeToText (BrotherScanMode scan_mode)
|
||||||
{
|
{
|
||||||
static const char *scan_mode_text[] =
|
static const char *scan_mode_text[] =
|
||||||
|
@ -1030,9 +946,9 @@ BrotherUSBDriver::BrotherUSBDriver (const char *devicename, BrotherFamily family
|
||||||
was_cancelled(false),
|
was_cancelled(false),
|
||||||
devicename (nullptr),
|
devicename (nullptr),
|
||||||
fd (0),
|
fd (0),
|
||||||
|
small_buffer {0},
|
||||||
data_buffer (nullptr),
|
data_buffer (nullptr),
|
||||||
data_buffer_bytes (0)
|
data_buffer_bytes (0)
|
||||||
|
|
||||||
{
|
{
|
||||||
this->devicename = strdup(devicename);
|
this->devicename = strdup(devicename);
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,10 @@
|
||||||
class BrotherDriver
|
class BrotherDriver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BrotherDriver (BrotherFamily family);
|
explicit BrotherDriver (BrotherFamily family);
|
||||||
|
|
||||||
|
BrotherDriver(const BrotherDriver &) = delete;
|
||||||
|
BrotherDriver &operator=(const BrotherDriver &) = delete;
|
||||||
|
|
||||||
virtual ~BrotherDriver();
|
virtual ~BrotherDriver();
|
||||||
|
|
||||||
|
@ -147,16 +150,16 @@ public:
|
||||||
|
|
||||||
~BrotherUSBDriver ();
|
~BrotherUSBDriver ();
|
||||||
|
|
||||||
SANE_Status Connect ();
|
SANE_Status Connect () override;
|
||||||
|
|
||||||
SANE_Status Disconnect ();
|
SANE_Status Disconnect () override;
|
||||||
|
|
||||||
SANE_Status StartScan ();
|
SANE_Status StartScan () override;
|
||||||
|
|
||||||
SANE_Status CancelScan ();
|
SANE_Status CancelScan () override;
|
||||||
|
|
||||||
SANE_Status ReadScanData (SANE_Byte *data, size_t data_len,
|
SANE_Status ReadScanData (SANE_Byte *data, size_t data_len,
|
||||||
size_t *bytes_read);
|
size_t *bytes_read) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SANE_Status StartSession ();
|
SANE_Status StartSession ();
|
||||||
|
|
|
@ -297,10 +297,12 @@ SANE_Status BrotherEncoderFamily4::EncodeParameterBlock (SANE_Byte *data, size_t
|
||||||
"C=JPEG\nJ=MID\n" : "C=RLENGTH\n",
|
"C=JPEG\nJ=MID\n" : "C=RLENGTH\n",
|
||||||
(unsigned int) (scan_params.param_brightness + 50),
|
(unsigned int) (scan_params.param_brightness + 50),
|
||||||
(unsigned int) (scan_params.param_contrast + 50),
|
(unsigned int) (scan_params.param_contrast + 50),
|
||||||
scan_params.param_pixel_x_offset,
|
(unsigned int) (scan_params.param_pixel_x_offset),
|
||||||
scan_params.param_pixel_y_offset,
|
(unsigned int) (scan_params.param_pixel_y_offset),
|
||||||
scan_params.param_pixel_x_offset + scan_params.param_pixel_x_width,
|
(unsigned int) (scan_params.param_pixel_x_offset
|
||||||
scan_params.param_pixel_y_offset + scan_params.param_pixel_y_height);
|
+ scan_params.param_pixel_x_width),
|
||||||
|
(unsigned int) (scan_params.param_pixel_y_offset
|
||||||
|
+ scan_params.param_pixel_y_height));
|
||||||
|
|
||||||
if (*length > data_len)
|
if (*length > data_len)
|
||||||
{
|
{
|
||||||
|
@ -656,10 +658,11 @@ DecodeStatus BrotherGrayRLengthDecoder::DecodeScanData (const SANE_Byte *in_buff
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
size_t bytes_to_copy = MIN(out_buffer_len, block_bytes_left);
|
size_t bytes_to_copy = MIN(out_buffer_len, block_bytes_left);
|
||||||
size_t consumed = 0;
|
|
||||||
|
|
||||||
if (bytes_to_copy)
|
if (bytes_to_copy)
|
||||||
{
|
{
|
||||||
|
size_t consumed = 0;
|
||||||
|
|
||||||
if (decode_state == BROTHER_DECODE_RLEN_IN_BYTES)
|
if (decode_state == BROTHER_DECODE_RLEN_IN_BYTES)
|
||||||
{
|
{
|
||||||
bytes_to_copy = MIN(bytes_to_copy, in_buffer_len);
|
bytes_to_copy = MIN(bytes_to_copy, in_buffer_len);
|
||||||
|
|
|
@ -267,29 +267,29 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Reset()
|
void Reset() override
|
||||||
{
|
{
|
||||||
current_header.block_type = 0;
|
current_header.block_type = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SANE_Status DecodeSessionResp (const SANE_Byte *data, size_t data_len,
|
SANE_Status DecodeSessionResp (const SANE_Byte *data, size_t data_len,
|
||||||
BrotherSessionResponse &response);
|
BrotherSessionResponse &response) override;
|
||||||
|
|
||||||
SANE_Status EncodeBasicParameterBlock (SANE_Byte *data, size_t data_len, size_t *length);
|
SANE_Status EncodeBasicParameterBlock (SANE_Byte *data, size_t data_len, size_t *length) override;
|
||||||
|
|
||||||
SANE_Status DecodeBasicParameterBlockResp (const SANE_Byte *data, size_t data_len,
|
SANE_Status DecodeBasicParameterBlockResp (const SANE_Byte *data, size_t data_len,
|
||||||
BrotherBasicParamResponse &response);
|
BrotherBasicParamResponse &response) override;
|
||||||
|
|
||||||
SANE_Status EncodeADFBlock (SANE_Byte *data, size_t data_len, size_t *length);
|
SANE_Status EncodeADFBlock (SANE_Byte *data, size_t data_len, size_t *length) override;
|
||||||
|
|
||||||
SANE_Status DecodeADFBlockResp (const SANE_Byte *data, size_t data_len,
|
SANE_Status DecodeADFBlockResp (const SANE_Byte *data, size_t data_len,
|
||||||
BrotherADFResponse &response);
|
BrotherADFResponse &response) override;
|
||||||
|
|
||||||
SANE_Status EncodeParameterBlock (SANE_Byte *data, size_t data_len, size_t *length);
|
SANE_Status EncodeParameterBlock (SANE_Byte *data, size_t data_len, size_t *length) override;
|
||||||
|
|
||||||
SANE_Status DecodeScanData (const SANE_Byte *src_data, size_t src_data_len,
|
SANE_Status DecodeScanData (const SANE_Byte *src_data, size_t src_data_len,
|
||||||
size_t *src_data_consumed, SANE_Byte *dst_data,
|
size_t *src_data_consumed, SANE_Byte *dst_data,
|
||||||
size_t dest_data_len, size_t *dest_data_written);
|
size_t dest_data_len, size_t *dest_data_written) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DecodeStatus DecodeScanDataHeader (const SANE_Byte *src_data, size_t src_data_len,
|
DecodeStatus DecodeScanDataHeader (const SANE_Byte *src_data, size_t src_data_len,
|
||||||
|
|
|
@ -145,12 +145,15 @@ struct BrotherDevice
|
||||||
model (nullptr),
|
model (nullptr),
|
||||||
sane_device {nullptr, nullptr, nullptr, nullptr},
|
sane_device {nullptr, nullptr, nullptr, nullptr},
|
||||||
name (nullptr),
|
name (nullptr),
|
||||||
|
modes {0},
|
||||||
|
params {SANE_FRAME_GRAY, SANE_FALSE, 0, 0, 0, 0},
|
||||||
internal_scan_mode(nullptr),
|
internal_scan_mode(nullptr),
|
||||||
x_res (0),
|
x_res (0),
|
||||||
y_res (0),
|
y_res (0),
|
||||||
scan_file (nullptr),
|
scan_file (nullptr),
|
||||||
driver (nullptr)
|
driver (nullptr)
|
||||||
{
|
{
|
||||||
|
(void)memset(opt, 0, sizeof(opt));
|
||||||
}
|
}
|
||||||
struct BrotherDevice *next;
|
struct BrotherDevice *next;
|
||||||
|
|
||||||
|
@ -325,12 +328,12 @@ attach_with_no_ret (const char *devicename)
|
||||||
static size_t
|
static size_t
|
||||||
max_string_size (const SANE_String_Const strings[])
|
max_string_size (const SANE_String_Const strings[])
|
||||||
{
|
{
|
||||||
size_t size, max_size = 0;
|
size_t max_size = 0;
|
||||||
SANE_Int i;
|
SANE_Int i;
|
||||||
|
|
||||||
for (i = 0; strings[i]; ++i)
|
for (i = 0; strings[i]; ++i)
|
||||||
{
|
{
|
||||||
size = strlen (strings[i]) + 1;
|
size_t size = strlen (strings[i]) + 1;
|
||||||
if (size > max_size)
|
if (size > max_size)
|
||||||
max_size = size;
|
max_size = size;
|
||||||
}
|
}
|
||||||
|
@ -685,7 +688,7 @@ sane_close (SANE_Handle handle)
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_close\n");
|
DBG (DBG_EVENT, "sane_close\n");
|
||||||
|
|
||||||
device = (BrotherDevice *)handle;
|
device = static_cast<BrotherDevice *>(handle);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check is a valid device handle by running through our list of devices.
|
* Check is a valid device handle by running through our list of devices.
|
||||||
|
@ -725,7 +728,7 @@ sane_close (SANE_Handle handle)
|
||||||
const SANE_Option_Descriptor *
|
const SANE_Option_Descriptor *
|
||||||
sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
sane_get_option_descriptor (SANE_Handle handle, SANE_Int option)
|
||||||
{
|
{
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_get_option_descriptor: device=%s, option = %d\n", device->name, option);
|
DBG (DBG_EVENT, "sane_get_option_descriptor: device=%s, option = %d\n", device->name, option);
|
||||||
if (option < 0 || option >= NUM_OPTIONS)
|
if (option < 0 || option >= NUM_OPTIONS)
|
||||||
|
@ -741,7 +744,7 @@ SANE_Status
|
||||||
sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,
|
sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,
|
||||||
void *value, SANE_Int * info)
|
void *value, SANE_Int * info)
|
||||||
{
|
{
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_control_option\n");
|
DBG (DBG_EVENT, "sane_control_option\n");
|
||||||
|
|
||||||
|
@ -832,19 +835,6 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,
|
||||||
option, device->opt[option].name, *(SANE_Int *) value);
|
option, device->opt[option].name, *(SANE_Int *) value);
|
||||||
|
|
||||||
status = SANE_STATUS_GOOD;
|
status = SANE_STATUS_GOOD;
|
||||||
|
|
||||||
if (option == OPT_CONTRAST)
|
|
||||||
{
|
|
||||||
status = device->driver->SetContrast((SANE_Int)device->val[option].w);
|
|
||||||
}
|
|
||||||
else if (option == OPT_BRIGHTNESS)
|
|
||||||
{
|
|
||||||
status = device->driver->SetBrightness((SANE_Int)device->val[option].w);
|
|
||||||
}
|
|
||||||
if (status != SANE_STATUS_GOOD)
|
|
||||||
{
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OPT_MODE:
|
case OPT_MODE:
|
||||||
|
@ -943,7 +933,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option, SANE_Action action,
|
||||||
SANE_Status
|
SANE_Status
|
||||||
sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
||||||
{
|
{
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
SANE_Status rc = SANE_STATUS_GOOD;
|
SANE_Status rc = SANE_STATUS_GOOD;
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_get_parameters\n");
|
DBG (DBG_EVENT, "sane_get_parameters\n");
|
||||||
|
@ -993,6 +983,22 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Brightness and contrast.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
rc = device->driver->SetContrast((SANE_Int)device->val[OPT_CONTRAST].w);
|
||||||
|
if (rc != SANE_STATUS_GOOD)
|
||||||
|
{
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = device->driver->SetBrightness((SANE_Int)device->val[OPT_BRIGHTNESS].w);
|
||||||
|
if (rc != SANE_STATUS_GOOD)
|
||||||
|
{
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A bit sucky but we have to determine which mode from the text of the selected option.
|
* A bit sucky but we have to determine which mode from the text of the selected option.
|
||||||
*
|
*
|
||||||
|
@ -1080,7 +1086,7 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
|
||||||
SANE_Status
|
SANE_Status
|
||||||
sane_start (SANE_Handle handle)
|
sane_start (SANE_Handle handle)
|
||||||
{
|
{
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
SANE_Status res;
|
SANE_Status res;
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_start\n");
|
DBG (DBG_EVENT, "sane_start\n");
|
||||||
|
@ -1120,7 +1126,7 @@ SANE_Status
|
||||||
sane_read (SANE_Handle handle, SANE_Byte * data,
|
sane_read (SANE_Handle handle, SANE_Byte * data,
|
||||||
SANE_Int max_length, SANE_Int * length)
|
SANE_Int max_length, SANE_Int * length)
|
||||||
{
|
{
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_read\n");
|
DBG (DBG_EVENT, "sane_read\n");
|
||||||
|
|
||||||
|
@ -1156,7 +1162,7 @@ void
|
||||||
sane_cancel (SANE_Handle handle)
|
sane_cancel (SANE_Handle handle)
|
||||||
{
|
{
|
||||||
SANE_Status res;
|
SANE_Status res;
|
||||||
BrotherDevice *device = (BrotherDevice *)handle;
|
BrotherDevice *device = static_cast<BrotherDevice *>(handle);
|
||||||
|
|
||||||
DBG (DBG_EVENT, "sane_cancel\n");
|
DBG (DBG_EVENT, "sane_cancel\n");
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue