📄 main.c
字号:
{
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 csbu()
{
FILE *pf;
unsigned char cmd[64];
int n,bk;
/*
printf("image path prefix:%s\n",image_path_prefix);
strcpy(image_path,image_path_prefix);
printf("image path:%s\n",image_path);
strcat(image_path,"jpg");
printf("image path:%s\n",image_path);
pf=fopen(image_path,"rb");
fseek(pf,0,SEEK_END);
*(int*)(cmd+4)=(int)ftell(pf);
fclose(pf);
*/
fd_usb = open("/dev/misc/usb_char", O_RDWR);
if(fd_usb==-1)
{
printf("usbchar: open failed!\n");
return fd_usb;
}
while(1)
{
n=cmd_in(cmd);
switch(cmd[0])
{
case CSBU_CMD_CONNECT:
{
if(state!=STATE_IDLE)
{
cmd[0]=CSBU_BUSY;
n=cmd_out(cmd);
break;
}
else
{
csbu_state=1;
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
}
break;
}
case CSBU_CMD_DISCONNECT:
{
if(csbu_state==2)
{
cmd[0]=CSBU_BUSY;
n=cmd_out(cmd);
break;
}
else
{
csbu_state=0;
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
}
break;
}
case CSBU_CMD_SCROLL_LEFT:
{
csbu_state=2;
cmd[0]=CSBU_WAIT;
n=cmd_out(cmd);
bk=idle_left();
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
csbu_state=1;
break;
}
case CSBU_CMD_SCROLL_RIGHT:
{
csbu_state=2;
cmd[0]=CSBU_WAIT;
n=cmd_out(cmd);
bk=idle_right();
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
csbu_state=1;
break;
}
case CSBU_CMD_COPY:
{
csbu_state=2;
cmd[0]=CSBU_WAIT;
n=cmd_out(cmd);
bk=scan_image(SCAN_FILE_JPG,scan_mode,scan_res);
cmd[0]=CSBU_SUCCESS;
if(cmd[0]==CSBU_SUCCESS)
{
strcpy(image_path,image_path_prefix);
strcat(image_path,"jpg");
pf=fopen(image_path,"rb");
fseek(pf,0,SEEK_END);
*(int*)(cmd+4)=(int)ftell(pf);
fclose(pf);
}
n=cmd_out(cmd);
if(cmd[0]==CSBU_SUCCESS)file_out(image_path);
csbu_state=1;
break;
}
case CSBU_CMD_MEM_COPY:
{
csbu_state=2;
cmd[0]=CSBU_WAIT;
n=cmd_out(cmd);
cmd[0]=CSBU_SUCCESS;
if(cmd[0]==CSBU_SUCCESS)
{
strcpy(image_path,image_path_prefix);
strcat(image_path,"jpg");
printf("image path:%s\n",image_path);
pf=fopen(image_path,"rb");
fseek(pf,0,SEEK_END);
*(int*)(cmd+4)=(int)ftell(pf);
fclose(pf);
}
n=cmd_out(cmd);
if(cmd[0]==CSBU_SUCCESS)file_out(image_path);
csbu_state=1;
break;
}
case CSBU_CMD_CCD_ADJ:
{
csbu_state=2;
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
if(cmd[0]==CSBU_SUCCESS)
{
scan_mode&=0xfffffff3;
scan_mode|=SCAN_MODE_STILL;
motor_off();
while(1)
{
scan_image(SCAN_FILE_USB,scan_mode,scan_res);
usleep(1*200);
}
}
csbu_state=1;
break;
}
case CSBU_CMD_START_SET:
{
csbu_state=2;
kOrgDefaultSideEdge=*((DWORD*)(cmd+4));
pf=fopen("/etc/CSBStart.set","wb");
if(pf)
{
fwrite(&kOrgDefaultSideEdge,1,4,pf);
fclose(pf);
}
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
csbu_state=1;
break;
}
case CSBU_CMD_START_READ:
{
csbu_state=2;
pf=fopen("/etc/CSBStart.set","rb");
if(pf)
{
fread(&kOrgDefaultSideEdge,1,4,pf);
fclose(pf);
}
*((DWORD*)(cmd+4))=kOrgDefaultSideEdge;
cmd[0]=CSBU_SUCCESS;
n=cmd_out(cmd);
csbu_state=1;
break;
}
case CSBU_CMD_STOP:break;
}
}
}
int main(int argc, char *argv[])
{
FILE *pf;
int key,bk,i;
pid_t csbuid;
struct timeb tb;
char info[64];
/* debug */
/*
setting[0]=1;
setting[2]=1;
setting[3]=5;
idle_memcopy();
*/
//exit(1);
#ifndef ARM
scan_image(1,scan_mode,scan_res);
//scan_image(1,scan_mode,scan_res);
return 1;
#endif
bk=init_control_panel();
if(bk)printf("Init Control panel OK!\n");
else return -1;
//load setting
pf=fopen("/etc/CSB.set","rb");
if(pf)
{
fread(hide_setting,1,(HIDE_MENU_TOTAL)*4,pf);
fread(setting,1,(MENU_TOTAL+1)*4,pf);
fclose(pf);
}
//read side edge from file
pf=fopen("/etc/CSBStart.set","rb");
if(pf)
{
fread(& kOrgDefaultSideEdge,1,4,pf);
fclose(pf);
}
else
{
pf=fopen("/etc/CSBStart.set","wb");
if(pf)
{
fwrite(&kDefaultSideEdge,1,4,pf);
fclose(pf);
}
}
update_setting_info();
//execl("mount","/proc/bus/usb");
//create sub process
if((csbuid=fork())==-1)printf("Fork csbuid Error !\n");
if(csbuid==0)
{
return csbu();
}
/*
* by Suixin Zhao
* 9/4/2006
*/
scan_mode |= SCAN_MODE_SCROLL_TO_HOME;
scan_image(1, scan_mode, scan_res);
scan_mode = SCAN_MODE_COLOR | SCAN_MODE_SHADING;
/* in key circle */
while(1)
{
key=get_key();
if(key!=0)
{
if(key<128)
{
switch(comb)
{
case 2:
if(key==comb_key[0] || key==comb_key[1])
{
comb_rel++;
}
ftime(&tb);
if(comb_rel==2 && tb.time*1000+(time_t)tb.millitm-comb_time>2000)
{
printf("combkey checked: %d %d\n",comb_key[0],comb_key[1]);
comb=0;
if(comb_key[0]==KEY_MENU&&comb_key[1]==KEY_SET)
{
sprintf(info,"VER:%4X.%4X",setting[MENU_TOTAL]>>16,setting[MENU_TOTAL]&0x0000ffff);
lcd_printf(info);
usleep(3000*1000);
lcd_printf(default_info);
}
if(comb_key[0]==KEY_COPY&&comb_key[1]==KEY_MEM_COPY)
{
kill(csbuid,SIGTERM);
if (chk_usbd()==0)
{
lcd_printf("Exit CSB...");
exit(0);
}
else
{
sprintf(info,"VER:%4X.%4X\n Updating...",setting[MENU_TOTAL]>>16,setting[MENU_TOTAL]&0x0000ffff);
lcd_printf(info);
//usleep(3000*1000);
//lcd_printf(default_info);
exit(1);
}
}
if(comb_key[0]==KEY_COPY&&comb_key[1]==KEY_COLOR )
{
kill(csbuid,SIGTERM);
//burning
lcd_printf("Still Scan...");
scan_mode&=0xfffffff3;
scan_mode|=SCAN_MODE_STILL;
motor_off();
while(1)
{
scan_image(SCAN_FILE_BMP,scan_mode,scan_res);
usleep(1*1000);
}
}
if(comb_key[0]==KEY_LEFT&&comb_key[1]==KEY_RIGHT)
{
in_hide=1;
comb=0;
bk=idle_menu();
break; //newton
}
}
break;
case 1:comb=0;
case 0:if(sub_funcs[key][state]!=NULL)bk=sub_funcs[key][state]();break;
}
}
else /* key >= 128 */
{
switch(comb)
{
case 0:
comb_key[0]=key-128;
ftime(&tb);
comb_time=tb.time*1000+(time_t)tb.millitm;
//printf("comb=0 : key=%d time=%d\n",comb_key[0],(int)comb_time);
comb=1;
break;
case 1:
ftime(&tb);
//printf("comb=0 : key=%d time=%d\n",key-128,(int)(tb.time*1000+(time_t)tb.millitm));
if(tb.time*1000+(time_t)tb.millitm-comb_time<500 && (key-128)!=comb_key[0])
{
comb_key[1]=key-128;
if(comb_key[1]<comb_key[0])
{
comb_rel=comb_key[0];
comb_key[0]=comb_key[1];
comb_key[1]=comb_rel;
}
comb=2;
comb_rel=0;
}
else comb=0;
break;
}
}
}
while(csbu_state)usleep(20*1000);
}
return 1;
};
/*
int fd1,nbytes,maxbytes=1024,n,remain,total,bk;
BYTE buffer[1024*16],*pcur;
struct pollfd mypoll;
//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);
}
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)mcp_sleep_ms(5);
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);
}
mcp_sleep_ms(200);
goto my_start;
*/
/* //buttons test
mypoll.fd=fd_buttons;
mypoll.events=POLLIN;
while(1)
{
while((bk=poll(&mypoll,1,20))!=1);
printf("poll bk=%d",bk);
bk = read(fd_buttons,&n,sizeof(n));
printf("read key=%d bk=%d\n",n,bk);
mcp_sleep_ms(100);
}
close(fd_buttons);
*/
/*
while(1)
{
for(n=0;n<4;n++)
{
bk = ioctl(fd_leds,0,n);
mcp_sleep_ms(500);
bk = ioctl(fd_leds,1,n);
mcp_sleep_ms(500);
}
}
n = write(fd1,"ABCDEFGHIJKLMNOP\nLMOPQRSTABCDEFGH",33);
close(fd1);
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -