📄 xf86dmc.c
字号:
set_1_pkt_calib_dat(&p->x01,priv->calib_data[1]); set_1_pkt_calib_dat(&p->x02,priv->calib_data[2]); set_1_pkt_calib_dat(&p->x10,priv->calib_data[3]); set_1_pkt_calib_dat(&p->x11,priv->calib_data[4]); set_1_pkt_calib_dat(&p->x12,priv->calib_data[5]); set_1_pkt_calib_dat(&p->x20,priv->calib_data[6]); set_1_pkt_calib_dat(&p->x21,priv->calib_data[7]); set_1_pkt_calib_dat(&p->x22,priv->calib_data[8]); p->max_x = 1024; p->max_y = 768; adj_pkt_calib_dat(true,p,priv->max_x,priv->max_y); cnv_lowhigh_calib_dat(true,p); k = sizeof(Pkt_W_EEPROM) + 1; if( priv->usb_dev ) { res = ioctl(priv->fd,USBDMC_WRITE_EEPROM,p) == -1 ? false : true; } else { res = exec_cmd_send(priv,s,k,true); } asleep(priv,2); #if LOG_PROM_WR if( res ) disp_calib_data(priv,"write_eeprom",priv->calib_data); else xf86Msg(0, "DMC : write_eeprom Error\n"); #endif return( res );#endif}static void set_1_pkt_calib_dat(Pkt_Calib *p,u_int dat[]){ p->rawx = (u_short)dat[0]; p->rawy = (u_short)dat[1]; p->refx = (u_short)dat[2]; p->refy = (u_short)dat[3];}static void adj_pkt_calib_dat(Bool write_exec,void *top,int max_x,int max_y){Pkt_W_EEPROM *wp;Pkt_R_EEPROM *rp;short wx,nmax_x,x0,fx,mx,ex,a;short wy,nmax_y,y0,fy,my,ey;char s[300]; if( write_exec ) { wp = (Pkt_W_EEPROM *)top; wx = max_x; wy = max_y; nmax_x = wp->max_x; nmax_y = wp->max_y; fx = wp->x00.refx; ex = nmax_x - fx; mx = nmax_x / 2; fy = wp->x00.refy; ey = nmax_y - fy; my = nmax_y / 2; wp->x00.refx = fx; wp->x00.refy = fy; wp->x01.refx = mx; wp->x01.refy = fy; wp->x02.refx = ex; wp->x02.refy = fy; wp->x10.refx = fx; wp->x10.refy = my; wp->x11.refx = mx; wp->x11.refy = my; wp->x12.refx = ex; wp->x12.refy = my; wp->x20.refx = fx; wp->x20.refy = ey; wp->x21.refx = mx; wp->x21.refy = ey; wp->x22.refx = ex; wp->x22.refy = ey; //x00 adj_1_pkt_calib_dat(&wp->x00.rawx,false,&wp->x01.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&wp->x00.rawy,false,&wp->x10.rawy,fy,wy,nmax_y); //x01 adj_1_pkt_calib_dat(&wp->x01.rawy,false,&wp->x11.rawy,fy,wy,nmax_y); //x02 adj_1_pkt_calib_dat(&wp->x02.rawx,true ,&wp->x01.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&wp->x02.rawy,false,&wp->x12.rawy,fy,wy,nmax_y); //x10 adj_1_pkt_calib_dat(&wp->x10.rawx,false,&wp->x11.rawx,fx,wx,nmax_x); //x11 //x12 adj_1_pkt_calib_dat(&wp->x12.rawx,true ,&wp->x11.rawx,fx,wx,nmax_x); //x20 adj_1_pkt_calib_dat(&wp->x20.rawx,false,&wp->x21.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&wp->x20.rawy,true ,&wp->x10.rawy,fy,wy,nmax_y); //x21 adj_1_pkt_calib_dat(&wp->x21.rawy,true ,&wp->x11.rawy,fy,wy,nmax_y); //x22 adj_1_pkt_calib_dat(&wp->x22.rawx,true ,&wp->x21.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&wp->x22.rawy,true ,&wp->x12.rawy,fy,wy,nmax_y); // wp->max_x -= 1; wp->max_y -= 1; } else { memcpy(s,top,sizeof(Pkt_R_EEPROM)); cnv_lowhigh_calib_dat(false,s); rp = (Pkt_R_EEPROM *)s; if( rp->max_x != (max_x-1) || rp->max_y != (max_y-1) ) { wx = rp->max_x + 1; wy = rp->max_y + 1; nmax_x = max_x; nmax_y = max_y; fx = rp->x00.refx; ex = nmax_x - fx; mx = nmax_x / 2; fy = rp->x00.refy; ey = nmax_y - fy; my = nmax_y / 2; rp->x00.refx = fx; rp->x00.refy = fy; rp->x01.refx = mx; rp->x01.refy = fy; rp->x02.refx = ex; rp->x02.refy = fy; rp->x10.refx = fx; rp->x10.refy = my; rp->x11.refx = mx; rp->x11.refy = my; rp->x12.refx = ex; rp->x12.refy = my; rp->x20.refx = fx; rp->x20.refy = ey; rp->x21.refx = mx; rp->x21.refy = ey; rp->x22.refx = ex; rp->x22.refy = ey; //x00 adj_1_pkt_calib_dat(&rp->x00.rawx,false,&rp->x01.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&rp->x00.rawy,false,&rp->x10.rawy,fy,wy,nmax_y); //x01 adj_1_pkt_calib_dat(&rp->x01.rawy,false,&rp->x11.rawy,fy,wy,nmax_y); //x02 adj_1_pkt_calib_dat(&rp->x02.rawx,true ,&rp->x01.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&rp->x02.rawy,false,&rp->x12.rawy,fy,wy,nmax_y); //x10 adj_1_pkt_calib_dat(&rp->x10.rawx,false,&rp->x11.rawx,fx,wx,nmax_x); //x11 //x12 adj_1_pkt_calib_dat(&rp->x12.rawx,true ,&rp->x11.rawx,fx,wx,nmax_x); //x20 adj_1_pkt_calib_dat(&rp->x20.rawx,false,&rp->x21.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&rp->x20.rawy,true ,&rp->x10.rawy,fy,wy,nmax_y); //x21 adj_1_pkt_calib_dat(&rp->x21.rawy,true ,&rp->x11.rawy,fy,wy,nmax_y); //x22 adj_1_pkt_calib_dat(&rp->x22.rawx,true ,&rp->x21.rawx,fx,wx,nmax_x); adj_1_pkt_calib_dat(&rp->x22.rawy,true ,&rp->x12.rawy,fy,wy,nmax_y); // rp->max_x = (short)nmax_x; rp->max_y = (short)nmax_y; } else { rp->max_x = (short)max_x; rp->max_y = (short)max_y; } cnv_lowhigh_calib_dat(false,s); memcpy(top,s,sizeof(Pkt_R_EEPROM)); }}static void adj_1_pkt_calib_dat(u_short *st,int plus,u_short *ed ,int def,u_short omax,u_short nmax){float fraw,fref,fa,fdef; // fdef = def; if( plus ) fraw = *st - *ed; else fraw = *ed - *st; fref = (omax - (fdef*2)) / 2; fa = ((fraw / fref) * omax); // fraw = fa / nmax; fref = (nmax - (fdef*2)) / 2; // if( plus ) *st = *ed + (fref * fraw); else *st = *ed - (fref * fraw);}static void cnv_lowhigh_calib_dat(Bool write_exec,void *top){Pkt_W_EEPROM *wp;Pkt_R_EEPROM *rp; if( write_exec ) { wp = (Pkt_W_EEPROM *)top; cnv_1_lowhigh_calib_dat(&wp->x00); cnv_1_lowhigh_calib_dat(&wp->x01); cnv_1_lowhigh_calib_dat(&wp->x02); cnv_1_lowhigh_calib_dat(&wp->x10); cnv_1_lowhigh_calib_dat(&wp->x11); cnv_1_lowhigh_calib_dat(&wp->x12); cnv_1_lowhigh_calib_dat(&wp->x20); cnv_1_lowhigh_calib_dat(&wp->x21); cnv_1_lowhigh_calib_dat(&wp->x22); wp->max_x = CONV_LOWHIGH(wp->max_x); wp->max_y = CONV_LOWHIGH(wp->max_y); } else { rp = (Pkt_R_EEPROM *)top; cnv_1_lowhigh_calib_dat(&rp->x00); cnv_1_lowhigh_calib_dat(&rp->x01); cnv_1_lowhigh_calib_dat(&rp->x02); cnv_1_lowhigh_calib_dat(&rp->x10); cnv_1_lowhigh_calib_dat(&rp->x11); cnv_1_lowhigh_calib_dat(&rp->x12); cnv_1_lowhigh_calib_dat(&rp->x20); cnv_1_lowhigh_calib_dat(&rp->x21); cnv_1_lowhigh_calib_dat(&rp->x22); rp->max_x = CONV_LOWHIGH(rp->max_x); rp->max_y = CONV_LOWHIGH(rp->max_y); }}static void cnv_1_lowhigh_calib_dat(Pkt_Calib *p){ p->rawx = CONV_LOWHIGH(p->rawx); p->rawy = CONV_LOWHIGH(p->rawy); p->refx = CONV_LOWHIGH(p->refx); p->refy = CONV_LOWHIGH(p->refy);}static int asleep(DMCPrivatePtr priv,int sec){int c; XisbBlockDuration (priv->buffer, sec*1000000); while ((c = XisbRead (priv->buffer)) >= 0) { #if 0 xf86Msg(X_WARNING, "DMC : $%x\n",c); #endif }}static Bool read_save_file(DMCPrivatePtr priv){FILE *fp;int i,dat,point;u_int a,b;char s[256],str[256];unsigned int t1[16][2],t2[16][2]; memset(priv->calib_temp_data,0,sizeof(priv->calib_temp_data)); memset(priv->calib_data,0,sizeof(priv->calib_data)); priv->tp_state = 0; priv->samp_rate = 0; if( !priv->save_file || (fp = fopen(priv->save_file,"r")) == NULL ) { priv->tp_state = B_BELL_DOWN | B_BELL_UP; xf86Msg(0, "DMC : don't open calib data file [%s]\n",priv->save_file); return(false); } memset(t1,0,sizeof(t1)); memset(t2,0,sizeof(t2)); xf86Msg(0, "DMC : open calib data file [%s]\n",priv->save_file); for( i=0,point=0 ; ; ) { if( fread(&s[i],1,1,fp) <= 0 ) break; if( s[i] < ' ' ) { if( i == 0 || s[0] == '#' ) { i = 0; continue; } s[i] = 0; i = 0; if( sscanf(s,"%s %d",str,&dat) != 2 ) break; switch( get_cfg_calib_str(str,&a,&b) ) { case 0: t1[a][b] = dat; point++; break; case 1: t2[a][b] = dat; break; case 2: priv->tp_state |= (dat == 1 ? B_BELL_DOWN : 0); break; case 3: priv->tp_state |= (dat == 1 ? B_BELL_UP : 0); break; case 4: priv->samp_rate = dat; break; default: break; } } else { i++; if( i >= sizeof(s) ) i = 0; } } priv->calib_point = point / 2; xf86Msg(0, "DMC : read - calib point %d\n",priv->calib_point); set_temp_data_rs(priv,priv->calib_point,0,t1); set_temp_data_rs(priv,priv->calib_point,2,t2); fclose(fp); memcpy(priv->calib_data,priv->calib_temp_data,sizeof(priv->calib_data)); adj_read_save_file(priv); disp_calib_data(priv,"Config",priv->calib_data); set_calib_area(priv,false); return(true);}static int get_cfg_calib_str(char *str,unsigned int *a,unsigned int *b){int i,k; for( i=0 ; cfgrawstr[i] ; i++ ) { if( StrCmp(str,cfgrawstr[i]) == 0 ) { *a = (i / 2); *b = (i % 2); return(0); } } for( i=0 ; cfgcalstr[i] ; i++ ) { if( StrCmp(str,cfgcalstr[i]) == 0 ) { *a = (i / 2); *b = (i % 2); return(1); } } for( i=0 ; cfgetcstr[i] ; i++ ) { if( StrCmp(str,cfgetcstr[i]) == 0 ) return( 2 + i ); } return(-1);}static Bool write_save_file(DMCPrivatePtr priv){FILE *fp;int i; if( !priv->save_file || (fp = fopen(priv->save_file,"w")) == NULL ) { xf86Msg(0, "DMC : don't save calib data file [%s]\n",priv->save_file); return(false); } xf86Msg(0, "DMC : save calib data file [%s]\n",priv->save_file); fprintf(fp,"# ------------------------- \n"); fprintf(fp,"# DMC Touch-Panel Setup\n"); fprintf(fp,"# ------------------------- \n"); fprintf(fp,"%s %4d\n",cfgetcstr[0],(priv->tp_state & B_BELL_DOWN ? 1 : 0)); fprintf(fp,"%s %4d\n",cfgetcstr[1],(priv->tp_state & B_BELL_UP ? 1 : 0)); fprintf(fp,"%s %4d\n",cfgetcstr[2],priv->samp_rate); fprintf(fp,"# ------------------------- \n"); fprintf(fp,"# raw data\n"); fprintf(fp,"# ------------------------- \n"); adj_write_save_file(priv); switch( priv->calib_point ) { case 2: fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+0],priv->calib_data[0][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+1],priv->calib_data[0][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+0],priv->calib_data[8][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+1],priv->calib_data[8][1]); break; case 3: fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+0],priv->calib_data[0][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+1],priv->calib_data[0][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+0],priv->calib_data[4][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+1],priv->calib_data[4][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+0],priv->calib_data[8][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+1],priv->calib_data[8][1]); break; case 4: fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+0],priv->calib_data[0][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+1],priv->calib_data[0][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+0],priv->calib_data[2][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+1],priv->calib_data[2][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+0],priv->calib_data[6][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+1],priv->calib_data[6][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+0],priv->calib_data[8][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+1],priv->calib_data[8][1]); break; case 5: fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+0],priv->calib_data[0][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+1],priv->calib_data[0][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+0],priv->calib_data[2][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+1],priv->calib_data[2][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+0],priv->calib_data[4][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+1],priv->calib_data[4][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+0],priv->calib_data[6][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+1],priv->calib_data[6][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(4*2)+0],priv->calib_data[8][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(4*2)+1],priv->calib_data[8][1]); break; case 6: break; case 9: fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+0],priv->calib_data[0][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(0*2)+1],priv->calib_data[0][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+0],priv->calib_data[1][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(1*2)+1],priv->calib_data[1][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+0],priv->calib_data[2][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(2*2)+1],priv->calib_data[2][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+0],priv->calib_data[3][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(3*2)+1],priv->calib_data[3][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(4*2)+0],priv->calib_data[4][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(4*2)+1],priv->calib_data[4][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(5*2)+0],priv->calib_data[5][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(5*2)+1],priv->calib_data[5][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(6*2)+0],priv->calib_data[6][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(6*2)+1],priv->calib_data[6][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(7*2)+0],priv->calib_data[7][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(7*2)+1],priv->calib_data[7][1]); fprintf(fp,"%s %4d\n",cfgrawstr[(8*2)+0],priv->calib_data[8][0]); fprintf(fp,"%s %4d\n",cfgrawstr[(8*2)+1],priv->calib_data[8][1]); break; } fprintf(fp,"# ------------------------- \n"); fprintf(fp,"# calibration data\n"); fprintf(fp,"# ------------------------- \n"); switch( priv->calib_point ) { case 2: fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+0],priv->calib_data[0][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+1],priv->calib_data[0][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+0],priv->calib_data[8][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+1],priv->calib_data[8][3]); break; case 3: fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+0],priv->calib_data[0][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+1],priv->calib_data[0][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+0],priv->calib_data[4][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+1],priv->calib_data[4][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+0],priv->calib_data[8][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+1],priv->calib_data[8][3]); break; case 4: fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+0],priv->calib_data[0][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+1],priv->calib_data[0][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+0],priv->calib_data[2][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+1],priv->calib_data[2][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+0],priv->calib_data[6][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+1],priv->calib_data[6][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(3*2)+0],priv->calib_data[8][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(3*2)+1],priv->calib_data[8][3]); break; case 5: fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+0],priv->calib_data[0][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+1],priv->calib_data[0][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+0],priv->calib_data[2][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+1],priv->calib_data[2][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+0],priv->calib_data[4][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(2*2)+1],priv->calib_data[4][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(3*2)+0],priv->calib_data[6][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(3*2)+1],priv->calib_data[6][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(4*2)+0],priv->calib_data[8][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(4*2)+1],priv->calib_data[8][3]); break; case 6: break; case 9: fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+0],priv->calib_data[0][2]); fprintf(fp,"%s %4d\n",cfgcalstr[(0*2)+1],priv->calib_data[0][3]); fprintf(fp,"%s %4d\n",cfgcalstr[(1*2)+0],priv->calib_data[1][2]); fprintf(fp,"%s %4d\n"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -