kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			- added sanei_umax_pp_setauto
- added sanei_umax_pp_getauto - better color calibrationDEVEL_2_0_BRANCH-1
							rodzic
							
								
									acfec05565
								
							
						
					
					
						commit
						d7aefb2efe
					
				| 
						 | 
					@ -42,8 +42,12 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
#include <sys/time.h>
 | 
					#include <sys/time.h>
 | 
				
			||||||
#include <sys/types.h>
 | 
					#include <sys/types.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
| 
						 | 
					@ -80,6 +84,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "umax_pp_low.h"
 | 
					#include "umax_pp_low.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DMALLOC
 | 
				
			||||||
 | 
					#include "dmalloc.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __IO__
 | 
					#ifndef __IO__
 | 
				
			||||||
#define __IO__
 | 
					#define __IO__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -290,6 +298,7 @@ static int *ggBlue = ggamma;
 | 
				
			||||||
static int *ggRed = ggamma;
 | 
					static int *ggRed = ggamma;
 | 
				
			||||||
static int gParport = 0;
 | 
					static int gParport = 0;
 | 
				
			||||||
static int gCancel = 0;
 | 
					static int gCancel = 0;
 | 
				
			||||||
 | 
					static int gAutoSettings = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*****************************************************************************/
 | 
					/*****************************************************************************/
 | 
				
			||||||
| 
						 | 
					@ -524,11 +533,13 @@ sanei_umax_pp_InitPort (int port)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  /* allways start in compat mode (for probe) */
 | 
				
			||||||
 | 
						  mode = IEEE1284_MODE_COMPAT;
 | 
				
			||||||
 | 
						  ioctl (fd, PPSETMODE, &mode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  /* release port */
 | 
						  /* release port */
 | 
				
			||||||
	  if (!found)
 | 
						  if (!found)
 | 
				
			||||||
	    {
 | 
						    {
 | 
				
			||||||
	      mode = IEEE1284_MODE_COMPAT;
 | 
					 | 
				
			||||||
	      ioctl (fd, PPSETMODE, &mode);
 | 
					 | 
				
			||||||
	      ioctl (fd, PPRELEASE);
 | 
						      ioctl (fd, PPRELEASE);
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -894,6 +905,18 @@ sanei_umax_pp_setastra (int mod)
 | 
				
			||||||
  astra = mod;
 | 
					  astra = mod;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					sanei_umax_pp_getauto (void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return gAutoSettings;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					sanei_umax_pp_setauto (int autoset)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  gAutoSettings = autoset;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
NibbleRead (void)
 | 
					NibbleRead (void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -5299,7 +5322,7 @@ CmdSet (int cmd, int len, int *val)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  char *str = NULL;
 | 
						  char *str = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  str = malloc (3 * len);
 | 
						  str = malloc (3 * len + 1);
 | 
				
			||||||
	  if (str != NULL)
 | 
						  if (str != NULL)
 | 
				
			||||||
	    {
 | 
						    {
 | 
				
			||||||
	      for (i = 0; i < len; i++)
 | 
						      for (i = 0; i < len; i++)
 | 
				
			||||||
| 
						 | 
					@ -5387,7 +5410,7 @@ CmdGet (int cmd, int len, int *val)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      char *str = NULL;
 | 
					      char *str = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      str = malloc (3 * len);
 | 
					      str = malloc (3 * len + 1);
 | 
				
			||||||
      if (str != NULL)
 | 
					      if (str != NULL)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  for (i = 0; i < len; i++)
 | 
						  for (i = 0; i < len; i++)
 | 
				
			||||||
| 
						 | 
					@ -6191,20 +6214,29 @@ DumpRGB (int width, int height, unsigned char *data, char *name)
 | 
				
			||||||
  fclose (fic);
 | 
					  fclose (fic);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int EvalGain(int sum,int count)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					int gn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  /* 19000 is a little to bright */
 | 
				
			||||||
 | 
						  gn = (int) ((double) (18500 * count) / sum - 100 + 0.5);
 | 
				
			||||||
 | 
						  if (gn < 0)
 | 
				
			||||||
 | 
						    gn = 0;
 | 
				
			||||||
 | 
						  else if (gn > 255)
 | 
				
			||||||
 | 
						    gn = 255;
 | 
				
			||||||
 | 
						  return(gn);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
					ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
				
			||||||
			int *data)
 | 
								int *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int p, i, l;
 | 
					  int p, i, l;
 | 
				
			||||||
  int sum, gn, count;
 | 
					  int sum;
 | 
				
			||||||
  float coeff = 102.547;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  memset (data, 0, (3 * 5100 + 768 + 3) * sizeof (int));
 | 
					  memset (data, 0, (3 * 5100 + 768 + 3) * sizeof (int));
 | 
				
			||||||
  /* 102.547 */
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* 0 -> 5099 */
 | 
					  /* 0 -> 5099 */
 | 
				
			||||||
  for (i = 0; i < width; i++)
 | 
					  for (i = 0; i < width; i++)
 | 
				
			||||||
| 
						 | 
					@ -6213,21 +6245,9 @@ ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  /* compute average */
 | 
						  /* compute average */
 | 
				
			||||||
	  sum = 0;
 | 
						  sum = 0;
 | 
				
			||||||
	  count = 0;
 | 
					 | 
				
			||||||
	  for (l = 0; l < 66; l++)
 | 
						  for (l = 0; l < 66; l++)
 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
	      if (source[i + l * 5100 * 3] > 30)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
	    sum += source[i + l * 5100 * 3];
 | 
						    sum += source[i + l * 5100 * 3];
 | 
				
			||||||
		  count++;
 | 
						  data[i] = EvalGain(sum,l);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	  gn = (int) (((double) (250 * count) / sum - 0.984) * coeff + 0.5);
 | 
					 | 
				
			||||||
	  if (gn < 0)
 | 
					 | 
				
			||||||
	    gn = 0;
 | 
					 | 
				
			||||||
	  else if (gn > 255)
 | 
					 | 
				
			||||||
	    gn = 255;
 | 
					 | 
				
			||||||
	  data[i] = gn;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
	data[i] = 0x00;
 | 
						data[i] = 0x00;
 | 
				
			||||||
| 
						 | 
					@ -6240,21 +6260,9 @@ ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      /* compute average */
 | 
					      /* compute average */
 | 
				
			||||||
      sum = 0;
 | 
					      sum = 0;
 | 
				
			||||||
      count = 0;
 | 
					 | 
				
			||||||
      for (l = 0; l < 66; l++)
 | 
					      for (l = 0; l < 66; l++)
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	  if (source[i + l * 5100 * 3 + 5100] > 30)
 | 
					 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
	sum += source[i + l * 5100 * 3 + 5100];
 | 
						sum += source[i + l * 5100 * 3 + 5100];
 | 
				
			||||||
	      count++;
 | 
					      data[p + i] = EvalGain(sum,l);
 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
      gn = (int) (((double) (250 * count) / sum - 0.984) * coeff + 0.5);
 | 
					 | 
				
			||||||
      if (gn < 0)
 | 
					 | 
				
			||||||
	gn = 0;
 | 
					 | 
				
			||||||
      else if (gn > 255)
 | 
					 | 
				
			||||||
	gn = 255;
 | 
					 | 
				
			||||||
      data[p + i] = gn;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6266,21 +6274,9 @@ ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  /* compute average */
 | 
						  /* compute average */
 | 
				
			||||||
	  sum = 0;
 | 
						  sum = 0;
 | 
				
			||||||
	  count = 0;
 | 
					 | 
				
			||||||
	  for (l = 0; l < 66; l++)
 | 
						  for (l = 0; l < 66; l++)
 | 
				
			||||||
	    {
 | 
					 | 
				
			||||||
	      if (source[i + l * 5100 * 3 + 5100 * 2] > 30)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
	    sum += source[i + l * 5100 * 3 + 5100 * 2];
 | 
						    sum += source[i + l * 5100 * 3 + 5100 * 2];
 | 
				
			||||||
		  count++;
 | 
						  data[p + i] = EvalGain(sum,l);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	    }
 | 
					 | 
				
			||||||
	  gn = (int) (((double) (250 * count) / sum - 0.984) * coeff + 0.5);
 | 
					 | 
				
			||||||
	  if (gn < 0)
 | 
					 | 
				
			||||||
	    gn = 0;
 | 
					 | 
				
			||||||
	  else if (gn > 255)
 | 
					 | 
				
			||||||
	    gn = 255;
 | 
					 | 
				
			||||||
	  data[p + i] = gn;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
	data[p + i] = 0x00;
 | 
						data[p + i] = 0x00;
 | 
				
			||||||
| 
						 | 
					@ -6348,6 +6344,8 @@ ComputeCalibrationData (int color, int dpi, int width, unsigned char *source,
 | 
				
			||||||
  data[16070] = -1;
 | 
					  data[16070] = -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* move head by the distance given using precision or not */
 | 
					/* move head by the distance given using precision or not */
 | 
				
			||||||
/* 0: failed  
 | 
					/* 0: failed  
 | 
				
			||||||
   1: success					  */
 | 
					   1: success					  */
 | 
				
			||||||
| 
						 | 
					@ -6636,11 +6634,12 @@ MoveToOrigin (void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   returns if OK, else 0
 | 
					   returns if OK, else 0
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
WarmUp (int color, int *gain)
 | 
					WarmUp (int color, int *gain)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  unsigned char buffer[5300];
 | 
					  unsigned char buffer[5300];
 | 
				
			||||||
  int i, val;
 | 
					  int i, val, min, max;
 | 
				
			||||||
  int opsc02[9] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, -1 };
 | 
					  int opsc02[9] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, -1 };
 | 
				
			||||||
  int opsc04[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x00, 0x00, -1 };
 | 
					  int opsc04[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x00, 0x00, -1 };
 | 
				
			||||||
  int opsc10[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x08, 0x00, -1 };
 | 
					  int opsc10[9] = { 0x06, 0xF4, 0xFF, 0x81, 0x1B, 0x00, 0x08, 0x00, -1 };
 | 
				
			||||||
| 
						 | 
					@ -6675,7 +6674,6 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
    0x00, 0x40, 0xA4, 0x00, -1
 | 
					    0x00, 0x40, 0xA4, 0x00, -1
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  float offsetX, offsetY, offsetZ;
 | 
					  float offsetX, offsetY, offsetZ;
 | 
				
			||||||
  float avgX, avgY, avgZ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* really dirty hack: somethig is buggy in BW mode    */
 | 
					  /* really dirty hack: somethig is buggy in BW mode    */
 | 
				
			||||||
| 
						 | 
					@ -6836,9 +6834,9 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
  /* auto gain computing */
 | 
					  /* auto gain computing */
 | 
				
			||||||
	/***********************/
 | 
						/***********************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* color correction set to 63 06 */
 | 
					  /* color correction set to 53 05 */
 | 
				
			||||||
  /* for a start                   */
 | 
					  /* for a start                   */
 | 
				
			||||||
  *gain = 0x636;
 | 
					  *gain = 0x535;
 | 
				
			||||||
  CMDSETGET (2, 0x10, opsc18);
 | 
					  CMDSETGET (2, 0x10, opsc18);
 | 
				
			||||||
  CMDSETGET (8, 0x24, opsc39);
 | 
					  CMDSETGET (8, 0x24, opsc39);
 | 
				
			||||||
  opsc04[7] = opsc04[7] & 0x20;
 | 
					  opsc04[7] = opsc04[7] & 0x20;
 | 
				
			||||||
| 
						 | 
					@ -6884,13 +6882,16 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
      CMDGETBUF (4, 0x14B4, buffer);
 | 
					      CMDGETBUF (4, 0x14B4, buffer);
 | 
				
			||||||
      if (DBG_LEVEL >= 128)
 | 
					      if (DBG_LEVEL >= 128)
 | 
				
			||||||
	Dump (0x14B4, buffer, NULL);
 | 
						Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
      avgX = 0;
 | 
					      min = 255;
 | 
				
			||||||
 | 
					      max = 0;
 | 
				
			||||||
      for (i = 0; i < 0x14B4; i++)
 | 
					      for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
	avgX += buffer[i];
 | 
						{
 | 
				
			||||||
      avgX = avgX / i;
 | 
						  if (buffer[i] < min)
 | 
				
			||||||
      DBG (64, "Somme(X:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
						    min = buffer[i];
 | 
				
			||||||
	   (int) (avgX * i), avgX, avgX - offsetX);
 | 
						  if (buffer[i] > max)
 | 
				
			||||||
      while ((opsc04[6] < 0x0F) && (avgX - offsetX < 180.0))
 | 
						    max = buffer[i];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					      while ((opsc04[6] < 0x0F) && (max < 250))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  CMDSYNC (0x00);
 | 
						  CMDSYNC (0x00);
 | 
				
			||||||
	  opsc04[6]++;
 | 
						  opsc04[6]++;
 | 
				
			||||||
| 
						 | 
					@ -6899,12 +6900,15 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
	  CMDGETBUF (4, 0x0014B4, buffer);
 | 
						  CMDGETBUF (4, 0x0014B4, buffer);
 | 
				
			||||||
	  if (DBG_LEVEL >= 128)
 | 
						  if (DBG_LEVEL >= 128)
 | 
				
			||||||
	    Dump (0x14B4, buffer, NULL);
 | 
						    Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
	  avgX = 0;
 | 
						  min = 255;
 | 
				
			||||||
 | 
						  max = 0;
 | 
				
			||||||
	  for (i = 0; i < 0x14B4; i++)
 | 
						  for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
	    avgX += buffer[i];
 | 
						    {
 | 
				
			||||||
	  avgX = avgX / i;
 | 
						      if (buffer[i] < min)
 | 
				
			||||||
	  DBG (16, "Somme(X:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
							min = buffer[i];
 | 
				
			||||||
	       (int) (avgX * i), avgX, avgX - offsetX);
 | 
						      if (buffer[i] > max)
 | 
				
			||||||
 | 
							max = buffer[i];
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      *gain = (*gain & 0xFF) + 256 * (opsc04[6] - 1);
 | 
					      *gain = (*gain & 0xFF) + 256 * (opsc04[6] - 1);
 | 
				
			||||||
| 
						 | 
					@ -6931,14 +6935,17 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
      CMDGETBUF (4, 0x14B4, buffer);
 | 
					      CMDGETBUF (4, 0x14B4, buffer);
 | 
				
			||||||
      if (DBG_LEVEL >= 128)
 | 
					      if (DBG_LEVEL >= 128)
 | 
				
			||||||
	Dump (0x14B4, buffer, NULL);
 | 
						Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
      avgY = 0;
 | 
					      min = 255;
 | 
				
			||||||
 | 
					      max = 0;
 | 
				
			||||||
      for (i = 0; i < 0x14B4; i++)
 | 
					      for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
	avgY += buffer[i];
 | 
						{
 | 
				
			||||||
      avgY = avgY / i;
 | 
						  if (buffer[i] < min)
 | 
				
			||||||
      DBG (64, "Somme(Y:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
						    min = buffer[i];
 | 
				
			||||||
	   (int) (avgY * i), avgY, avgY - offsetY);
 | 
						  if (buffer[i] > max)
 | 
				
			||||||
 | 
						    max = buffer[i];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      while ((opsc04[6] < 0x0F) && (avgY - offsetY < 180.0))
 | 
					      while ((opsc04[6] < 0x0F) && (max < 250))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  CMDSYNC (0x00);
 | 
						  CMDSYNC (0x00);
 | 
				
			||||||
	  opsc04[6]++;
 | 
						  opsc04[6]++;
 | 
				
			||||||
| 
						 | 
					@ -6947,12 +6954,15 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
	  CMDGETBUF (4, 0x0014B4, buffer);
 | 
						  CMDGETBUF (4, 0x0014B4, buffer);
 | 
				
			||||||
	  if (DBG_LEVEL >= 128)
 | 
						  if (DBG_LEVEL >= 128)
 | 
				
			||||||
	    Dump (0x14B4, buffer, NULL);
 | 
						    Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
	  avgY = 0;
 | 
						  min = 255;
 | 
				
			||||||
 | 
						  max = 0;
 | 
				
			||||||
	  for (i = 0; i < 0x14B4; i++)
 | 
						  for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
	    avgY += buffer[i];
 | 
						    {
 | 
				
			||||||
	  avgY = avgY / i;
 | 
						      if (buffer[i] < min)
 | 
				
			||||||
	  DBG (64, "Somme(Y:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
							min = buffer[i];
 | 
				
			||||||
	       (int) (avgY * i), avgY, avgY - offsetY);
 | 
						      if (buffer[i] > max)
 | 
				
			||||||
 | 
							max = buffer[i];
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      *gain = (*gain & 0xFF0) + (opsc04[6] - 1);
 | 
					      *gain = (*gain & 0xFF0) + (opsc04[6] - 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -6992,13 +7002,16 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
  CMDGETBUF (4, 0x14B4, buffer);
 | 
					  CMDGETBUF (4, 0x14B4, buffer);
 | 
				
			||||||
  if (DBG_LEVEL >= 128)
 | 
					  if (DBG_LEVEL >= 128)
 | 
				
			||||||
    Dump (0x14B4, buffer, NULL);
 | 
					    Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
  avgZ = 0;
 | 
					  min = 255;
 | 
				
			||||||
 | 
					  max = 0;
 | 
				
			||||||
  for (i = 0; i < 0x14B4; i++)
 | 
					  for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
    avgZ += buffer[i];
 | 
					    {
 | 
				
			||||||
  avgZ = avgZ / i;
 | 
					      if (buffer[i] < min)
 | 
				
			||||||
  DBG (64, "Somme(Z:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
						min = buffer[i];
 | 
				
			||||||
       (int) (avgZ * i), avgZ, avgZ - offsetZ);
 | 
					      if (buffer[i] > max)
 | 
				
			||||||
  while ((opsc04[6] < 0x07) && (avgZ - offsetZ < 180.0))
 | 
						max = buffer[i];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  while ((opsc04[6] < 0x07) && (max < 250))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      CMDSYNC (0x00);
 | 
					      CMDSYNC (0x00);
 | 
				
			||||||
      opsc04[6]++;
 | 
					      opsc04[6]++;
 | 
				
			||||||
| 
						 | 
					@ -7007,14 +7020,17 @@ WarmUp (int color, int *gain)
 | 
				
			||||||
      CMDGETBUF (4, 0x0014B4, buffer);
 | 
					      CMDGETBUF (4, 0x0014B4, buffer);
 | 
				
			||||||
      if (DBG_LEVEL >= 128)
 | 
					      if (DBG_LEVEL >= 128)
 | 
				
			||||||
	Dump (0x14B4, buffer, NULL);
 | 
						Dump (0x14B4, buffer, NULL);
 | 
				
			||||||
      avgZ = 0;
 | 
					      min = 255;
 | 
				
			||||||
 | 
					      max = 0;
 | 
				
			||||||
      for (i = 0; i < 0x14B4; i++)
 | 
					      for (i = 0; i < 0x14B4; i++)
 | 
				
			||||||
	avgZ += buffer[i];
 | 
						{
 | 
				
			||||||
      avgZ = avgZ / i;
 | 
						  if (buffer[i] < min)
 | 
				
			||||||
      DBG (64, "Somme(Z:%02X)=%d, moyenne=%8.4f(%f)\n", opsc04[6],
 | 
						    min = buffer[i];
 | 
				
			||||||
	   (int) (avgZ * i), avgZ, avgZ - offsetZ);
 | 
						  if (buffer[i] > max)
 | 
				
			||||||
 | 
						    max = buffer[i];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
  *gain = (*gain & 0xF0F) + opsc04[6] * 16;
 | 
					    }
 | 
				
			||||||
 | 
					  *gain = (*gain & 0xF0F) + (opsc04[6] - 1) * 16;
 | 
				
			||||||
  DBG (1, "Warm-up done ...\n");
 | 
					  DBG (1, "Warm-up done ...\n");
 | 
				
			||||||
  return (1);
 | 
					  return (1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -7088,7 +7104,7 @@ ColorCalibration (int color, int dpi, int gain, int highlight, int width,
 | 
				
			||||||
      opsc41[30] = 0xEE;
 | 
					      opsc41[30] = 0xEE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* step back by 66 ticks:                     */
 | 
					  /* step back by 67 ticks:                     */
 | 
				
			||||||
  /* since we're going to scan 66 lines of data */
 | 
					  /* since we're going to scan 66 lines of data */
 | 
				
			||||||
  /* which are going to be used as calibration  */
 | 
					  /* which are going to be used as calibration  */
 | 
				
			||||||
  /* data                                       */
 | 
					  /* data                                       */
 | 
				
			||||||
| 
						 | 
					@ -7100,14 +7116,19 @@ ColorCalibration (int color, int dpi, int gain, int highlight, int width,
 | 
				
			||||||
  CMDSYNC (0x00);
 | 
					  CMDSYNC (0x00);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* get calibration data */
 | 
					  /* get calibration data */
 | 
				
			||||||
  /*opsc32[10] = gain / 16;
 | 
					  if (sanei_umax_pp_getauto ())
 | 
				
			||||||
     opsc32[11] = ((highlight / 16) & 0xF0) | (gain % 16);
 | 
					    {				/* auto settings doesn't use highlight */
 | 
				
			||||||
     opsc32[12] = highlight % 256; */
 | 
					      highlight = 0x000;
 | 
				
			||||||
  /* add there behaviour based on manual/auto setting */
 | 
					    }
 | 
				
			||||||
  /* fixed limit for manual settings */
 | 
					  else
 | 
				
			||||||
  opsc32[10] = 0x77;
 | 
					    {				/* manual settings */
 | 
				
			||||||
  opsc32[11] = 0x07;
 | 
					      gain = 0x777;
 | 
				
			||||||
  opsc32[12] = 0x00;
 | 
					      highlight = 0x000;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  opsc32[10] = gain / 16;
 | 
				
			||||||
 | 
					  opsc32[11] = gain % 16 | ((highlight / 16) & 0xF0);
 | 
				
			||||||
 | 
					  opsc32[12] = highlight % 256;
 | 
				
			||||||
 | 
					  DBG (8, "USING 0x%03X gain, 0x%03X highlight\n", gain, highlight);
 | 
				
			||||||
  if (sanei_umax_pp_getastra () == 1600)
 | 
					  if (sanei_umax_pp_getastra () == 1600)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      opsc32[13] = 0x03;
 | 
					      opsc32[13] = 0x03;
 | 
				
			||||||
| 
						 | 
					@ -7172,7 +7193,7 @@ ColorCalibration (int color, int dpi, int gain, int highlight, int width,
 | 
				
			||||||
      Dump (size, buffer, NULL);
 | 
					      Dump (size, buffer, NULL);
 | 
				
			||||||
      if (color >= RGB_MODE)
 | 
					      if (color >= RGB_MODE)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  DumpRVB (5100, 70, buffer, NULL);
 | 
						  DumpRVB (5100, 66, buffer, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -7180,6 +7201,7 @@ ColorCalibration (int color, int dpi, int gain, int highlight, int width,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ComputeCalibrationData (color, dpi, width, buffer, calibration);
 | 
					  ComputeCalibrationData (color, dpi, width, buffer, calibration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DBG (1, "Color calibration done ...\n");
 | 
					  DBG (1, "Color calibration done ...\n");
 | 
				
			||||||
  return (1);
 | 
					  return (1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -7472,6 +7494,7 @@ sanei_umax_pp_StartScan (int x, int y, int width, int height, int dpi,
 | 
				
			||||||
  int max = 0;
 | 
					  int max = 0;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DBG (8, "StartScan(%d,%d,%d,%d,%d,%d,%X);\n", x, y, width, height, dpi,
 | 
					  DBG (8, "StartScan(%d,%d,%d,%d,%d,%d,%X);\n", x, y, width, height, dpi,
 | 
				
			||||||
       color, gain);
 | 
					       color, gain);
 | 
				
			||||||
  buffer = (unsigned char *) malloc (2096100);
 | 
					  buffer = (unsigned char *) malloc (2096100);
 | 
				
			||||||
| 
						 | 
					@ -7624,7 +7647,7 @@ sanei_umax_pp_StartScan (int x, int y, int width, int height, int dpi,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* adjust gain and color offset */
 | 
					  /* adjust gain and color offset */
 | 
				
			||||||
  /* red*256+green*16+blue        */
 | 
					  /* red*256+green*16+blue        */
 | 
				
			||||||
  if (gain == 0x0)
 | 
					  if (sanei_umax_pp_getauto ())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      if (WarmUp (color, &gain) == 0)
 | 
					      if (WarmUp (color, &gain) == 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					@ -7668,7 +7691,7 @@ sanei_umax_pp_StartScan (int x, int y, int width, int height, int dpi,
 | 
				
			||||||
    /* than scan & move at high resolution               */
 | 
					    /* than scan & move at high resolution               */
 | 
				
			||||||
    distance = 0;
 | 
					    distance = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* work around a bug which has yet to be solved */
 | 
					  /* work around some strange unresolved bug */
 | 
				
			||||||
  y += 8;
 | 
					  y += 8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* move fast to scan target if possible */
 | 
					  /* move fast to scan target if possible */
 | 
				
			||||||
| 
						 | 
					@ -7861,26 +7884,20 @@ sanei_umax_pp_StartScan (int x, int y, int width, int height, int dpi,
 | 
				
			||||||
	      max = 36;
 | 
						      max = 36;
 | 
				
			||||||
	      break;
 | 
						      break;
 | 
				
			||||||
	    default:
 | 
						    default:
 | 
				
			||||||
	      printf ("WARNING: unknown channel %d\n", channel);
 | 
					 | 
				
			||||||
	      channel = 0;
 | 
						      channel = 0;
 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	  if (channel > 0)
 | 
						  if (channel > 0)
 | 
				
			||||||
	    {
 | 
						    {
 | 
				
			||||||
	      printf ("Channel %d:", channel);
 | 
					 | 
				
			||||||
	      ptr = line + 6;
 | 
						      ptr = line + 6;
 | 
				
			||||||
	      for (i = 0; (i < max) && ((ptr - line) < strlen (line)); i++)
 | 
						      for (i = 0; (i < max) && ((ptr - line) < strlen (line)); i++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
		  if (ptr[0] != '-')
 | 
							  if (ptr[0] != '-')
 | 
				
			||||||
		    {
 | 
							    {
 | 
				
			||||||
		      sscanf (ptr, "%02X", base + i);
 | 
							      sscanf (ptr, "%02X", base + i);
 | 
				
			||||||
		      printf ("*");
 | 
					 | 
				
			||||||
		    }
 | 
							    }
 | 
				
			||||||
		  else
 | 
							  else
 | 
				
			||||||
		    printf (" ");
 | 
					 | 
				
			||||||
		    ptr += 3;
 | 
							    ptr += 3;
 | 
				
			||||||
		  printf ("0x%02X ", base[i]);
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	      printf ("\n");
 | 
					 | 
				
			||||||
	    }
 | 
						    }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
      fclose (f);
 | 
					      fclose (f);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Ładowanie…
	
		Reference in New Issue