genesys: Extract exposure to separate variable in sensor definition

merge-requests/81/head
Povilas Kanapickas 2019-06-02 11:47:31 +03:00
rodzic e9419d5e33
commit 836a78bef5
10 zmienionych plików z 133 dodań i 294 usunięć

Wyświetl plik

@ -2970,9 +2970,7 @@ genesys_restore_calibration (Genesys_Device * dev)
{
memcpy (&dev->frontend, &cache.frontend, sizeof (dev->frontend));
/* we don't restore the gamma fields */
for (uint16_t addr = 0x10; addr < 0x16; ++addr) {
dev->sensor.custom_regs.set_value(addr, cache.sensor.custom_regs.get_value(addr));
}
dev->sensor.exposure = cache.sensor.exposure;
dev->average_size = cache.average_size;
dev->calib_pixels = cache.calib_pixels;

Wyświetl plik

@ -271,17 +271,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10800;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x01 },
{ 0x09, 0x03 },
{ 0x0a, 0x05 },
{ 0x0b, 0x07 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x05 },
{ 0x18, 0x31 },
@ -317,17 +312,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5416;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x02 },
{ 0x09, 0x00 },
{ 0x0a, 0x06 },
{ 0x0b, 0x04 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x2b },
{ 0x17, 0x08 },
{ 0x18, 0x20 },
@ -363,17 +353,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10800;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x0e },
{ 0x09, 0x0c },
{ 0x0a, 0x00 },
{ 0x0b, 0x0c },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x08 },
{ 0x18, 0x31 },
@ -410,17 +395,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10872;
sensor.fau_gain_white_ref = 190;
sensor.gain_white_ref = 190;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x0d },
{ 0x09, 0x0f },
{ 0x0a, 0x11 },
{ 0x0b, 0x13 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x0b },
{ 0x17, 0x0a },
{ 0x18, 0x30 },
@ -456,17 +436,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10872;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x14 },
{ 0x09, 0x15 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0xbf },
{ 0x17, 0x08 },
{ 0x18, 0x3f },
@ -503,17 +478,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5368;
sensor.fau_gain_white_ref = 180;
sensor.gain_white_ref = 180;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x16 },
{ 0x09, 0x00 },
{ 0x0a, 0x01 },
{ 0x0b, 0x03 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0xb7 },
{ 0x17, 0x0a },
{ 0x18, 0x20 },
@ -550,17 +520,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10400;
sensor.fau_gain_white_ref = 0;
sensor.gain_white_ref = 0;
sensor.exposure = { 0x0400, 0x0400, 0x0400 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x04 },
{ 0x11, 0x00 },
{ 0x12, 0x04 },
{ 0x13, 0x00 },
{ 0x14, 0x04 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x00 },
@ -596,17 +561,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5200;
sensor.fau_gain_white_ref = 200;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1450, 0x0c80, 0x0a28 };
sensor.custom_regs = {
{ 0x08, 0x16 },
{ 0x09, 0x00 },
{ 0x0a, 0x01 },
{ 0x0b, 0x03 },
{ 0x10, 0x14 },
{ 0x11, 0x50 },
{ 0x12, 0x0c },
{ 0x13, 0x80 },
{ 0x14, 0x0a },
{ 0x15, 0x28 },
{ 0x16, 0xb7 },
{ 0x17, 0x0a },
{ 0x18, 0x20 },
@ -642,17 +602,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10872;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x0a },
{ 0x0a, 0x0b },
{ 0x0b, 0x0d },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x07 },
{ 0x18, 0x20 },
@ -688,17 +643,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 2496;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1100, 0x1100, 0x1100 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x11 },
{ 0x11, 0x00 },
{ 0x12, 0x11 },
{ 0x13, 0x00 },
{ 0x14, 0x11 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x04 },
@ -734,17 +684,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5200;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1100, 0x1100, 0x1100 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x11 },
{ 0x11, 0x00 },
{ 0x12, 0x11 },
{ 0x13, 0x00 },
{ 0x14, 0x11 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x04 },
@ -780,17 +725,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5200;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1544, 0x1544, 0x1544 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x15 },
{ 0x11, 0x44 },
{ 0x12, 0x15 },
{ 0x13, 0x44 },
{ 0x14, 0x15 },
{ 0x15, 0x44 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x04 },
@ -826,17 +766,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10240;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1100, 0x1100, 0x1100 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x11 },
{ 0x11, 0x00 },
{ 0x12, 0x11 },
{ 0x13, 0x00 },
{ 0x14, 0x11 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x04 },
@ -872,17 +807,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5020;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x1100, 0x1100, 0x1100 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x11 },
{ 0x11, 0x00 },
{ 0x12, 0x11 },
{ 0x13, 0x00 },
{ 0x14, 0x11 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x02 },
{ 0x18, 0x04 },
@ -918,17 +848,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5136*8;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x10 },
{ 0x17, 0x08 },
{ 0x18, 0x00 },
@ -966,17 +891,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5188*8;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x10 },
{ 0x17, 0x08 },
{ 0x18, 0x00 },
@ -1012,17 +932,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5136*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x01c1, 0x0126, 0x00e5 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x01 },
{ 0x11, 0xc1 },
{ 0x12, 0x01 },
{ 0x13, 0x26 },
{ 0x14, 0x00 },
{ 0x15, 0xe5 },
{ 0x16, 0x10 },
{ 0x17, 0x08 },
{ 0x18, 0x00 },
@ -1058,17 +973,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5376;
sensor.fau_gain_white_ref = 160;
sensor.gain_white_ref = 160;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x6a },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x1c },
{ 0x18, 0x00 },
@ -1105,17 +1015,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5360*8;
sensor.fau_gain_white_ref = 160;
sensor.gain_white_ref = 160;
sensor.exposure = { 0x2c09, 0x22b8, 0x10f0 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x18 },
{ 0x0b, 0x69 },
{ 0x10, 0x2c },
{ 0x11, 0x09 },
{ 0x12, 0x22 },
{ 0x13, 0xb8 },
{ 0x14, 0x10 },
{ 0x15, 0xf0 },
{ 0x16, 0x33 },
{ 0x17, 0x0c },
{ 0x18, 0x00 },
@ -1154,17 +1059,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5360*8;
sensor.fau_gain_white_ref = 160;
sensor.gain_white_ref = 160;
sensor.exposure = { 0x9c40, 0x9c40, 0x9c40 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x18 },
{ 0x0b, 0x69 },
{ 0x10, 0x9c },
{ 0x11, 0x40 },
{ 0x12, 0x9c },
{ 0x13, 0x40 },
{ 0x14, 0x9c },
{ 0x15, 0x40 },
{ 0x16, 0x13 },
{ 0x17, 0x0a },
{ 0x18, 0x10 },
@ -1202,17 +1102,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5360*8;
sensor.fau_gain_white_ref = 160;
sensor.gain_white_ref = 160;
sensor.exposure = { 0x9c40, 0x9c40, 0x9c40 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x18 },
{ 0x0b, 0x69 },
{ 0x10, 0x9c },
{ 0x11, 0x40 },
{ 0x12, 0x9c },
{ 0x13, 0x40 },
{ 0x14, 0x9c },
{ 0x15, 0x40 },
{ 0x16, 0x13 },
{ 0x17, 0x0a },
{ 0x18, 0x10 },
@ -1250,17 +1145,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 11372*4;
sensor.fau_gain_white_ref = 160;
sensor.gain_white_ref = 160;
sensor.exposure = { 0x9c40, 0x9c40, 0x9c40 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x9c },
{ 0x11, 0x40 },
{ 0x12, 0x9c },
{ 0x13, 0x40 },
{ 0x14, 0x9c },
{ 0x15, 0x40 },
{ 0x16, 0x13 },
{ 0x17, 0x15 },
{ 0x18, 0x10 },
@ -1297,17 +1187,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 42720;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x10 },
{ 0x0a, 0x10 },
{ 0x0b, 0x0c },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x0c },
{ 0x18, 0x02 },
@ -1344,17 +1229,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5168*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x10 },
{ 0x17, 0x04 },
{ 0x18, 0x00 },
@ -1392,17 +1272,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5104*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x15 },
{ 0x17, 0x04 },
{ 0x18, 0x00 },
@ -1439,17 +1314,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5168*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x10 },
{ 0x17, 0x04 },
{ 0x18, 0x00 },
@ -1486,17 +1356,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 5168*4;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x10 },
{ 0x17, 0x04 },
{ 0x18, 0x00 },
@ -1533,17 +1398,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10100;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 230;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x00 },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0x33 },
{ 0x17, 0x0b },
{ 0x18, 0x11 },
@ -1579,17 +1439,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10800;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x60 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x8b },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0xbb },
{ 0x17, 0x13 },
{ 0x18, 0x10 },
@ -1625,17 +1480,12 @@ void genesys_init_sensor_tables()
sensor.sensor_pixels = 10200;
sensor.fau_gain_white_ref = 210;
sensor.gain_white_ref = 200;
sensor.exposure = { 0x0000, 0x0000, 0x0000 };
sensor.custom_regs = {
{ 0x08, 0x60 },
{ 0x09, 0x00 },
{ 0x0a, 0x00 },
{ 0x0b, 0x8b },
{ 0x10, 0x00 },
{ 0x11, 0x00 },
{ 0x12, 0x00 },
{ 0x13, 0x00 },
{ 0x14, 0x00 },
{ 0x15, 0x00 },
{ 0x16, 0xbb },
{ 0x17, 0x13 },
{ 0x18, 0x10 },
@ -1676,17 +1526,12 @@ void genesys_init_sensor_tables()
sensor.fau_gain_white_ref = 150;
sensor.gain_white_ref = 150;
// maps to 0x70-0x73 for GL841
sensor.exposure = { 0x1000, 0x1000, 0x0500 };
sensor.custom_regs = {
{ 0x08, 0x00 },
{ 0x09, 0x05 },
{ 0x0a, 0x07 },
{ 0x0b, 0x09 },
{ 0x10, 0x10 },
{ 0x11, 0x00 },
{ 0x12, 0x10 },
{ 0x13, 0x00 },
{ 0x14, 0x05 },
{ 0x15, 0x00 },
{ 0x16, 0x00 },
{ 0x17, 0x01 },
{ 0x18, 0x00 },

Wyświetl plik

@ -933,21 +933,21 @@ gl124_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi,
sanei_genesys_set_double(regs,REG_EXPDMY,sensor->expdummy);
/* if no calibration has been done, set default values for exposures */
exp = dev->sensor.custom_regs.get_value(0x10)*256 + dev->sensor.custom_regs.get_value(0x11);
exp = dev->sensor.exposure.red;
if(exp==0)
{
exp=sensor->expr;
}
sanei_genesys_set_triple(regs,REG_EXPR,exp);
exp = dev->sensor.custom_regs.get_value(0x12)*256 + dev->sensor.custom_regs.get_value(0x13);
exp =dev->sensor.exposure.green;
if(exp==0)
{
exp=sensor->expg;
}
sanei_genesys_set_triple(regs,REG_EXPG,exp);
exp = dev->sensor.custom_regs.get_value(0x14)*256 + dev->sensor.custom_regs.get_value(0x15);
exp = dev->sensor.exposure.blue;
if(exp==0)
{
exp=sensor->expb;
@ -2942,12 +2942,9 @@ gl124_led_calibration (Genesys_Device * dev)
sanei_genesys_set_triple(&dev->reg,REG_EXPB,exp[2]);
/* store in this struct since it is the one used by cache calibration */
dev->sensor.custom_regs.set_value(0x10, (exp[0] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, exp[0] & 0xff);
dev->sensor.custom_regs.set_value(0x12, (exp[1] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, exp[1] & 0xff);
dev->sensor.custom_regs.set_value(0x14, (exp[2] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, exp[2] & 0xff);
dev->sensor.exposure.red = exp[0];
dev->sensor.exposure.green = exp[1];
dev->sensor.exposure.blue = exp[2];
DBGCOMPLETED;
return status;

Wyświetl plik

@ -1000,6 +1000,8 @@ gl646_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs)
for (const auto& reg_setting : dev->sensor.custom_regs) {
regs->set8(reg_setting.address, reg_setting.value);
}
// FIXME: all other drivers don't set exposure here
sanei_genesys_set_exposure(*regs, dev->sensor.exposure);
DBG(DBG_proc, "%s: end\n", __func__);
}
@ -3181,20 +3183,17 @@ gl646_led_calibration (Genesys_Device * dev)
Sensor_Master uint8_t regs_0x10_0x15[6];
*/
expr = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
expg = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
expb = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
expr = dev->sensor.exposure.red;
expg = dev->sensor.exposure.green;
expb = dev->sensor.exposure.blue;
turn = 0;
do
{
dev->sensor.custom_regs.set_value(0x10, (expr >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, expr & 0xff);
dev->sensor.custom_regs.set_value(0x12, (expg >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, expg & 0xff);
dev->sensor.custom_regs.set_value(0x14, (expb >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, expb & 0xff);
dev->sensor.exposure.red = expr;
dev->sensor.exposure.green = expg;
dev->sensor.exposure.blue = expb;
DBG(DBG_info, "%s: starting first line reading\n", __func__);

Wyświetl plik

@ -1821,7 +1821,6 @@ gl841_init_optical_regs_scan(Genesys_Device * dev,
unsigned int words_per_line;
unsigned int end;
unsigned int dpiset;
unsigned int i;
GenesysRegister* r;
SANE_Status status;
uint16_t expavg, expr, expb, expg;
@ -1905,19 +1904,12 @@ gl841_init_optical_regs_scan(Genesys_Device * dev,
r->value |= REG03_LAMPPWR;
/* exposure times */
r = sanei_genesys_get_address (reg, 0x10);
for (i = 0; i < 6; i++, r++) {
if (flags & OPTICAL_FLAG_DISABLE_LAMP)
r->value = 0x01;/* 0x0101 is as off as possible */
else
{ /* EXP[R,G,B] only matter for CIS scanners */
uint8_t value = dev->sensor.custom_regs.get_value(0x10 + i);
if (value == 0x00) {
r->value = 0x01; /*0x00 will not be accepted*/
} else {
r->value = value;
}
}
if (flags & OPTICAL_FLAG_DISABLE_LAMP) {
// 0x0101 is as off as possible
sanei_genesys_set_exposure(*reg, {0x0101, 0x0101, 0x0101});
} else {
// EXP[R,G,B] only matter for CIS scanners
sanei_genesys_set_exposure(*reg, sanei_genesys_fixup_exposure(dev->sensor.exposure));
}
r = sanei_genesys_get_address (reg, 0x19);
@ -2063,9 +2055,9 @@ gl841_get_led_exposure(Genesys_Device * dev)
return 0;
d = dev->reg.find_reg(0x19).value;
r = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
g = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
b = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
r = dev->sensor.exposure.red;
g = dev->sensor.exposure.green;
b = dev->sensor.exposure.blue;
m = r;
if (m < g)
@ -2784,15 +2776,9 @@ gl841_set_lamp_power (Genesys_Device * dev,
0x03) |
REG03_LAMPPWR);
r = sanei_genesys_get_address (regs, 0x10);
for (i = 0; i < 6; i++, r++) {
uint8_t value = dev->sensor.custom_regs.get_value(0x10 + i);
if (value == 0x00) {
r->value = 0x01; /*0x00 will not be accepted*/
} else {
r->value = value;
}
}
sanei_genesys_set_exposure(*regs,
sanei_genesys_fixup_exposure(dev->sensor.exposure));
r = sanei_genesys_get_address (regs, 0x19);
r->value = 0x50;
}
@ -4041,7 +4027,6 @@ gl841_led_calibration (Genesys_Device * dev)
int avg[3], avga, avge;
int turn;
uint16_t exp[3], target;
GenesysRegister *r;
int move;
SANE_Bool acceptable = SANE_FALSE;
@ -4109,9 +4094,9 @@ gl841_led_calibration (Genesys_Device * dev)
adjust exposure times
*/
exp[0] = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
exp[1] = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
exp[2] = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
exp[0] = dev->sensor.exposure.red;
exp[1] = dev->sensor.exposure.green;
exp[2] = dev->sensor.exposure.blue;
turn = 0;
/* max exposure is set to ~2 time initial average
@ -4120,19 +4105,17 @@ gl841_led_calibration (Genesys_Device * dev)
target=dev->sensor.gain_white_ref*256;
do {
dev->sensor.exposure.red = exp[0];
dev->sensor.exposure.green = exp[1];
dev->sensor.exposure.blue = exp[2];
dev->sensor.custom_regs.set_value(0x10, (exp[0] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, exp[0] & 0xff);
dev->sensor.custom_regs.set_value(0x12, (exp[1] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, exp[1] & 0xff);
dev->sensor.custom_regs.set_value(0x14, (exp[2] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, exp[2] & 0xff);
r = &(dev->calib_reg.find_reg(0x10));
for (i = 0; i < 6; i++, r++) {
r->value = dev->sensor.custom_regs.get_value(0x10 + i);
RIE(sanei_genesys_write_register(dev, 0x10+i, r->value));
}
sanei_genesys_set_exposure(dev->calib_reg, dev->sensor.exposure);
RIE(sanei_genesys_write_register(dev, 0x10, (dev->sensor.exposure.red >> 8) & 0xff));
RIE(sanei_genesys_write_register(dev, 0x11, dev->sensor.exposure.red & 0xff));
RIE(sanei_genesys_write_register(dev, 0x12, (dev->sensor.exposure.green >> 8) & 0xff));
RIE(sanei_genesys_write_register(dev, 0x13, dev->sensor.exposure.green & 0xff));
RIE(sanei_genesys_write_register(dev, 0x14, (dev->sensor.exposure.blue >> 8) & 0xff));
RIE(sanei_genesys_write_register(dev, 0x15, dev->sensor.exposure.blue & 0xff));
RIE(sanei_genesys_bulk_write_register(dev, dev->calib_reg));

Wyświetl plik

@ -1923,8 +1923,6 @@ static void
gl843_set_lamp_power (Genesys_Device * dev,
Genesys_Register_Set * regs, SANE_Bool set)
{
GenesysRegister *r;
int i;
uint8_t val;
val = sanei_genesys_read_reg_from_set (regs, REG03);
@ -1933,9 +1931,7 @@ gl843_set_lamp_power (Genesys_Device * dev,
val |= REG03_LAMPPWR;
sanei_genesys_set_reg_from_set (regs, REG03, val);
for (uint16_t addr = 0x10; addr < 0x16; addr++) {
regs->set8(addr, dev->sensor.custom_regs.get_value(addr));
}
sanei_genesys_set_exposure(*regs, dev->sensor.exposure);
}
else
{
@ -1944,11 +1940,7 @@ gl843_set_lamp_power (Genesys_Device * dev,
if (dev->model->model_id != MODEL_CANON_CANOSCAN_8600F)
{
// FIXME: datasheet says we shouldn't set exposure to zero
for (i = 0; i < 6; i++)
{
r = sanei_genesys_get_address (regs, 0x10 + i);
r->value = 0x00;
}
sanei_genesys_set_exposure(*regs, {0, 0, 0});
}
}
}
@ -3270,25 +3262,20 @@ gl843_led_calibration (Genesys_Device * dev)
adjust exposure times
*/
expr = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
expg = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
expb = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
expr = dev->sensor.exposure.red;
expg = dev->sensor.exposure.green;
expb = dev->sensor.exposure.blue;
turn = 0;
do
{
dev->sensor.custom_regs.set_value(0x10, (expr >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, expr & 0xff);
dev->sensor.custom_regs.set_value(0x12, (expg >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, expg & 0xff);
dev->sensor.custom_regs.set_value(0x14, (expb >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, expb & 0xff);
dev->sensor.exposure.red = expr;
dev->sensor.exposure.green = expg;
dev->sensor.exposure.blue = expb;
for (uint16_t addr = 0x10; addr < 0x16; addr++) {
dev->calib_reg.set8(addr, dev->sensor.custom_regs.get_value(addr));
}
sanei_genesys_set_exposure(dev->calib_reg, dev->sensor.exposure);
RIE(dev->model->cmd_set->bulk_write_register(dev, dev->calib_reg));

Wyświetl plik

@ -217,7 +217,7 @@ gl846_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
{
GenesysRegister *r;
Sensor_Profile *sensor;
int dpihw, i;
int dpihw;
uint16_t exp;
DBGSTART;
@ -238,21 +238,21 @@ gl846_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
sanei_genesys_set_reg_from_set(regs,REG_EXPDMY,(uint8_t)((sensor->expdummy) & 0xff));
/* if no calibration has been done, set default values for exposures */
exp = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
exp = dev->sensor.exposure.red;
if(exp==0)
{
exp=sensor->expr;
}
sanei_genesys_set_double(regs,REG_EXPR,exp);
exp = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
exp = dev->sensor.exposure.green;
if(exp==0)
{
exp=sensor->expg;
}
sanei_genesys_set_double(regs,REG_EXPG,exp);
exp = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
exp = dev->sensor.exposure.blue;
if(exp==0)
{
exp=sensor->expb;
@ -2525,12 +2525,9 @@ gl846_led_calibration (Genesys_Device * dev)
sanei_genesys_set_double(&dev->reg,REG_EXPB,exp[2]);
/* store in this struct since it is the one used by cache calibration */
dev->sensor.custom_regs.set_value(0x10, (exp[0] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, exp[0] & 0xff);
dev->sensor.custom_regs.set_value(0x12, (exp[1] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, exp[1] & 0xff);
dev->sensor.custom_regs.set_value(0x14, (exp[2] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, exp[2] & 0xff);
dev->sensor.exposure.red = exp[0];
dev->sensor.exposure.green = exp[1];
dev->sensor.exposure.blue = exp[2];
/* go back home */
if(move>20)

Wyświetl plik

@ -212,7 +212,7 @@ gl847_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
{
GenesysRegister *r;
Sensor_Profile *sensor;
int dpihw, i;
int dpihw;
uint16_t exp;
DBGSTART;
@ -233,21 +233,21 @@ gl847_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi)
sanei_genesys_set_reg_from_set(regs,REG_EXPDMY,(uint8_t)((sensor->expdummy) & 0xff));
/* if no calibration has been done, set default values for exposures */
exp = (dev->sensor.custom_regs.get_value(0x10) << 8) | dev->sensor.custom_regs.get_value(0x11);
exp = dev->sensor.exposure.red;
if(exp==0)
{
exp=sensor->expr;
}
sanei_genesys_set_double(regs,REG_EXPR,exp);
exp = (dev->sensor.custom_regs.get_value(0x12) << 8) | dev->sensor.custom_regs.get_value(0x13);
exp = dev->sensor.exposure.green;
if(exp==0)
{
exp=sensor->expg;
}
sanei_genesys_set_double(regs,REG_EXPG,exp);
exp = (dev->sensor.custom_regs.get_value(0x14) << 8) | dev->sensor.custom_regs.get_value(0x15);
exp = dev->sensor.exposure.blue;
if(exp==0)
{
exp=sensor->expb;
@ -2588,12 +2588,9 @@ gl847_led_calibration (Genesys_Device * dev)
sanei_genesys_set_double(&dev->reg,REG_EXPB,exp[2]);
/* store in this struct since it is the one used by cache calibration */
dev->sensor.custom_regs.set_value(0x10, (exp[0] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x11, exp[0] & 0xff);
dev->sensor.custom_regs.set_value(0x12, (exp[1] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x13, exp[1] & 0xff);
dev->sensor.custom_regs.set_value(0x14, (exp[2] >> 8) & 0xff);
dev->sensor.custom_regs.set_value(0x15, exp[2] & 0xff);
dev->sensor.exposure.red = exp[0];
dev->sensor.exposure.green = exp[1];
dev->sensor.exposure.blue = exp[2];
/* go back home */
if(move>20)

Wyświetl plik

@ -1371,7 +1371,7 @@ sanei_genesys_send_gamma_table (Genesys_Device * dev)
* @return SANE_STATUS_GOOD in case of success
*/
SANE_Status
sanei_genesys_asic_init (Genesys_Device * dev, int max_regs)
sanei_genesys_asic_init (Genesys_Device * dev, int /*max_regs*/)
{
SANE_Status status;
uint8_t val;

Wyświetl plik

@ -478,6 +478,10 @@ private:
std::vector<GenesysRegisterSetting> regs_;
};
struct SensorExposure {
uint16_t red, green, blue;
};
struct Genesys_Sensor {
Genesys_Sensor() = default;
@ -501,8 +505,9 @@ struct Genesys_Sensor {
// CCD target code (reference gain)
int gain_white_ref = 0;
// Initial exposure values, EXPR, EXPG and EXPB are contained in 0x10-0x15
// FIXME: move exposure to separate variable
// red, green and blue initial exposure values
SensorExposure exposure;
GenesysRegisterSettingSet custom_regs;
// red, green and blue gamma coefficient for default gamma tables
@ -522,6 +527,7 @@ struct Genesys_Sensor {
success &= 1 == ::fread(&sensor_pixels, sizeof(sensor_pixels), 1, fp);
success &= 1 == ::fread(&fau_gain_white_ref, sizeof(fau_gain_white_ref), 1, fp);
success &= 1 == ::fread(&gain_white_ref, sizeof(gain_white_ref), 1, fp);
success &= 1 == ::fread(&exposure, sizeof(exposure), 1, fp);
custom_regs.clear();
uint32_t custom_regs_count = 0;
@ -546,6 +552,7 @@ struct Genesys_Sensor {
::fwrite(&sensor_pixels, sizeof(sensor_pixels), 1, fp);
::fwrite(&fau_gain_white_ref, sizeof(fau_gain_white_ref), 1, fp);
::fwrite(&gain_white_ref, sizeof(gain_white_ref), 1, fp);
::fwrite(&exposure, sizeof(exposure), 1, fp);
uint32_t custom_regs_count = custom_regs.size();
::fwrite(&custom_regs_count, sizeof(custom_regs_count), 1, fp);
for (uint32_t i = 0; i < custom_regs_count; ++i) {
@ -1508,6 +1515,35 @@ inline void sanei_genesys_get_triple(Genesys_Register_Set* regs, uint16_t addr,
*value = regs->get24(addr);
}
inline void sanei_genesys_set_exposure(Genesys_Register_Set& regs, const SensorExposure& exposure)
{
regs.set8(0x10, (exposure.red >> 8) & 0xff);
regs.set8(0x11, exposure.red & 0xff);
regs.set8(0x12, (exposure.green >> 8) & 0xff);
regs.set8(0x13, exposure.green & 0xff);
regs.set8(0x14, (exposure.blue >> 8) & 0xff);
regs.set8(0x15, exposure.blue & 0xff);
}
inline uint16_t sanei_genesys_fixup_exposure_value(uint16_t value)
{
if ((value & 0xff00) == 0) {
value |= 0x100;
}
if ((value & 0x00ff) == 0) {
value |= 0x1;
}
return value;
}
inline SensorExposure sanei_genesys_fixup_exposure(SensorExposure exposure)
{
exposure.red = sanei_genesys_fixup_exposure_value(exposure.red);
exposure.green = sanei_genesys_fixup_exposure_value(exposure.green);
exposure.blue = sanei_genesys_fixup_exposure_value(exposure.blue);
return exposure;
}
extern SANE_Status
sanei_genesys_wait_for_home(Genesys_Device *dev);