📄 xf86dmc.c
字号:
// 0 - 2 -> 0 1 2 // - - - -> 3 4 5 // 1 - 3 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[2]); memcpy(&priv->calib_temp_data[2][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[1]); caldif(&priv->calib_temp_data[4][ofs],temp[0],temp[3]); caldif(&priv->calib_temp_data[5][ofs],temp[2],temp[3]); memcpy(&priv->calib_temp_data[6][ofs],temp[1],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[1],temp[3]); memcpy(&priv->calib_temp_data[8][ofs],temp[3],sizeof(int)*2); break; case 5: // 0 - 3 -> 0 1 2 // - 2 - -> 3 4 5 // 1 - 4 -> 6 7 8#if CALIB_PAT_A memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); aaacpy(&priv->calib_temp_data[1][ofs],temp[2],temp[0]); memcpy(&priv->calib_temp_data[2][ofs],temp[3],sizeof(int)*2); aaacpy(&priv->calib_temp_data[3][ofs],temp[1],temp[2]); memcpy(&priv->calib_temp_data[4][ofs],temp[2],sizeof(int)*2); aaacpy(&priv->calib_temp_data[5][ofs],temp[3],temp[2]); memcpy(&priv->calib_temp_data[6][ofs],temp[1],sizeof(int)*2); aaacpy(&priv->calib_temp_data[7][ofs],temp[2],temp[1]); memcpy(&priv->calib_temp_data[8][ofs],temp[4],sizeof(int)*2);#else memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[3]); memcpy(&priv->calib_temp_data[2][ofs],temp[3],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[1]); memcpy(&priv->calib_temp_data[4][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[5][ofs],temp[3],temp[4]); memcpy(&priv->calib_temp_data[6][ofs],temp[1],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[1],temp[4]); memcpy(&priv->calib_temp_data[8][ofs],temp[4],sizeof(int)*2);#endif break; case 6: // 0 2 4 -> 0 1 2 // - - - -> 3 4 5 // 1 3 5 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); memcpy(&priv->calib_temp_data[1][ofs],temp[2],sizeof(int)*2); memcpy(&priv->calib_temp_data[2][ofs],temp[4],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[1]); caldif(&priv->calib_temp_data[4][ofs],temp[0],temp[5]); caldif(&priv->calib_temp_data[5][ofs],temp[4],temp[5]); memcpy(&priv->calib_temp_data[6][ofs],temp[1],sizeof(int)*2); memcpy(&priv->calib_temp_data[7][ofs],temp[3],sizeof(int)*2); memcpy(&priv->calib_temp_data[8][ofs],temp[5],sizeof(int)*2); break; case 9: // 0 3 6 -> 0 1 2 // 1 4 7 -> 3 4 5 // 2 5 8 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); memcpy(&priv->calib_temp_data[1][ofs],temp[3],sizeof(int)*2); memcpy(&priv->calib_temp_data[2][ofs],temp[6],sizeof(int)*2); memcpy(&priv->calib_temp_data[3][ofs],temp[1],sizeof(int)*2); memcpy(&priv->calib_temp_data[4][ofs],temp[4],sizeof(int)*2); memcpy(&priv->calib_temp_data[5][ofs],temp[7],sizeof(int)*2); memcpy(&priv->calib_temp_data[6][ofs],temp[2],sizeof(int)*2); memcpy(&priv->calib_temp_data[7][ofs],temp[5],sizeof(int)*2); memcpy(&priv->calib_temp_data[8][ofs],temp[8],sizeof(int)*2); break; } return( 0 );}static int set_temp_data_rs(DMCPrivatePtr priv,int calib_point,int ofs,unsigned int a[][2]){int i;unsigned int temp[16][2]; memcpy(temp,a,sizeof(temp)); switch( calib_point ) { case 2: // 0 - -2 -> 0 1 2 // - - - -> 3 4 5 // -3 - 1 -> 6 7 8 temp[2][0] = temp[1][0]; temp[2][1] = temp[0][1]; temp[3][0] = temp[0][0]; temp[3][1] = temp[1][1]; memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[2]); memcpy(&priv->calib_temp_data[2][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[3]); caldif(&priv->calib_temp_data[4][ofs],temp[0],temp[1]); caldif(&priv->calib_temp_data[5][ofs],temp[2],temp[1]); memcpy(&priv->calib_temp_data[6][ofs],temp[3],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[3],temp[1]); memcpy(&priv->calib_temp_data[8][ofs],temp[1],sizeof(int)*2); break; case 3: // 0 - -3 -> 0 1 2 // - 1 - -> 3 4 5 // -4 - 2 -> 6 7 8 temp[3][0] = temp[2][0]; temp[3][1] = temp[0][1]; temp[4][0] = temp[0][0]; temp[4][1] = temp[2][1];#if CALIB_PAT_A memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); aaacpy(&priv->calib_temp_data[1][ofs],temp[1],temp[0]); memcpy(&priv->calib_temp_data[2][ofs],temp[3],sizeof(int)*2); aaacpy(&priv->calib_temp_data[3][ofs],temp[4],temp[1]); memcpy(&priv->calib_temp_data[4][ofs],temp[1],sizeof(int)*2); aaacpy(&priv->calib_temp_data[5][ofs],temp[3],temp[1]); memcpy(&priv->calib_temp_data[6][ofs],temp[4],sizeof(int)*2); aaacpy(&priv->calib_temp_data[7][ofs],temp[1],temp[4]); memcpy(&priv->calib_temp_data[8][ofs],temp[2],sizeof(int)*2);#else memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[3]); memcpy(&priv->calib_temp_data[2][ofs],temp[3],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[4]); memcpy(&priv->calib_temp_data[4][ofs],temp[1],sizeof(int)*2); caldif(&priv->calib_temp_data[5][ofs],temp[2],temp[3]); memcpy(&priv->calib_temp_data[6][ofs],temp[4],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[2],temp[4]); memcpy(&priv->calib_temp_data[8][ofs],temp[2],sizeof(int)*2);#endif break; case 4: // 0 - 1 -> 0 1 2 // - - - -> 3 4 5 // 2 - 3 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[1]); memcpy(&priv->calib_temp_data[2][ofs],temp[1],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[2]); caldif(&priv->calib_temp_data[4][ofs],temp[0],temp[3]); caldif(&priv->calib_temp_data[5][ofs],temp[1],temp[3]); memcpy(&priv->calib_temp_data[6][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[2],temp[3]); memcpy(&priv->calib_temp_data[8][ofs],temp[3],sizeof(int)*2); break; case 5: // 0 - 1 -> 0 1 2 // - 2 - -> 3 4 5 // 3 - 4 -> 6 7 8#if CALIB_PAT_A memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); aaacpy(&priv->calib_temp_data[1][ofs],temp[2],temp[0]); memcpy(&priv->calib_temp_data[2][ofs],temp[1],sizeof(int)*2); aaacpy(&priv->calib_temp_data[3][ofs],temp[3],temp[2]); memcpy(&priv->calib_temp_data[4][ofs],temp[2],sizeof(int)*2); aaacpy(&priv->calib_temp_data[5][ofs],temp[1],temp[2]); memcpy(&priv->calib_temp_data[6][ofs],temp[3],sizeof(int)*2); aaacpy(&priv->calib_temp_data[7][ofs],temp[2],temp[3]); memcpy(&priv->calib_temp_data[8][ofs],temp[4],sizeof(int)*2);#else memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); caldif(&priv->calib_temp_data[1][ofs],temp[0],temp[1]); memcpy(&priv->calib_temp_data[2][ofs],temp[1],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[3]); memcpy(&priv->calib_temp_data[4][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[5][ofs],temp[1],temp[4]); memcpy(&priv->calib_temp_data[6][ofs],temp[3],sizeof(int)*2); caldif(&priv->calib_temp_data[7][ofs],temp[3],temp[4]); memcpy(&priv->calib_temp_data[8][ofs],temp[4],sizeof(int)*2);#endif break; case 6: // 0 1 2 -> 0 1 2 // - - - -> 3 4 5 // 3 4 5 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); memcpy(&priv->calib_temp_data[1][ofs],temp[1],sizeof(int)*2); memcpy(&priv->calib_temp_data[2][ofs],temp[2],sizeof(int)*2); caldif(&priv->calib_temp_data[3][ofs],temp[0],temp[3]); caldif(&priv->calib_temp_data[4][ofs],temp[0],temp[5]); caldif(&priv->calib_temp_data[5][ofs],temp[2],temp[5]); memcpy(&priv->calib_temp_data[6][ofs],temp[3],sizeof(int)*2); memcpy(&priv->calib_temp_data[7][ofs],temp[4],sizeof(int)*2); memcpy(&priv->calib_temp_data[8][ofs],temp[5],sizeof(int)*2); break; case 9: // 0 1 2 -> 0 1 2 // 3 4 5 -> 3 4 5 // 6 7 8 -> 6 7 8 memcpy(&priv->calib_temp_data[0][ofs],temp[0],sizeof(int)*2); memcpy(&priv->calib_temp_data[1][ofs],temp[1],sizeof(int)*2); memcpy(&priv->calib_temp_data[2][ofs],temp[2],sizeof(int)*2); memcpy(&priv->calib_temp_data[3][ofs],temp[3],sizeof(int)*2); memcpy(&priv->calib_temp_data[4][ofs],temp[4],sizeof(int)*2); memcpy(&priv->calib_temp_data[5][ofs],temp[5],sizeof(int)*2); memcpy(&priv->calib_temp_data[6][ofs],temp[6],sizeof(int)*2); memcpy(&priv->calib_temp_data[7][ofs],temp[7],sizeof(int)*2); memcpy(&priv->calib_temp_data[8][ofs],temp[8],sizeof(int)*2); break; } return( 0 );}static void disp_calib_data(DMCPrivatePtr priv,char *s,unsigned int d[][4]){int i; for( i=0 ; i < MAX_CALIB_POINT ; i++ ) { xf86Msg(0, "DMC : %s[%d]:Raw=%4d,%4d Adj=%4d,%4d \n" ,s ,i ,d[i][0] ,d[i][1] ,d[i][2] ,d[i][3]); }}static void aaacpy(u_int *d,u_int *a,u_int *b){ d[0] = a[0]; d[1] = b[1];}static void caldif(u_int *od,u_int *oa,u_int *ob){int *a,*b,*d; d = (int *)od; a = (int *)oa; b = (int *)ob; if( a[0] > b[0] ) d[0] = ((a[0] - b[0]) / 2) + b[0]; else d[0] = ((b[0] - a[0]) / 2) + a[0]; if( a[1] > b[1] ) d[1] = ((a[1] - b[1]) / 2) + b[1]; else d[1] = ((b[1] - a[1]) / 2) + a[1];}/********************************************* calibration function end ***/static Bool specify_set(DMCPrivatePtr priv,int fd){int res,a;DMCState st; st = priv->lex_mode; xf86FlushInput(fd); priv->lex_mode = DMC_Response0; res = tx_reset_goto_init(priv,true); XisbBlockDuration (priv->buffer, -1); priv->lex_mode = st; return(res);}static Bool tx_reset_goto_init(DMCPrivatePtr priv,Bool wait_ack){#if _3MEX2 return(true);#elseu_char reset[] = { RESET }; if( priv->usb_dev ) return( ((ioctl(priv->fd,USBDMC_RESET,0)) == -1 ? false : true) ); return( exec_cmd_send(priv,reset,sizeof(reset),wait_ack) );#endif}static Bool tx_specify_goto_idle(DMCPrivatePtr priv,Bool wait_ack){#if _3MEX2 return(true);#elseu_char specify[2] = { INI_2_IDLE, S_RATE };int a; if( priv->usb_dev ) { a = priv->samp_rate; return( ((ioctl(priv->fd,USBDMC_SPECIFY,&a)) == -1 ? false : true) ); } specify[1] += priv->samp_rate; return( exec_cmd_send(priv,specify,sizeof(specify),wait_ack) );#endif}static Bool tx_xyp_exit_goto_idle(DMCPrivatePtr priv,Bool wait_ack){#if _3MEX2 return(true);#elseu_char to_idle[] = { XYP_2_IDLE }; if( priv->usb_dev ) return( ((ioctl(priv->fd,USBDMC_GOTO_IDLE,0)) == -1 ? false : true) ); return( exec_cmd_send(priv,to_idle,sizeof(to_idle),wait_ack) );#endif}static Bool goto_rom_read(DMCPrivatePtr priv){#if _3MEX2 return(false);#elseu_char to_rom_read[] = { IDLE_2_RomRd }; if( priv->usb_dev ) return(true); return( exec_cmd_send(priv,to_rom_read,sizeof(to_rom_read),false) );#endif}static Bool goto_xyp(DMCPrivatePtr priv){#if _3MEX2 return(true);#elseu_char to_xyp[] = { IDLE_2_XYP }; if( priv->usb_dev ) return( ((ioctl(priv->fd,USBDMC_GOTO_XYP,0)) == -1 ? false : true) ); return( exec_cmd_send(priv,to_xyp,sizeof(to_xyp),false) );#endif}static Bool exec_cmd_send(DMCPrivatePtr priv,u_char s[],int len,Bool wait_ack){int i; // ...............gott idle #if DEBUG_CMD xf86Msg(X_WARNING, "DMC : exec_cmd_send len=%d ",len); for( i=0 ; i < len ; i++ ) xf86Msg(X_WARNING,"$%02X ",s[i]); xf86Msg(X_WARNING,"\n"); #endif XisbBlockDuration (priv->buffer, -1); if( DMCSendPacket(priv,s,len) != Success ) return(false); if( len >= 80 ) XisbBlockDuration (priv->buffer, 10000000); else XisbBlockDuration (priv->buffer, 10000000); //XisbBlockDuration (priv->buffer, 500000); if( !wait_ack ) return(true); priv->lex_mode = DMC_Response0; if( DMCGetPacket(priv) != Success ) { #if DEBUG_CMD xf86Msg(X_WARNING, "DMC : None \n"); #endif return(false); } if( priv->packet[0] == ACK ) { #if DEBUG_CMD xf86Msg(X_WARNING, "DMC : cmd = $%x -> ACK \n",s[0]); #endif return(true); } if( DMCGetPacket(priv) == Success ) xf86Msg(X_WARNING, "DMC : cmd = $%x -> NAK + $%x\n" ,s[0],priv->packet[0]); return(false);}static Bool get_status(DMCPrivatePtr priv){u_char stts[] = { 0x15 };u_char s[2]; // ...............gott idle #if DEBUG_CMD xf86Msg(X_WARNING, "DMC : get_status \n"); #endif XisbBlockDuration (priv->buffer, 500000); if( DMCSendPacket(priv,stts,sizeof(stts)) != Success ) return(false); priv->lex_mode = DMC_Response0; if( DMCGetPacket(priv) != Success ) { return(false); } s[0] = priv->packet[0]; priv->lex_mode = DMC_Response0; if( DMCGetPacket(priv) != Success ) { xf86Msg(X_WARNING, "DMC : status $%x Err\n",s[0]); return(false); } xf86Msg(X_WARNING, "DMC : status $%x $%x\n",s[0],priv->packet[0]); return(true);}static int read_eeprom(DMCPrivatePtr priv){#if _3MEX2 return(-1);#elseint x,y,i,k,cnt,ofs;int c;u_short st;u_char s[300]; // ...............read EEPROM data #if DEBUG_PROM xf86Msg(X_WARNING, "DMC : read_eeprom s\n"); #endif if( priv->usb_dev ) { if( ioctl(priv->fd,USBDMC_READ_EEPROM,s) == -1 ) return(-1); } else { if( !goto_rom_read(priv) ) return(-1); XisbBlockDuration (priv->buffer, 500000); cnt = 2 + ((5 * 5) * 8) + 2 + 2; for( i=k=0 ; k < cnt ; i++ ) { if( (c = XisbRead (priv->buffer)) >= 0 ) { s[k++] = (u_char)c; } else return(-1); } } #if DEBUG_PROM xf86Msg(X_WARNING, "DMC : read_eeprom e\n"); xf86Msg(X_WARNING, "DMC : read_eeprom %x %x %x %x %x %x\n",s[0],s[1],s[2],s[3],s[4],s[5]); #endif if( s[0] != 3 || s[1] != 3 ) return(0); #if DEBUG_PROM xf86Msg(X_WARNING, "DMC : read_eeprom set 1\n"); #endif adj_pkt_calib_dat(false,s,priv->max_x,priv->max_y); cnt = 2 + ((5 * 5) * 8); for( i=0,k=2 ; k < cnt && i < MAX_CALIB_POINT ; k+=2 ) { ofs = ((k - 2) % 8) / 2; if( (((k-2)/8) % 5) < 3 ) { //xf86Msg(X_WARNING, "DMC : read_eeprom %d $%x\n",k,((s[k]<<8)+s[k+1])); priv->calib_temp_data[i][ofs] = (s[k]*0x100) + s[k+1]; if( ofs >= 3 ) i++; } } k = cnt; x = (s[k]*0x100) + s[k+1]; k+=2; y = (s[k]*0x100) + s[k+1]; #if LOG_PROM_RD xf86Msg(0, "DMC : read_eeprom SCREEN %dx%d \n",x,y); disp_calib_data(priv,"read_eeprom",priv->calib_temp_data); #endif memcpy(priv->calib_data,priv->calib_temp_data,sizeof(priv->calib_data)); priv->calib_point = MAX_CALIB_POINT; set_calib_area(priv,false); return(1);#endif}static Bool write_eeprom(DMCPrivatePtr priv){#if _3MEX2 return(false);#elseBool res;int k;u_char s[256];Pkt_W_EEPROM *p; memset(s,0,sizeof(s)); s[0] = IDEL_2_RomWr; p = (Pkt_W_EEPROM *)&s[1]; p->x = 3; p->y = 3; set_1_pkt_calib_dat(&p->x00,priv->calib_data[0]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -