improved fastforward stuff, cleanup work.

merge-requests/1/head
Gerhard Jaeger 2004-07-16 11:45:11 +00:00
rodzic 5b730abe4c
commit 1faef6ebf3
4 zmienionych plików z 274 dodań i 237 usunięć

Wyświetl plik

@ -31,8 +31,8 @@
* - 0.47 - cleanup work
* - added gamma to struct HWDefault
* - 0.48 - added DEVCAPSFLAG_LargeTPA
* - added min_ffstep to ClkMotorDef
* - added _WAF_BIN_FROM_COLOR and _WAF_GRAY_FROM_COLOR
* - added dHighSpeed to struct HwDefault
* .
* <hr>
* This file is part of the SANE package.
@ -383,6 +383,7 @@ typedef struct HWDefault
{
double dMaxMotorSpeed; /* Inches/second, max. scan speed */
double dMaxMoveSpeed; /* Inches/second, max. move speed */
double dHighSpeed; /* for speeding up the sensor */
double dIntegrationTimeLowLamp;
double dIntegrationTimeHighLamp;
u_short wMotorDpi; /* Full step DPI */
@ -624,8 +625,7 @@ typedef struct {
u_char pwm_fast; /**< PWM during fast movement */
u_char pwm_duty_fast; /**< PWM duty during fast movement */
u_char mclk_fast; /**< MCLK during fast movement */
u_short min_ffstep; /**< minimal ffstep size for speedup,
0xffff disables the stuff */
/**
* here we define some ranges for better supporting
* non-Plustek devices with it's different hardware

Wyświetl plik

@ -709,6 +709,7 @@ static HWDef Hw0x07B3_0x0017_0 =
{
1.5, /* dMaxMotorSpeed (Max_Speed) */
1.2, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
9, /* dIntegrationTimeLowLamp */
9, /* dIntegrationTimeHighLamp */
300, /* wMotorDpi (Full step DPI) */
@ -773,7 +774,7 @@ static HWDef Hw0x07B3_0x0017_0 =
*/
static HWDef Hw0x07B3_0x0007_0 =
{
1.5, 1.2,
1.5, 1.2, 0.0,
9, 9,
300,
512,
@ -818,7 +819,7 @@ static HWDef Hw0x07B3_0x0007_0 =
*/
static HWDef Hw0x07B3_0x0007_2 =
{
1.4, 1.2,
1.4, 1.2, 0.0,
9, 9,
600,
512,
@ -863,7 +864,7 @@ static HWDef Hw0x07B3_0x0007_2 =
*/
static HWDef Hw0x07B3_0x0007_4 =
{
1.1, 0.9,
1.1, 0.9, 0.0,
12, 12,
600,
2048,
@ -908,7 +909,7 @@ static HWDef Hw0x07B3_0x0007_4 =
*/
static HWDef Hw0x07B3_0x000F_0 =
{
1.5, 1.0,
1.5, 1.0, 0.0,
9, 9,
300,
512,
@ -953,7 +954,7 @@ static HWDef Hw0x07B3_0x000F_0 =
*/
static HWDef Hw0x07B3_0x0013_0 =
{
1.5, 1.2,
1.5, 1.2, 0.0,
9, 9,
300,
512,
@ -998,7 +999,7 @@ static HWDef Hw0x07B3_0x0013_0 =
*/
static HWDef Hw0x07B3_0x0013_4 =
{
1.0, 0.9,
1.0, 0.9, 0.0,
12, 12,
600,
2048,
@ -1043,7 +1044,7 @@ static HWDef Hw0x07B3_0x0013_4 =
*/
static HWDef Hw0x07B3_0x000F_4 =
{
1.1, 0.9,
1.1, 0.9, 0.0,
12, 12,
600,
2048,
@ -1088,7 +1089,7 @@ static HWDef Hw0x07B3_0x000F_4 =
*/
static HWDef Hw0x07B3_0x0016_4 =
{
1.0, 0.9,
1.0, 0.9, 0.0,
12, 12,
600,
2048,
@ -1133,41 +1134,41 @@ static HWDef Hw0x07B3_0x0016_4 =
*/
static HWDef Hw0x07B3_0x0017_4 =
{
1.0, 0.9,
12, 12,
600,
1.0, 0.9, 0.0,
12, 12,
600,
2048,
8, 8,
8, 8,
4095, 4095,
0x06, 0x20, 0x2f, 0x2a,
0x06, 0x20, 0x2f, 0x2a,
{2, 7, 5, 6, 6, 7, 0, 0, 0, 5},
{20, 4, 13, 16, 19, 22, 0, 0, 23, 11},
_GREEN_CH,
0,
1,
1,
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
1,
13,
62,
320,
10684,
13,
62,
320,
10684,
0,
16383,
0,
0,
0,
16383,
3,
0,
0x1e,
0xa8,
0,
3,
0,
0x1e,
0xa8,
0,
0xff,
10,
48,
0x0d, 0x22, 0x82, 0x88,
10,
48,
0x0d, 0x22, 0x82, 0x88,
0, 0, 0,
_LM9832,
MODEL_KaoHsiung,
@ -1178,7 +1179,7 @@ static HWDef Hw0x07B3_0x0017_4 =
*/
static HWDef Hw0x07B3_0x0017_1 =
{
1.5, 1.5,
1.5, 1.5, 0.0,
9, 9,
200,
2048,
@ -1223,26 +1224,26 @@ static HWDef Hw0x07B3_0x0017_1 =
*/
static HWDef Hw0x07B3_0x0012_0 =
{
1.5, 1.4,
9, 9,
600,
2048,
4, 5,
3000, 4095,
0x02, 0x04, 0x37, 0x13,
{2, 7, 0, 1, 0, 0, 0, 0, 4, 0},
{5, 23, 1, 3, 0, 0, 0, 12, 10, 22},
1.5, 1.4, 0.0,
9, 9,
600,
2048,
4, 5,
3000, 4095,
0x02, 0x04, 0x37, 0x13,
{2, 7, 0, 1, 0, 0, 0, 0, 4, 0},
{5, 23, 1, 3, 0, 0, 0, 12, 10, 22},
_GREEN_CH,
0,
1,
1,
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
1,
14,
62,
110,
5400,
14,
62,
110,
5400,
0,
16383,
0,
@ -1268,26 +1269,26 @@ static HWDef Hw0x07B3_0x0012_0 =
*/
static HWDef Hw0x07B3_0x0017_2 =
{
1.5, 1.2,
9, 9,
300,
512,
4, 5,
3000, 4095,
0x02, 0, 0x2f, 0x36,
1.5, 1.2, 0.0,
9, 9,
300,
512,
4, 5,
3000, 4095,
0x02, 0, 0x2f, 0x36,
{2, 7, 0, 1, 0, 0, 0, 0, 4, 0},
{5, 0, 1, 4, 7, 10, 0, 0, 12, 0},
_GREEN_CH,
0,
1,
1,
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
1,
16,
64,
110,
5416,
16,
64,
110,
5416,
0,
16383,
0,
@ -1313,37 +1314,37 @@ static HWDef Hw0x07B3_0x0017_2 =
*/
static HWDef Hw0x07B3_0x0017_3 =
{
1.5, 1.2,
9, 9,
300,
1.5, 1.2, 0.0,
9, 9,
300,
512,
4, 5,
3000, 4095,
0x02, 0x04, 0x37, 0x13,
{2, 7, 0, 1, 0, 0, 0, 0, 4, 0},
{5, 23, 1, 4, 7, 10, 0, 0, 11, 23},
4, 5,
3000, 4095,
0x02, 0x04, 0x37, 0x13,
{2, 7, 0, 1, 0, 0, 0, 0, 4, 0},
{5, 23, 1, 4, 7, 10, 0, 0, 11, 23},
_GREEN_CH,
0,
1,
1,
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
1,
14,
62,
110,
5400,
14,
62,
110,
5400,
0,
16383,
0,
0,
0,
16383,
3,
0,
3,
0,
0x1e,
0xa8,
0,
0xa8,
0,
0xff,
64,
20,
@ -1358,28 +1359,29 @@ static HWDef Hw0x07B3_0x0017_3 =
*/
static HWDef Hw0x03F0_0x0505 =
{
1.05, /* dMaxMotorSpeed (Max_Speed) */
1.05, /* dMaxMoveSpeed (Max_Speed) */
6, /* dIntegrationTimeLowLamp */
8, /* dIntegrationTimeHighLamp */
600, /* ok wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
6, /* dMinIntegrationTimeLowres (ms) */
6, /* dMinIntegrationTimeHighres (ms) */
0, /* wGreenPWMDutyCycleLow */
0, /* wGreenPWMDutyCycleHigh */
0x02, /* bSensorConfiguration (0x0b) */
0x00, /* bReg_0x0c */
0x2F, /* bReg_0x0d */
0x13, /* bReg_0x0e */
/* bReg_0x0f_Mono[10] (0x0f to 0x18) */
1.05, /* dMaxMotorSpeed (Max_Speed) */
1.05, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
6, /* dIntegrationTimeLowLamp */
8, /* dIntegrationTimeHighLamp */
600, /* wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
6, /* dMinIntegrationTimeLowres (ms) */
6, /* dMinIntegrationTimeHighres (ms) */
0, /* wGreenPWMDutyCycleLow */
0, /* wGreenPWMDutyCycleHigh */
0x02, /* bSensorConfiguration (0x0b) */
0x00, /* bReg_0x0c */
0x2F, /* bReg_0x0d */
0x13, /* bReg_0x0e */
/* bReg_0x0f_Mono[10] (0x0f to 0x18) */
{ 0x02, 0x07, 0x01, 0x02, 0x02, 0x03, 0x00, 0x00, 0x04, 0x07 },
/* bReg_0x0f_Color[10] (0x0f to 0x18) */
/* bReg_0x0f_Color[10] (0x0f to 0x18) */
{ 0x08, 0x17, 0x00, 0x03, 0x08, 0x0b, 0x00, 0x00, 0x0a, 0x14 },
_GREEN_CH, /* bReg_0x26 color mode - bits 4 and 5 */
_GREEN_CH, /* bReg_0x26 color mode - bits 4 and 5 */
0, /* bReg 0x27 color mode */
1, /* bReg 0x29 illumination mode */
@ -1427,6 +1429,7 @@ static HWDef Hw0x03F0_0x0605 =
{
1.05, /* dMaxMotorSpeed (Max_Speed) */
1.05, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
6, /* dIntegrationTimeLowLamp */
8, /* dIntegrationTimeHighLamp */
600, /* ok wMotorDpi (Full step DPI) */
@ -1494,6 +1497,7 @@ static HWDef Hw0x0400_0x1000_0 =
{
1.25, /* ok dMaxMotorSpeed (Max_Speed) */
1.25, /* ok dMaxMoveSpeed (Max_Speed) */
0.0, /* ok dHighSpeed */
12, /* ok dIntegrationTimeLowLamp */
12, /* ok dIntegrationTimeHighLamp */
600, /* ok wMotorDpi (Full step DPI) */
@ -1552,6 +1556,7 @@ static HWDef Hw0x0400_0x1001_1 =
{
1.25, /* ok dMaxMotorSpeed (Max_Speed) */
1.25, /* ok dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
12, /* ok dIntegrationTimeLowLamp */
12, /* ok dIntegrationTimeHighLamp */
600, /* ok wMotorDpi (Full step DPI) */
@ -1608,18 +1613,19 @@ static HWDef Hw0x0400_0x1001_1 =
/** BearPaw 2400 */
static HWDef Hw0x0400_0x1001_0 =
{
1.0 /* 1.8*/, /* ok dMaxMotorSpeed (Max_Speed) */
0.9 /*1.8 */, /* ok dMaxMoveSpeed (Max_Speed) */
1.0/*1.8*/, /* ok dMaxMotorSpeed (Max_Speed) */
0.9/*1.8*/, /* ok dMaxMoveSpeed (Max_Speed) */
0.0, /* ok dHighSpeed */
12, /* ok dIntegrationTimeLowLamp */
12, /* ok dIntegrationTimeHighLamp */
1200 /* 600*/ , /* ok wMotorDpi (Full step DPI) */
1200 /* 600*/ , /* ok wMotorDpi (Full step DPI) */
2048, /* ok wRAMSize (KB) */
9, /* ok dMinIntegrationTimeLowres (ms) */
9, /* ok dMinIntegrationTimeHighres (ms) */
1169, /* ok wGreenPWMDutyCycleLow (reg 0x2a + 0x2b) */
1169, /* ok wGreenPWMDutyCycleHigh (reg 0x2a + 0x2b) */
0x02 /* 0x06*/, /* ok bSensorConfiguration (0x0b) */
0x02 /*0x06*/, /* ok bSensorConfiguration (0x0b) */
0x3c, /* ok sensor control settings (reg 0x0c) */
0x3f, /* ok sensor control settings (reg 0x0d) */
0x11, /* ok sensor control settings (reg 0x0e) */
@ -1673,6 +1679,7 @@ static HWDef Hw0x04B8_0x010F =
{
0.8, /* dMaxMotorSpeed (Max_Speed) */
0.8, /* dMaxMoveSpeed (Max_Speed) */
4.1, /* dHighSpeed */
12, /* dIntegrationTimeLowLamp */
12, /* dIntegrationTimeHighLamp */
600, /* wMotorDpi (Full step DPI) */
@ -1738,6 +1745,7 @@ static HWDef Hw0x04B8_0x011D =
{
0.9, /* dMaxMotorSpeed (Max_Speed) */
0.8, /* dMaxMoveSpeed (Max_Speed) */
4.1, /* dHighSpeed */
12, /* dIntegrationTimeLowLamp */
12, /* dIntegrationTimeHighLamp */
600, /* wMotorDpi (Full step DPI) */
@ -1803,6 +1811,7 @@ static HWDef Hw0x1606_0x0060 =
{
1.5, /* dMaxMotorSpeed (Max_Speed) */
0.8, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
9, /* dIntegrationTimeLowLamp */
9, /* dIntegrationTimeHighLamp */
600, /* wMotorDpi (Full step DPI) */
@ -1869,6 +1878,7 @@ static HWDef Hw0x1606_0x0160 =
{
1.1, /* dMaxMotorSpeed (Max_Speed) */
0.9, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
9, /* dIntegrationTimeLowLamp */
9, /* dIntegrationTimeHighLamp */
600, /* wMotorDpi (Full step DPI) */
@ -1933,9 +1943,10 @@ static HWDef Hw0x1606_0x0160 =
/** Canon 650/656 */
static HWDef Hw0x04A9_0x2206 =
{
0.86, /* dMaxMotorSpeed (Max_Speed) */
0.243, /* dMaxMoveSpeed (Max_Speed) */
100, /* dIntegrationTimeLowLamp */
0.86, /* dMaxMotorSpeed (Max_Speed) */
0.243, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
100, /* dIntegrationTimeLowLamp */
100, /* dIntegrationTimeHighLamp */
1200, /* wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
@ -2003,6 +2014,7 @@ static HWDef Hw0x04A9_0x2207 =
{
0.72, /* dMaxMotorSpeed (Max_Speed) */
0.36, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
100, /* wIntegrationTimeLowLamp */
100, /* wIntegrationTimeHighLamp */
1200, /* wMotorDpi (Full step DPI) */
@ -2068,76 +2080,75 @@ static HWDef Hw0x04A9_0x2207 =
/** Canon D660U */
static HWDef Hw0x04A9_0x2208 =
{
1.2, /* dMaxMotorSpeed (Max_Speed) */
1.1, /* dMaxMoveSpeed (Max_Speed) */
9, /* dIntegrationTimeLowLamp */
9, /* dIntegrationTimeHighLamp */
300, /* wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
8, /* dMinIntegrationTimeLowres (ms) */
8, /* dMinIntegrationTimeHighres (ms) */
4095, /* wGreenPWMDutyCycleLow (reg 0x2a + 0x2b) */
4095, /* wGreenPWMDutyCycleHigh (reg 0x2a + 0x2b) */
1.2, /* dMaxMotorSpeed (Max_Speed) */
1.1, /* dMaxMoveSpeed (Max_Speed) */
3.5, /* dHighSpeed */
9, /* dIntegrationTimeLowLamp */
9, /* dIntegrationTimeHighLamp */
300, /* wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
8, /* dMinIntegrationTimeLowres (ms) */
8, /* dMinIntegrationTimeHighres (ms) */
4095, /* wGreenPWMDutyCycleLow (reg 0x2a + 0x2b) */
4095, /* wGreenPWMDutyCycleHigh (reg 0x2a + 0x2b) */
0x02, /* bSensorConfiguration (0x0b) */
0x60, /* sensor control settings (reg 0x0c) */
0x2f, /* sensor control settings (reg 0x0d) */
0x13, /* sensor control settings (reg 0x0e) */
0x02, /* bSensorConfiguration (0x0b) */
0x60, /* sensor control settings (reg 0x0c) */
0x2f, /* sensor control settings (reg 0x0d) */
0x13, /* sensor control settings (reg 0x0e) */
#if 0
{0x02, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x0b },
#endif
{0x06, 0x17, 0x01, 0x03, 0x05, 0x07, 0x00, 0x00, 0x0b },
{0x06, 0x17, 0x01, 0x03, 0x05, 0x07, 0x00, 0x00, 0x0b },
_GREEN_CH,
0, /* bReg 0x27 color mode */
1, /* bReg 0x29 illumination mode */
{0x06, 0x17, 0x01, 0x03, 0x05, 0x07, 0x00, 0x00, 0x0b },
{0x06, 0x17, 0x01, 0x03, 0x05, 0x07, 0x00, 0x00, 0x0b },
_GREEN_CH,
0, /* bReg 0x27 color mode */
1, /* bReg 0x29 illumination mode */
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
/* illumination mode settings (not used for CCD devices) */
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
0, /* StepperPhaseCorrection (reg 0x1a + 0x1b) */
13, /* bOpticBlackStart (reg 0x1c) */
33, /* bOpticBlackEnd (reg 0x1d) */
64, /* wActivePixelsStart (reg 0x1e + 0x1f) */
5440, /* wLineEnd (reg 0x20 + 0x21) */
0, /* StepperPhaseCorrection (reg 0x1a + 0x1b) */
13, /* bOpticBlackStart (reg 0x1c) */
33, /* bOpticBlackEnd (reg 0x1d) */
64, /* wActivePixelsStart (reg 0x1e + 0x1f) */
5440, /* wLineEnd (reg 0x20 + 0x21) */
16383, /* red lamp on (reg 0x2c + 0x2d) */
1, /* red lamp off (reg 0x2e + 0x2f) */
0, /* green lamp on (reg 0x30 + 0x31) */
0, /* green lamp off (reg 0x32 + 0x33) */
0, /* blue lamp on (reg 0x34 + 0x35) */
0, /* blue lamp off (reg 0x36 + 0x37) */
16383, /* red lamp on (reg 0x2c + 0x2d) */
1, /* red lamp off (reg 0x2e + 0x2f) */
0, /* green lamp on (reg 0x30 + 0x31) */
0, /* green lamp off (reg 0x32 + 0x33) */
0, /* blue lamp on (reg 0x34 + 0x35) */
0, /* blue lamp off (reg 0x36 + 0x37) */
3, /* stepper motor control (reg 0x45) */
0, /* wStepsAfterPaperSensor2 (reg 0x4c + 0x4d) */
0x20, /* steps to reverse when buffer is full reg 0x50) */
0xfc, /* acceleration profile (reg 0x51) */
0, /* lines to process (reg 0x54) */
0, /* kickstart (reg 0x55) */
0x02, /* pwm freq (reg 0x56) */
0x1f, /* pwm duty cycle (reg 0x57) */
0x05, /* Paper sense (reg 0x58) */
0x44, /* misc io12 (reg 0x59) */
0x14, /* misc io34 (reg 0x5a) */
0x11, /* misc io56 (reg 0x5b) */
0, /* test mode ADC Output CODE MSB (reg 0x5c) */
0, /* test mode ADC Output CODE LSB (reg 0x5d) */
0, /* test mode (reg 0x5e) */
_LM9832,
MODEL_CANONCCD1200,
1.5
3, /* stepper motor control (reg 0x45) */
0, /* wStepsAfterPaperSensor2 (reg 0x4c + 0x4d) */
0x20, /* steps to reverse when buffer is full reg 0x50) */
0xfc, /* acceleration profile (reg 0x51) */
0, /* lines to process (reg 0x54) */
0, /* kickstart (reg 0x55) */
0x02, /* pwm freq (reg 0x56) */
0x1f, /* pwm duty cycle (reg 0x57) */
0x05, /* Paper sense (reg 0x58) */
0x44, /* misc io12 (reg 0x59) */
0x14, /* misc io34 (reg 0x5a) */
0x11, /* misc io56 (reg 0x5b) */
0, /* test mode ADC Output CODE MSB (reg 0x5c) */
0, /* test mode ADC Output CODE LSB (reg 0x5d) */
0, /* test mode (reg 0x5e) */
_LM9832,
MODEL_CANONCCD1200,
1.5
};
/** Canon 670/676/LiDE20 */
static HWDef Hw0x04A9_0x220D =
{
0.86, /* dMaxMotorSpeed (Max_Speed) */
0.243, /* dMaxMoveSpeed (Max_Speed) */
100, /* dIntegrationTimeLowLamp */
100, /* dIntegrationTimeHighLamp */
1200, /* wMotorDpi (Full step DPI) */
0.86, /* dMaxMotorSpeed (Max_Speed) */
0.243, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
100, /* dIntegrationTimeLowLamp */
100, /* dIntegrationTimeHighLamp */
1200, /* wMotorDpi (Full step DPI) */
512, /* wRAMSize (KB) */
3.75, /* dMinIntegrationTimeLowres (ms) */
5.75, /* dMinIntegrationTimeHighres (ms) */
@ -2203,6 +2214,7 @@ static HWDef Hw0x04A9_0x220E =
{
0.72, /* dMaxMotorSpeed (Max_Speed) */
0.36, /* dMaxMoveSpeed (Max_Speed) */
0.0, /* dHighSpeed */
100, /* wIntegrationTimeLowLamp */
100, /* wIntegrationTimeHighLamp */
1200, /* wMotorDpi (Full step DPI) */
@ -2369,7 +2381,7 @@ static SetDef Settings[] =
static ClkMotorDef Motors[] = {
{ MODEL_KaoHsiung,
64, 20, 6, 0xffff, /* PWM, PWM_Duty, MCLK for fast move, ffstep */
64, 20, 6, /* PWM, PWM_Duty, MCLK for fast move */
/* Motor settings (PWM and PWM_Duty) */
{{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
@ -2382,7 +2394,7 @@ static ClkMotorDef Motors[] = {
{ 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 }
},
{ MODEL_HuaLien, 64, 20, 6, 0xffff,
{ MODEL_HuaLien, 64, 20, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }},
@ -2394,7 +2406,7 @@ static ClkMotorDef Motors[] = {
{ 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 }
},
{ MODEL_Tokyo600, 4, 4, 6, 0xffff,
{ MODEL_Tokyo600, 4, 4, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
{ 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }},
@ -2406,7 +2418,7 @@ static ClkMotorDef Motors[] = {
{ 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 }
},
{ MODEL_MUSTEK600, 4, 4, 6, 0xffff,
{ MODEL_MUSTEK600, 4, 4, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 },
{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }},
@ -2418,7 +2430,7 @@ static ClkMotorDef Motors[] = {
{ 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 11.5, 11.5, 11.5, 11.5 }
},
{ MODEL_MUSTEK1200, 2, 32, 3, 0xffff,
{ MODEL_MUSTEK1200, 2, 32, 3,
/* Motor settings (PWM and PWM_Duty) */
/* <=75dpi <=100dpi <=150dpi <=200dpi <=300dpi */
{{ 2, 32, 1 }, { 2, 32, 1 }, { 2, 32, 1 }, { 2, 32, 1 }, { 2, 32, 1 },
@ -2434,7 +2446,7 @@ static ClkMotorDef Motors[] = {
},
/* settings good for the HP models (tested with 2200)*/
{ MODEL_HP, 8, 60, 6, 0xffff,
{ MODEL_HP, 8, 60, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 },
{ 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 }, { 8, 60, 1 }},
@ -2448,7 +2460,7 @@ static ClkMotorDef Motors[] = {
{ 8.0, 8.0, 8.0, 8.0, 8.0, 13.0, 13.0, 13.0, 13.0, 13.0 }
},
{ MODEL_CANON600, 8, 51, 6, 0xffff,
{ MODEL_CANON600, 8, 51, 6,
/* Motor settings (PWM and PWM_Duty) */
/* <=75dpi <=100dpi <=150dpi <=200dpi <=300dpi */
{{ 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 },
@ -2464,7 +2476,7 @@ static ClkMotorDef Motors[] = {
{ 12.5, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0 }
},
{ MODEL_CANON1200, 8, 51, 3, 0x0150,
{ MODEL_CANON1200, 8, 51, 3,
/* Motor settings (PWM and PWM_Duty) */
/* <=75dpi <=100dpi <=150dpi <=200dpi <=300dpi */
{{ 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 }, { 8, 31, 1 },
@ -2480,7 +2492,7 @@ static ClkMotorDef Motors[] = {
},
/* settings good for the UMAX models (tested with 3400) */
{ MODEL_UMAX, 16, 4, 6, 0xffff,
{ MODEL_UMAX, 16, 4, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 },
{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }},
@ -2492,7 +2504,7 @@ static ClkMotorDef Motors[] = {
{ 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5, 10.5 }
},
{ MODEL_UMAX1200, 16, 4, 6, 0xffff /*0x0c0*/,
{ MODEL_UMAX1200, 16, 4, 6,
/* Motor settings (PWM and PWM_Duty) */
{{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 },
{ 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }, { 16, 4, 1 }},
@ -2505,7 +2517,7 @@ static ClkMotorDef Motors[] = {
},
/* settings good for the EPSON models */
{ MODEL_EPSON, 2, 1, 6, 0x0065,
{ MODEL_EPSON, 2, 1, 6,
/* Motor settings (PWM and PWM_Duty) */
/* <=75dpi <=100dpi <=150dpi <=200dpi <=300dpi */
{{ 2, 1, 1 }, { 2, 1, 1 }, { 2, 1, 1 }, { 2, 1, 1 }, { 2, 1, 1 },
@ -2520,7 +2532,7 @@ static ClkMotorDef Motors[] = {
{ 6.0, 6.0, 6.0, 6.0, 6.0, 8.0, 9.0, 9.0, 18.0, 18.0 }
},
{ MODEL_CANONCCD1200, 2, 31, 6, 0x0120,
{ MODEL_CANONCCD1200, 2, 31, 6,
/* Motor settings (PWM and PWM_Duty) */
/* <=75dpi <=100dpi <=150dpi <=200dpi <=300dpi */
{{ 2, 31, 1 }, { 2, 31, 1 }, { 2, 31, 1 }, { 2, 31, 1 }, { 2, 31, 1 },

Wyświetl plik

@ -239,20 +239,56 @@ static SANE_Bool usb_SensorPaper( int handle )
static SANE_Bool usb_WaitPos( Plustek_Device *dev, u_long to, SANE_Bool stay )
{
SANE_Bool retval;
u_char value;
u_short ffs, step;
u_char value, mclk_div, mch;
u_short ffs, step, min_ffs;
long dwTicks;
double fac;
struct timeval start_time, t2;
pClkMotorDef clk = usb_GetMotorSet( dev->usbDev.HwSetting.motorModel );
double maxf, fac, speed;
struct timeval start_time, t2;
HWDef *hw = &dev->usbDev.HwSetting;
/* get current master clock divider */
usbio_ReadReg( dev->fd, 0x08, &value );
mclk_div = (value >> 1) + 1;
/* get current channel mode */
usbio_ReadReg( dev->fd, 0x26, &value );
mch = ((value & 0x07) > 1) ? 1:3;
/* calculate the current speed */
ffs = a_bRegs[0x48] * 256 + a_bRegs[0x49];
speed = ((double)dwCrystalFrequency) /(double)((u_long)mclk_div * 32UL *
(u_long)mch * (u_long)ffs * hw->wMotorDpi);
DBG( _DBG_INFO2, ">>>> CURRENT MCLK_DIV= %u\n", mclk_div );
DBG( _DBG_INFO2, ">>>> MCH = %u\n", mch );
DBG( _DBG_INFO2, ">>>> FFS = %u\n", ffs );
DBG( _DBG_INFO2, ">>>> FASTSPEED = %.3f (%.3f)\n", speed,
hw->dMaxMotorSpeed);
/* disabled ? */
if( hw->dHighSpeed == 0.0 ) {
min_ffs = 0xffff;
maxf = 0.0;
if( !stay )
return SANE_TRUE;
} else {
min_ffs = (u_short)(dwCrystalFrequency /((u_long)mclk_div * 32UL *
(u_long)mch * hw->dHighSpeed * hw->wMotorDpi));
maxf = (ffs - min_ffs)/4;
if( maxf > 100.0 )
maxf = 100.0;
if( maxf < 5.0 )
maxf = 5.0;
}
DBG( _DBG_INFO2, ">>>> MIN_FFS = %u (%.3f)\n", min_ffs, maxf);
gettimeofday( &start_time, NULL );
dwTicks = start_time.tv_sec + to;
step = 1;
ffs = a_bRegs[0x48] * 256 + a_bRegs[0x49];
step = 1;
retval = SANE_FALSE;
retval = SANE_FALSE;
for(;;) {
usleep( 1000 );
@ -265,31 +301,41 @@ static SANE_Bool usb_WaitPos( Plustek_Device *dev, u_long to, SANE_Bool stay )
if( t2.tv_sec > dwTicks )
break;
fac = 100.0/step;
if((u_short)fac < ffs )
ffs -= fac;
else
ffs = 0;
if( ffs > clk->min_ffstep ) {
if((int)fac > 25 )
usleep( 150 * 1000 );
a_bRegs[0x48] = (u_char)((u_short)ffs >> 8);
a_bRegs[0x49] = (u_char)((u_short)ffs & 0xFF);
sanei_lm983x_write(dev->fd, 0x48, &a_bRegs[0x48], 2, SANE_TRUE);
} else {
if( !stay ) {
retval = SANE_TRUE;
break;
if( min_ffs != 0xffff ) {
fac = maxf/step;
if( ffs ) {
if((u_short)fac < ffs ) {
ffs -= fac;
if( ffs < min_ffs )
ffs = min_ffs;
} else {
if(ffs != min_ffs )
ffs = min_ffs;
else
ffs = 0;
}
}
}
step++;
if( ffs >= min_ffs ) {
if((int)fac > 25 )
usleep( 150 * 1000 );
a_bRegs[0x48] = (u_char)(ffs >> 8);
a_bRegs[0x49] = (u_char)(ffs & 0xFF);
sanei_lm983x_write(dev->fd, 0x48, &a_bRegs[0x48], 2, SANE_TRUE);
if(ffs == min_ffs )
ffs = 0;
} else {
if( !stay ) {
retval = SANE_TRUE;
break;
}
}
step++;
}
}
DBG( _DBG_INFO2, "# FSS=%u (0x%04x) - %u steps\n", ffs, ffs, step );
return retval;
}
@ -358,22 +404,11 @@ static SANE_Bool usb_ModuleMove( Plustek_Device *dev,
usbio_WriteReg( dev->fd, 0x0a, 0 );
/* Compute fast feed step size, use equation 3 and equation 8 */
if( bAction == MOVE_ToShading ) {
dMaxMoveSpeed = hw->dMaxMoveSpeed;
double dToShadingSpeed = 0.0; /* HEINER: check callRegistry.GetToShadingSpeed(); */
if( dToShadingSpeed != 0.0 )
dMaxMoveSpeed = dToShadingSpeed;
else {
if( hw->dMaxMoveSpeed > 0.5 )
dMaxMoveSpeed = hw->dMaxMoveSpeed - 0.5;
else
dMaxMoveSpeed = hw->dMaxMoveSpeed;
}
} else {
dMaxMoveSpeed = hw->dMaxMoveSpeed;
if( bAction == MOVE_ToShading ) {
if( hw->dMaxMoveSpeed > 0.5 )
dMaxMoveSpeed = hw->dMaxMoveSpeed - 0.5;
}
clk = usb_GetMotorSet( hw->motorModel );
@ -381,8 +416,8 @@ static SANE_Bool usb_ModuleMove( Plustek_Device *dev,
mclk_div = clk->mclk_fast;
wFastFeedStepSize = (u_short)(dwCrystalFrequency /
((u_long)mclk_div * 8UL * 1 *
dMaxMoveSpeed * 4 * hw->wMotorDpi));
((u_long)mclk_div * 8UL * 1 *
dMaxMoveSpeed * 4 * hw->wMotorDpi));
a_bRegs[0x48] = (u_char)(wFastFeedStepSize >> 8);
a_bRegs[0x49] = (u_char)(wFastFeedStepSize & 0xFF);
@ -515,11 +550,6 @@ static SANE_Bool usb_ModuleToHome( Plustek_Device *dev, SANE_Bool fWait )
usbio_WriteReg( dev->fd, 0x58, hw->bReg_0x58 );
usbio_ReadReg ( dev->fd, 2, &value );
/* check current position... */
#if 0
_UIO(usbio_ReadReg( dev->fd, 2, &value ));
#endif
if( value & 1 ) {
fModuleFirstHome = SANE_FALSE;
return SANE_TRUE;
@ -540,13 +570,11 @@ static SANE_Bool usb_ModuleToHome( Plustek_Device *dev, SANE_Bool fWait )
if( hw->motorModel == MODEL_Tokyo600 ) {
usbio_WriteReg( dev->fd, 0x07, 0 );
} else {
} else {
_UIO( usbio_ResetLM983x( dev ));
usleep(200*1000);
}
if(!_IS_PLUSTEKMOTOR(hw->motorModel)) {
pClkMotorDef clk;
@ -672,8 +700,8 @@ static SANE_Bool usb_ModuleToHome( Plustek_Device *dev, SANE_Bool fWait )
}
wFastFeedStepSize = (WORD)(dwCrystalFrequency / (6UL * 8UL * 1 * Device.HwSetting.dMaxMotorSpeed * 4 *
Device.HwSetting.wMotorDpi) * 60 / 78);
a_bRegs [0x48] = (BYTE)(wFastFeedStepSize >> 8);
a_bRegs [0x49] = (BYTE)(wFastFeedStepSize & 0xFF);
a_bRegs[0x48] = (u_char)(wFastFeedStepSize >> 8);
a_bRegs[0x49] = (u_char)(wFastFeedStepSize & 0xFF);
WriteRegisters(0x48, &a_bRegs[0x48], 2);
}
#endif

Wyświetl plik

@ -1082,8 +1082,6 @@ static SANE_Bool usb_SetScanParameters( Plustek_Device *dev, pScanParam pParam )
/* Assume we will not use ITA */
a_bRegs[0x19] = m_bIntTimeAdjust = 0;
/* Initiate variables */
/* Get variables from calculation algorithms */
if(!(pParam->bCalibration == PARAM_Scan &&
pParam->bSource == SOURCE_ADF && fLastScanIsAdf )) {
@ -1101,8 +1099,8 @@ static SANE_Bool usb_SetScanParameters( Plustek_Device *dev, pScanParam pParam )
m_dMCLKDivider = 1.0;
m_wFastFeedStepSize = (u_short)(dwCrystalFrequency /
(m_dMCLKDivider * 8 * m_bCM * hw->dMaxMoveSpeed *
4 * hw->wMotorDpi));
(m_dMCLKDivider * 8 * m_bCM * hw->dMaxMoveSpeed *
4 * hw->wMotorDpi));
/* CIS special ;-) */
if((hw->bReg_0x26 & _ONE_CH_COLOR) && (m_bCM == 1)) {
DBG( _DBG_INFO2, "* CIS FFStep-Speedup\n" );
@ -1184,9 +1182,8 @@ static SANE_Bool usb_ScanBegin( Plustek_Device *dev, SANE_Bool auto_park )
{
u_char value;
u_short inches;
pHWDef hw = &dev->usbDev.HwSetting;
pDCapsDef sc = &dev->usbDev.Caps;
pClkMotorDef clk = usb_GetMotorSet( hw->motorModel );
pHWDef hw = &dev->usbDev.HwSetting;
pDCapsDef sc = &dev->usbDev.Caps;
DBG( _DBG_INFO, "usb_ScanBegin()\n" );
@ -1252,7 +1249,7 @@ static SANE_Bool usb_ScanBegin( Plustek_Device *dev, SANE_Bool auto_park )
inches = (u_short)((m_pParam->Origin.y *300UL)/hw->wMotorDpi);
DBG( _DBG_INFO2, ">>> INC=%u, DOY=%u\n", inches, sc->Normal.DataOrigin.y );
if((inches > sc->Normal.DataOrigin.y ) && (clk->min_ffstep != 0xffff))
if( inches > sc->Normal.DataOrigin.y )
usb_WaitPos( dev, 150, SANE_FALSE );
return SANE_TRUE;
}
@ -1468,8 +1465,8 @@ static void usb_GetImageInfo( Plustek_Device *dev, pImgDef pInfo, pWinInfo pSize
*/
static void usb_SaveImageInfo( Plustek_Device *dev, pImgDef pInfo )
{
pHWDef hw = &dev->usbDev.HwSetting;
pScanParam pParam = &dev->scanning.sParam;
HWDef *hw = &dev->usbDev.HwSetting;
ScanParam *pParam = &dev->scanning.sParam;
DBG( _DBG_INFO, "usb_SaveImageInfo()\n" );