kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			Modifications for PIXMA MP970, to manage CCD sensor with PIXMA generation 3 protocol. To be tested.
							rodzic
							
								
									26ffc6a211
								
							
						
					
					
						commit
						67ebd9576c
					
				|  | @ -1,3 +1,8 @@ | |||
| 2008-04-06  Nicolas Martin <nicols-guest at users.alioth.debian.org> | ||||
| 	* backend/pixma_mp150.c:  | ||||
| 	  Modifications for PIXMA MP970, to manage the CCD sensor | ||||
| 	  with PIXMA generation 3 protocol. To be tested. | ||||
| 
 | ||||
| 2008-04-06  Julien Blache <jb@jblache.org> | ||||
| 	* frontend/saned.c: add standalone daemon mode, building upon the | ||||
| 	AF-indep/IPv6 debug mode. Reorganize code by splitting the main() | ||||
|  |  | |||
|  | @ -131,6 +131,8 @@ enum mp150_cmd_t | |||
|   cmd_read_image = 0xd420, | ||||
|   cmd_error_info = 0xff20, | ||||
| 
 | ||||
|   cmd1_ccd_3 = 0xd520, | ||||
|   cmd2_ccd_3 = 0xd720, | ||||
|   cmd_scan_param_3 = 0xd820, | ||||
|   cmd_scan_start_3 = 0xd920, | ||||
|   cmd_status_3 = 0xda20, | ||||
|  | @ -285,6 +287,13 @@ send_cmd_e920 (pixma_t * s) | |||
|   return pixma_exec_short_cmd (s, &mp->cb, cmd_e920); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| send_cmd_ccd1 (pixma_t * s) | ||||
| { | ||||
|   mp150_t *mp = (mp150_t *) s->subdriver; | ||||
|   return pixma_exec_short_cmd (s, &mp->cb, cmd1_ccd_3); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| start_session (pixma_t * s) | ||||
| { | ||||
|  | @ -473,6 +482,27 @@ query_status_3 (pixma_t * s) | |||
|   return error; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| init_ccd_3 (pixma_t * s) | ||||
| { | ||||
|   mp150_t *mp = (mp150_t *) s->subdriver; | ||||
|   uint8_t *data; | ||||
|   int error, status_len; | ||||
| 
 | ||||
|   status_len = 8; | ||||
|   error = send_cmd_ccd1 (s); | ||||
|   if (error >= 0)  | ||||
|     { | ||||
|       data = pixma_newcmd (&mp->cb, cmd2_ccd_3, 0, status_len); | ||||
|       error = pixma_exec (s, &mp->cb); | ||||
|       if (error >= 0) | ||||
|         { | ||||
|           memcpy (mp->current_status, data, status_len); | ||||
|         } | ||||
|     } | ||||
|   return error; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| query_status (pixma_t * s) | ||||
| { | ||||
|  | @ -777,7 +807,7 @@ mp150_scan (pixma_t * s) | |||
|   if (has_ccd_sensor (s)) | ||||
|     { | ||||
|       /* FIXME: What does this command do? */ | ||||
|       error = send_cmd_e920 (s); | ||||
|       error = (mp->generation <= 2) ? send_cmd_e920 (s) : send_cmd_ccd1 (s); | ||||
|       if (error == 0) | ||||
| 	{ | ||||
| 	  query_status (s); | ||||
|  | @ -785,16 +815,16 @@ mp150_scan (pixma_t * s) | |||
|       else if (error == PIXMA_ECANCELED || error == PIXMA_EBUSY) | ||||
| 	{ | ||||
| 	  PDBG (pixma_dbg | ||||
| 		(2, "cmd e920 returned %s\n", pixma_strerror (error))); | ||||
| 		(2, "cmd e920 or d520 returned %s\n", pixma_strerror (error))); | ||||
| 	  query_status (s); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
| 	  PDBG (pixma_dbg | ||||
| 		(1, "WARNING:cmd e920 failed %s\n", pixma_strerror (error))); | ||||
| 		(1, "WARNING:cmd e920 or d520 failed %s\n", pixma_strerror (error))); | ||||
| 	  return error; | ||||
| 	} | ||||
|       /* pixma_sleep(30000); */ | ||||
|       pixma_sleep(2000000); /* like Windows driver, CCD warmup ? */ | ||||
|     } | ||||
| 
 | ||||
|   tmo = 10; | ||||
|  | @ -821,10 +851,12 @@ mp150_scan (pixma_t * s) | |||
|       pixma_sleep (500000); | ||||
|       error = start_session (s); | ||||
|     } | ||||
|   if (error >= 0) | ||||
|   if ((error >= 0) || (mp->generation == 3)) | ||||
|     mp->state = state_warmup; | ||||
|   if ((error >= 0) && (mp->generation <= 2)) | ||||
|     error = select_source (s); | ||||
|   if ((error >= 0) && (mp->generation == 3) && has_ccd_sensor (s)) | ||||
|     error = init_ccd_3 (s); | ||||
|   if (error >= 0) | ||||
|     error = send_gamma_table (s); | ||||
|   if (error >= 0) | ||||
|  | @ -913,7 +945,7 @@ mp150_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) | |||
|   ib->rptr = mp->imgbuf; | ||||
|   ib->rend = mp->imgbuf + bytes_received; | ||||
| 
 | ||||
|   if ((s->param->xdpi > 600) && (mp->generation >= 3)) | ||||
|   if ((s->param->xdpi > 600) && (mp->generation == 3)) | ||||
|     { | ||||
|       ib->rend += mp->linelag; | ||||
|       mp->linelag = process_high_dpi_3 (s, ib); | ||||
|  | @ -1046,7 +1078,7 @@ const pixma_config_t pixma_mp150_devices[] = { | |||
| 
 | ||||
|   /* Generation 3 CCD not managed as Generation 2 */ | ||||
|   DEVICE ("Canon PIXMA MP970", MP970_PID, 4800, | ||||
| 	  PIXMA_CAP_CIS | PIXMA_CAP_TPU | PIXMA_CAP_EXPERIMENT), | ||||
| 	  PIXMA_CAP_CCD | PIXMA_CAP_TPU), | ||||
| 
 | ||||
|   END_OF_DEVICE_LIST | ||||
| }; | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Nicolas Martin
						Nicolas Martin