⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Linux 下Scanner 的驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
        {
            if(hide_setting[1])strcpy(default_info,"DCCB 300NP ");
            else
            {
            	  strcpy(default_info,"DCCB 200NP ");
            	  scan_mode = SCAN_MODE_MONO | SCAN_MODE_SHADING;
            }
        } 

        
        sprintf(info,"V%1X.%2X",setting[MENU_TOTAL]>>16,setting[MENU_TOTAL]&0x0000ffff);
        for(i=3;i<(3+2);i++)if(info[i]==' ')info[i]='0';							

        strcat(default_info,info);

        kDefaultSideEdge=kOrgDefaultSideEdge+hide_setting[3]*15;
        
	//init ui
	show_default_info();

	led_off(LED_COLOR);
	led_off(LED_MONO);
	led_off(LED_ERROR);

	//motor_off();
	//home_on();

	if((scan_mode&0x00000003)==SCAN_MODE_COLOR)led_on(LED_COLOR);
	else led_on(LED_MONO);

	return 1;
}


	
	
    

//state sub functions 
int  idle_left(void)
{
  //scroll  left
     int bk;
     char info[64];

     strcpy(info,default_info);
     strcat(info,"\n LEFT MOVING...");

     
     lcd_printf(info);
     //motor_on();

     //scanner_reset();     
    
    
     scan_mode|=SCAN_MODE_SCROLL_LEFT;
     bk=scan_image(1,scan_mode,scan_res);
     scan_mode&=0xffffffcf;

   
    show_default_info();
     //motor_off();

     return 1;	
}

int  idle_right(void)
{
  //scroll  left
     int bk;
     char info[64];
     strcpy(info,default_info);
     strcat(info,"\nRIGHT MOVING...");
     lcd_printf(info);
     
     scan_mode|=SCAN_MODE_SCROLL_RIGHT;
     bk=scan_image(1,scan_mode,scan_res);
     scan_mode&=0xffffffcf;
     lcd_printf(default_info);	

     show_default_info();
	
     return 1;
}
	
int  idle_copy(void)
{
	int nReturn;
	int nMonoFlag = 0; /* indication that whether is MONO mode. by Suixin Zhao 8/26/2006 */
	char strFileSerial[128];

	char info[64];

       strcpy(info,default_info);
       strcat(info,"\n SCANNING...");

     
       lcd_printf(info);

	/* by Suixin Zhao 8/26/2006 */
	/* flag scan_mode to color */
	if (((scan_mode & 0x00000003) == SCAN_MODE_GRAY) || ((scan_mode & 0x00000003) == SCAN_MODE_MONO)) {
		scan_mode &= 0xFFFFFFFC;;
		scan_mode |= SCAN_MODE_COLOR;

		nMonoFlag = 1;
	}

	nReturn = scan_image(SCAN_FILE_JPG, scan_mode, scan_res); /* org JPG */
	/* 1 for ok, 2 for stop */
	if (nReturn == 1) {
		nReturn = Transform(image_path, image_path, nMonoFlag); /* implement in cleanjpg.c, by Suixin Zhao 8/26/2006 */
		if (nReturn == 0) { /* 0 for ok, 1 for error */
			if(setting[0]==0)
			{
				strcpy(info,default_info);
                            strcat(info,"\n OUTPUT TO UDISK");

     
                            lcd_printf(info);

				//copy image to usb disk
				if(chk_usbd())
				{
					system("/bin/mount /mnt");

					strcpy(cmdline,"/bin/cp ");
					strcat(cmdline,image_path);
					/* strcat(cmdline," /mnt/image."); */
					sprintf(strFileSerial, " /mnt/image%03d.", g_nFileSerial++);
					strcat(cmdline, strFileSerial);
					switch(scan_mode&0x00000003)
					{
					case SCAN_MODE_COLOR:
					case SCAN_MODE_GRAY :strcat(cmdline,"jpg");break;
					case SCAN_MODE_MONO :strcat(cmdline,"bmp");break;
					default:break;
					}

					printf("cmdline:%s\n",cmdline);
					system(cmdline);
					system("/bin/umount /mnt");
				}
			}
			else
			{
				//print image
				strcpy(info,default_info);
                            strcat(info,"\n OUTPUT TO PRINTER");
                            lcd_printf(info);
				sprintf(cmdline,"lp -d %s -n %1d /tmp/image.jpg", printer[setting[3]], setting[2] + 1);
				printf("cmdline:%s\n",cmdline);
				system(cmdline);
				mcp_sleep_ms(2000);
			}
		}
	}

	show_default_info();
	return 1;
}

int  idle_memcopy(void)
{
	char strFileSerial[128];
	char info[64];

	if(setting[0]==0)
	{
		strcpy(info,default_info);
              strcat(info,"\n OUTPUT TO UDISK");
              lcd_printf(info);

		//copy image to usb disk
		if(chk_usbd())
		{
			system("/bin/mount /mnt");

			strcpy(cmdline,"/bin/cp ");
			strcat(cmdline,image_path);
			/* strcat(cmdline," /mnt/image.jpg"); */
			sprintf(strFileSerial, " /mnt/image%03d.jpg", g_nFileSerial++);
			strcat(cmdline, strFileSerial);
			printf("cmdline:%s\n",cmdline);
			system(cmdline);
			system("/bin/umount /mnt");
		}
	}
	else
	{
		//print image
		strcpy(info,default_info);
              strcat(info,"\n OUTPUT TO UDISK");
              lcd_printf(info);
		sprintf(cmdline,"lp -d %s -n %1d /tmp/image.jpg",printer[setting[3]],setting[2]);
		printf("cmdline:%s\n",cmdline);
		system(cmdline);
		mcp_sleep_ms(2000);
	}

	show_default_info();
	return 1;
}

int  idle_color(void)
{
 
    if(hide_setting[1])return 1;
    led_off(LED_COLOR);
    led_off(LED_MONO);
    led_off(LED_ERROR);
    
    if((scan_mode&0x00000003)==SCAN_MODE_COLOR)
    {
      scan_mode&=0xfffffffc;
      /* scan_mode|=SCAN_MODE_GRAY; */
      scan_mode|=SCAN_MODE_MONO; 
      led_on(LED_MONO);
    }
    else
    {
      scan_mode&=0xfffffffc;
      scan_mode|=SCAN_MODE_COLOR; 
      led_on(LED_COLOR);
	
    }	
	
    return 1;	
}

int  idle_menu(void)
{
     if(in_hide)
     {
        my_menu_items=hide_menu_items;
        my_set_index=hide_set_index;
        my_set_items=hide_set_items;
        my_setting=hide_setting;
        my_menu_total=HIDE_MENU_TOTAL;
     }
     else
     {
        my_menu_items=menu_items;
        my_set_index=set_index;
        my_set_items=set_items;
        my_setting=setting;
        my_menu_total=MENU_TOTAL;
     }  

     menu_item=0;	
     lcd_printf((char*)my_menu_items[menu_item]);
     beep(400);
     state=STATE_MENU;	
     return 1;
}

int  menu_set(void)
{
	cur_set=my_setting[menu_item];
	lcd_printf((char*)my_set_items[my_set_index[menu_item<<1]+cur_set]);
	state=STATE_SET;
	return 1;
}

int  menu_left(void)
{
     if(menu_item>0)menu_item--;
     else menu_item=my_menu_total-1;	
     lcd_printf((char*)my_menu_items[menu_item]);
     return 1;		
}

int  menu_right(void)
{
     if(menu_item<my_menu_total-1)menu_item++;
     else menu_item=0;	
     lcd_printf((char*)my_menu_items[menu_item]);
     return 1;		
	
}

int  menu_stop()
{ 
	show_default_info();
	beep(400);
	state=STATE_IDLE;
        in_hide=0;
	return 1;
}

int  set_set()
{
	FILE *pf;
	my_setting[menu_item]=cur_set;
	//save setting
	pf=fopen("/etc/CSB.set","wb");
	if(pf)
	{
              fwrite(hide_setting,1,HIDE_MENU_TOTAL*4,pf);
		fwrite(setting,1,(MENU_TOTAL+1)*4,pf);          
		fclose(pf);
	}
	
	update_setting_info();
	beep(400);
	state=STATE_IDLE;
	in_hide=0;

	return 1;
}


int  set_left()
{
     if(cur_set>0)cur_set--;
     else cur_set=my_set_index[(menu_item<<1)+1]-my_set_index[menu_item<<1];
     lcd_printf((char*)my_set_items[my_set_index[menu_item<<1]+cur_set]);		
     return 1;		
}

int  set_right()
{
     if((cur_set+my_set_index[menu_item<<1])<my_set_index[(menu_item<<1)+1])cur_set++;
     else cur_set=0;
     lcd_printf((char*)my_set_items[my_set_index[menu_item<<1]+cur_set]);		
     return 1;			
}

int  set_stop()
{
     lcd_printf((char*)my_menu_items[menu_item]);
     state=STATE_MENU;	
     return 1;		
	
}

/*
int csbu()
{
  int fd1,nbytes,maxbytes=1024,n,remain,total;
  unsigned char  buffer[1024*16],*pcur;

  FILE *pf1;

  //test usb char driver
  //for(i=0;i<1024*16;i++)buffer[i]=i%256;

my_start: 

  fd1 = open("/dev/misc/usb_char", O_RDWR);

  nbytes=64;

  if(fd1==-1)printf("usbchar: failed!\n");
  else
  {
    n=0;
    while(n==0)
    {
       n = read(fd1,buffer,64);
       if(n>0)printf("read data :%d\n",n);
    }
    
    usleep(2000*1000);
      
    pf1=fopen("/test.jpg","rb");
    fseek(pf1,0,SEEK_END);
    *((long*)buffer)=total=ftell(pf1);
    printf("start transfer total=%d!\n",total);
    fseek(pf1,0,SEEK_SET);
    nbytes=fread(buffer+4,1,maxbytes-4,pf1);
    nbytes+=4;
    pcur=buffer;
    remain=total+4;
    
    while(!feof(pf1))
    {
      
      n = write(fd1,pcur,nbytes);
      //printf("write data :%d\n",n);
      
      if(n==-1)usleep(5*1000);
      else
      {
      	 remain-=n;
         if(n<nbytes)
         {
            nbytes-=n;
            pcur+=n;
         }
         else
         {
      	   pcur=buffer;
      	   nbytes=fread(buffer,1,maxbytes,pf1);
 
      	 }

      }
      
    }
    fclose(pf1);
    
    //nbytes=remain;
    
    while(remain>0)
    {  
    	n = write(fd1,pcur,nbytes);
    	printf("remain:%d nbytes:%d n:%d\n",remain,nbytes,n);
    	if(n>0)
    	{
    	  remain-=n;	
    	  nbytes-=n; 
    	  pcur+=n;		
    	}
    	if(nbytes==0)break;
    }
    
    close(fd1);
    
  }
  
   
  usleep(200*1000);
  
  goto my_start;
    
  return 1;		
	
}

*/

#define CSBU_BUSY             0x03
#define CSBU_WAIT             0x02
#define CSBU_SUCCESS          0x01 
#define CSBU_FAIL             0x04             

#define CSBU_CMD_CONNECT      0x01
#define CSBU_CMD_DISCONNECT   0x02
#define CSBU_CMD_SCROLL_LEFT  0x03
#define CSBU_CMD_SCROLL_RIGHT 0x04
#define CSBU_CMD_COPY         0x05
#define CSBU_CMD_MEM_COPY     0x06
#define CSBU_CMD_STOP         0x07
#define CSBU_CMD_CCD_ADJ      0x08
#define CSBU_CMD_START_SET    0x09
#define CSBU_CMD_START_READ   0x0a


int cmd_in(unsigned char *pcmd)
{
    int n=0;
    while(n==0)
    {
       n = read(fd_usb,pcmd,64);
       if(n>0)printf("csbu:read data :%d\n",n);
    }
    return n;	
		
}

int cmd_out(unsigned char *pcmd)
{
    
    int n=0;
    while(n==0)
    {
       n = write(fd_usb,pcmd,64);	
       if(n>0)printf("csbu:write data :%d\n",n);
    }
    return n;		
	
}

int file_out(char *pfile)
{
	int nbytes,maxbytes=1024,n,remain,total;
	unsigned char buffer[1024*2],*pcur;
	FILE *pf1;

	pf1=fopen(pfile,"rb");
	fseek(pf1,0,SEEK_END);
	total=ftell(pf1);

	printf("csbu: start file transfer total=%d!\n",total);

	fseek(pf1,0,SEEK_SET);
	nbytes=fread(buffer,1,maxbytes,pf1);
	pcur=buffer;
	remain=total;

	while(!feof(pf1))
	{

		n = write(fd_usb,pcur,nbytes);
		//printf("write data :%d\n",n);

		if(n==-1)usleep(5*1000);
		else
		{
			remain-=n;
			if(n<nbytes)
			{
				nbytes-=n;
				pcur+=n;
			}
			else
			{
				pcur=buffer;
				nbytes=fread(buffer,1,maxbytes,pf1);

			}

		}

	}
	fclose(pf1);

	//nbytes=remain;

	while(remain>0)
	{
		n = write(fd_usb,pcur,nbytes);
		printf("remain:%d nbytes:%d n:%d\n",remain,nbytes,n);
		if(n>0)
		{
			remain-=n;
			nbytes-=n;
			pcur+=n;
		}
		if(nbytes==0)break;
	}

	return 1;

}

int img_out(BYTE *pBuffer,int length)
{
	int nbytes,n,remain;
	unsigned char *pcur;

	printf("csbu: start img transfer total=%d!\n",length);

	pcur=pBuffer;
	remain=length;
	nbytes = 512;

	while (remain > nbytes)
	{
		n = write(fd_usb,pcur,nbytes);
		/* for debug */
		printf("      write data: %d\n", n);

		if (n == -1) {
			usleep(5*1000);
		}
		else
		{
			remain-=n;
			if(n<nbytes)
			{
				nbytes-=n;
				pcur+=n;
			}
			else
			{
				pcur+=nbytes;
				nbytes=512;
			}
		}
	}

	nbytes=remain;
	while(remain>0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -