📄 main.c
字号:
{
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 + -