genesys: Refactor color filter into an enum

merge-requests/82/head
Povilas Kanapickas 2019-06-08 14:04:16 +03:00
rodzic 0ffbd6c023
commit bf395270e8
9 zmienionych plików z 346 dodań i 327 usunięć

Wyświetl plik

@ -1683,7 +1683,7 @@ static SANE_Status genesys_coarse_calibration(Genesys_Device * dev, Genesys_Sens
{
switch (dev->settings.color_filter)
{
case 0:
case ColorFilter::RED:
default:
dev->dark[0] =
(uint16_t) (1.6925 * dark[i * 3 + 0] +
@ -1691,14 +1691,14 @@ static SANE_Status genesys_coarse_calibration(Genesys_Device * dev, Genesys_Sens
dev->dark[1] = dev->dark[2] = dev->dark[0];
break;
case 1:
case ColorFilter::GREEN:
dev->dark[1] =
(uint16_t) (1.4013 * dark[i * 3 + 1] +
(1.3147 - 1.0) * 256);
dev->dark[0] = dev->dark[2] = dev->dark[1];
break;
case 2:
case ColorFilter::BLUE:
dev->dark[2] =
(uint16_t) (1.2931 * dark[i * 3 + 2] +
(1.1558 - 1.0) * 256);
@ -4951,13 +4951,13 @@ calc_parameters (Genesys_Scanner * s)
// color filter
if (s->color_filter == "Red") {
s->dev->settings.color_filter = 0;
s->dev->settings.color_filter = ColorFilter::RED;
} else if (s->color_filter == "Green") {
s->dev->settings.color_filter = 1;
s->dev->settings.color_filter = ColorFilter::GREEN;
} else if (s->color_filter == "Blue") {
s->dev->settings.color_filter = 2;
s->dev->settings.color_filter = ColorFilter::BLUE;
} else {
s->dev->settings.color_filter = 3;
s->dev->settings.color_filter = ColorFilter::NONE;
}
// true gray

Wyświetl plik

@ -991,7 +991,7 @@ gl124_init_optical_regs_scan (Genesys_Device * dev,
int channels,
int depth,
SANE_Bool half_ccd,
int color_filter,
ColorFilter color_filter,
int flags)
{
unsigned int words_per_line, segcnt;
@ -1097,15 +1097,17 @@ gl124_init_optical_regs_scan (Genesys_Device * dev,
{
switch (color_filter)
{
case 0:
r->value |= 0x10; /* red filter */
case ColorFilter::RED:
r->value |= 0x10;
break;
case 2:
r->value |= 0x30; /* blue filter */
case ColorFilter::BLUE:
r->value |= 0x30;
break;
case ColorFilter::GREEN:
r->value |= 0x20;
break;
default:
r->value |= 0x20; /* green filter */
break;
break; // should not happen
}
}
@ -2029,7 +2031,7 @@ gl124_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE;
@ -2233,7 +2235,7 @@ gl124_search_start_position (Genesys_Device * dev)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 1; /*green */
params.color_filter = ColorFilter::GREEN;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE |
@ -2422,7 +2424,7 @@ gl124_init_regs_for_shading(Genesys_Device * dev, const Genesys_Sensor& sensor,
params.depth = 16;
params.channels = dev->calib_channels;
params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE |

Wyświetl plik

@ -1002,16 +1002,13 @@ gl646_setup_registers (Genesys_Device * dev,
regs->find_reg(0x04).value &= ~REG04_FILTER;
if (params.channels == 1) {
switch (params.color_filter) {
/* red */
case 0:
case ColorFilter::RED:
regs->find_reg(0x04).value |= 0x04;
break;
/* green */
case 1:
case ColorFilter::GREEN:
regs->find_reg(0x04).value |= 0x08;
break;
/* blue */
case 2:
case ColorFilter::BLUE:
regs->find_reg(0x04).value |= 0x0c;
break;
default:
@ -2550,7 +2547,7 @@ gl646_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
settings.pixels = 600;
settings.lines = 1;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -2669,7 +2666,7 @@ gl646_search_start_position (Genesys_Device * dev)
settings.pixels = 600;
settings.lines = dev->model->search_lines;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3133,7 +3130,7 @@ gl646_led_calibration (Genesys_Device * dev, Genesys_Sensor& sensor, Genesys_Reg
(sensor.sensor_pixels * resolution) / sensor.optical_res;
settings.lines = 1;
settings.depth = 16;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3310,7 +3307,7 @@ ad_fe_offset_calibration (Genesys_Device * dev, const Genesys_Sensor& sensor)
(sensor.sensor_pixels * resolution) / sensor.optical_res;
settings.lines = CALIBRATION_LINES;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3431,7 +3428,7 @@ gl646_offset_calibration(Genesys_Device * dev, const Genesys_Sensor& sensor,
(sensor.sensor_pixels * resolution) / sensor.optical_res;
settings.lines = CALIBRATION_LINES;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3588,7 +3585,7 @@ ad_fe_coarse_gain_calibration(Genesys_Device * dev, const Genesys_Sensor& sensor
(sensor.sensor_pixels * resolution) / sensor.optical_res;
settings.lines = CALIBRATION_LINES;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3711,7 +3708,7 @@ gl646_coarse_gain_calibration(Genesys_Device * dev, const Genesys_Sensor& sensor
}
settings.lines = CALIBRATION_LINES;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3734,7 +3731,12 @@ gl646_coarse_gain_calibration(Genesys_Device * dev, const Genesys_Sensor& sensor
average[0] = 255;
average[1] = 255;
average[2] = 255;
idx = dev->settings.color_filter;
switch (dev->settings.color_filter) {
case ColorFilter::RED: idx = 0; break;
case ColorFilter::GREEN: idx = 1; break;
case ColorFilter::BLUE: idx = 2; break;
default: idx = 0; break; // should not happen
}
average[idx] = 0;
}
pass = 0;
@ -3856,7 +3858,7 @@ gl646_init_regs_for_warmup (Genesys_Device * dev,
(sensor.sensor_pixels * resolution) / sensor.optical_res;
settings.lines = 2;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -3921,7 +3923,7 @@ gl646_repark_head (Genesys_Device * dev)
settings.pixels = 600;
settings.lines = 4;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -4017,7 +4019,7 @@ gl646_init (Genesys_Device * dev)
dev->dark_average_data.clear();
dev->white_average_data.clear();
dev->settings.color_filter = 1; /* green filter by default */
dev->settings.color_filter = ColorFilter::GREEN;
gettimeofday (&tv, NULL);
dev->init_date = tv.tv_sec;
@ -4466,7 +4468,7 @@ simple_move (Genesys_Device * dev, SANE_Int distance)
(sensor.sensor_pixels * settings.xres) / sensor.optical_res;
settings.lines = (distance * settings.xres) / MM_PER_INCH;
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;
@ -4819,7 +4821,7 @@ gl646_search_strip(Genesys_Device * dev, const Genesys_Sensor& sensor, SANE_Bool
/* 15 mm at at time */
settings.lines = (15 * settings.yres) / MM_PER_INCH; /* may become a parameter from genesys_devices.c */
settings.depth = 8;
settings.color_filter = 0;
settings.color_filter = ColorFilter::RED;
settings.disable_interpolation = 0;
settings.threshold = 0;

Wyświetl plik

@ -1817,7 +1817,7 @@ gl841_init_optical_regs_scan(Genesys_Device * dev,
int channels,
int depth,
SANE_Bool half_ccd,
int color_filter,
ColorFilter color_filter,
int flags
)
{
@ -1955,17 +1955,17 @@ gl841_init_optical_regs_scan(Genesys_Device * dev,
{
switch (color_filter)
{
case 0:
r->value |= 0x14; /* red filter */
case ColorFilter::RED:
r->value |= 0x14;
break;
case 1:
r->value |= 0x18; /* green filter */
case ColorFilter::GREEN:
r->value |= 0x18;
break;
case 2:
r->value |= 0x1c; /* blue filter */
case ColorFilter::BLUE:
r->value |= 0x1c;
break;
default:
r->value |= 0x10; /* no filter */
r->value |= 0x10;
break;
}
}
@ -3629,7 +3629,7 @@ gl841_search_start_position (Genesys_Device * dev)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 1; /*green*/
params.color_filter = ColorFilter::GREEN;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE |
@ -5084,7 +5084,7 @@ gl841_init (Genesys_Device * dev)
dev->dark_average_data.clear();
dev->white_average_data.clear();
dev->settings.color_filter = 0;
dev->settings.color_filter = ColorFilter::RED;
/* ASIC reset */
RIE (sanei_genesys_write_register (dev, 0x0e, 0x01));
@ -5152,7 +5152,7 @@ gl841_init (Genesys_Device * dev)
params.depth = 16;
params.channels = 3;
params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_SINGLE_LINE |
@ -5299,7 +5299,7 @@ gl841_search_strip(Genesys_Device * dev, const Genesys_Sensor& sensor,
params.depth = depth;
params.channels = channels;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA;
status = gl841_init_scan_regs(dev, sensor, &local_reg, params);

Wyświetl plik

@ -1089,7 +1089,7 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
int channels,
int depth,
unsigned ccd_size_divisor,
int color_filter,
ColorFilter color_filter,
int flags)
{
unsigned int words_per_line;
@ -1220,15 +1220,17 @@ gl843_init_optical_regs_scan (Genesys_Device * dev,
{
switch (color_filter)
{
case 0:
r->value |= 0x14; /* red filter */
case ColorFilter::RED:
r->value |= 0x14;
break;
case 2:
r->value |= 0x1c; /* blue filter */
case ColorFilter::BLUE:
r->value |= 0x1c;
break;
case ColorFilter::GREEN:
r->value |= 0x18;
break;
default:
r->value |= 0x18; /* green filter */
break;
break; // should not happen
}
}
else
@ -2607,7 +2609,7 @@ gl843_search_start_position (Genesys_Device * dev)
session.params.depth = 8;
session.params.channels = 1;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = 1; // green
session.params.color_filter = ColorFilter::GREEN;
session.params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE |
@ -2779,7 +2781,7 @@ gl843_feed (Genesys_Device * dev, unsigned int steps)
session.params.depth = 8;
session.params.channels = 3;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = 0;
session.params.color_filter = ColorFilter::RED;
session.params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_FEEDING |
@ -3369,7 +3371,7 @@ gl843_offset_calibration(Genesys_Device * dev, const Genesys_Sensor& sensor,
session.params.depth = bpp;
session.params.channels = channels;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = 0;
session.params.color_filter = ColorFilter::RED;
session.params.flags = flags;
gl843_compute_session(dev, session, calib_sensor);
pixels = session.output_pixels;
@ -4062,7 +4064,7 @@ gl843_search_strip (Genesys_Device * dev, const Genesys_Sensor& sensor,
session.params.depth = depth;
session.params.channels = channels;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = 0;
session.params.color_filter = ColorFilter::RED;
session.params.flags = SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_SHADING;
gl843_compute_session(dev, session, calib_sensor);

Wyświetl plik

@ -852,7 +852,7 @@ gl846_init_optical_regs_scan (Genesys_Device * dev,
unsigned int pixels,
int channels,
int depth,
SANE_Bool half_ccd, int color_filter, int flags)
SANE_Bool half_ccd, ColorFilter color_filter, int flags)
{
unsigned int words_per_line;
unsigned int startx, endx, used_pixels;
@ -975,15 +975,17 @@ gl846_init_optical_regs_scan (Genesys_Device * dev,
{
switch (color_filter)
{
case 0:
r->value |= 0x24; /* red filter */
case ColorFilter::RED:
r->value |= 0x24;
break;
case 2:
r->value |= 0x2c; /* blue filter */
case ColorFilter::BLUE:
r->value |= 0x2c;
break;
case ColorFilter::GREEN:
r->value |= 0x28;
break;
default:
r->value |= 0x28; /* green filter */
break;
break; // should not happen
}
}
else
@ -1752,7 +1754,7 @@ gl846_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE;
@ -1858,7 +1860,7 @@ gl846_search_start_position (Genesys_Device * dev)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 1; /*green */
params.color_filter = ColorFilter::GREEN;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE;
@ -2813,7 +2815,7 @@ gl846_search_strip(Genesys_Device * dev, const Genesys_Sensor& sensor,
params.depth = depth;
params.channels = channels;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA;

Wyświetl plik

@ -867,7 +867,7 @@ gl847_init_optical_regs_scan (Genesys_Device * dev,
unsigned int pixels,
int channels,
int depth,
SANE_Bool half_ccd, int color_filter, int flags)
SANE_Bool half_ccd, ColorFilter color_filter, int flags)
{
unsigned int words_per_line;
unsigned int startx, endx, used_pixels;
@ -990,15 +990,18 @@ gl847_init_optical_regs_scan (Genesys_Device * dev,
{
switch (color_filter)
{
case 0:
r->value |= 0x14; /* red filter */
case ColorFilter::RED:
r->value |= 0x14;
break;
case 2:
r->value |= 0x1c; /* blue filter */
case ColorFilter::BLUE:
r->value |= 0x1c;
break;
case ColorFilter::GREEN:
r->value |= 0x18;
break;
default:
r->value |= 0x18; /* green filter */
break;
break; // should not happen
}
}
else
@ -1815,7 +1818,7 @@ gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE;
@ -1922,7 +1925,7 @@ gl847_search_start_position (Genesys_Device * dev)
params.depth = 8;
params.channels = 1;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 1; /*green */
params.color_filter = ColorFilter::GREEN;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA |
SCAN_FLAG_IGNORE_LINE_DISTANCE;
@ -2912,7 +2915,7 @@ gl847_search_strip (Genesys_Device * dev, const Genesys_Sensor& sensor,
params.depth = depth;
params.channels = channels;
params.scan_mode = ScanColorMode::GRAY;
params.color_filter = 0;
params.color_filter = ColorFilter::RED;
params.flags = SCAN_FLAG_DISABLE_SHADING |
SCAN_FLAG_DISABLE_GAMMA;

Wyświetl plik

@ -1440,7 +1440,7 @@ sanei_genesys_asic_init(Genesys_Device* dev, int /*max_regs*/)
dev->white_average_data.clear();
dev->dark_average_data.clear();
dev->settings.color_filter = 0;
dev->settings.color_filter = ColorFilter::RED;
/* duplicate initial values into calibration registers */
dev->calib_reg = dev->reg;

Wyświetl plik

@ -237,6 +237,13 @@ enum class ScanColorMode : unsigned {
COLOR_SINGLE_PASS
};
enum class ColorFilter : unsigned {
RED = 0,
GREEN,
BLUE,
NONE
};
struct GenesysRegister {
uint16_t address = 0;
uint8_t value = 0;
@ -1146,7 +1153,7 @@ struct Genesys_Settings
// bit depth of the scan
unsigned int depth = 0;
unsigned int color_filter = 0;
ColorFilter color_filter = ColorFilter::NONE;
// true if scan is true gray, false if monochrome scan
int true_gray = 0;
@ -1196,7 +1203,7 @@ struct SetupParams {
ScanColorMode scan_mode = static_cast<ScanColorMode>(NOT_SET);
unsigned color_filter = NOT_SET;
ColorFilter color_filter = static_cast<ColorFilter>(NOT_SET);
unsigned flags = NOT_SET;
@ -1204,7 +1211,8 @@ struct SetupParams {
{
if (xres == NOT_SET || yres == NOT_SET || startx < 0 || starty < 0 ||
pixels == NOT_SET || lines == NOT_SET ||depth == NOT_SET || channels == NOT_SET ||
scan_mode == static_cast<ScanColorMode>(NOT_SET) || color_filter == NOT_SET ||
scan_mode == static_cast<ScanColorMode>(NOT_SET) ||
color_filter == static_cast<ColorFilter>(NOT_SET) ||
flags == NOT_SET)
{
throw std::runtime_error("SetupParams are not valid");