USB编程软件.doc_第1页
USB编程软件.doc_第2页
USB编程软件.doc_第3页
USB编程软件.doc_第4页
USB编程软件.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

typedef struct tagOScanParamBIT bPenOk;BIT bLastScanOK;BIT bScanOK;#ifndef AGC_XY_SEPARATEUINT AGCset;UINT LineLevel;UCHAR AGCCount;UCHAR AGC_time;#endifUCHAR ScanSTS;UINT dX;UINT dY;const WPEN_LMT * pPenLmt;ScanXYStruct* pScanXY;Uint16 DvrSet;Uint16 DvrStepSize;POINT XYPointsPOINT_BUFF_SIZE;Uint16 PointInx;Uint16 InvalidCount;Uint16 PtDiff;POINT Ptmean;BIT fPenOk;Uint16 Index; OScanParam;typedef struct tagScanconst UCHAR * pP2Code;const UCHAR MaxLines;const UINT XY_Max;UINT Lines3;UCHAR Dir;UCHAR Cxy;UCHAR Lxy;#ifdef AGC_XY_SEPARATEUINT AGCset;UINT LineLevel;UCHAR AGCCount ;UCHAR AGC_time ;UINT LastAGCset ;UINT LLastAGCset ;#endif ScanXYStruct;typedef struct _tag_POINT Uint16 px;Uint16 py; POINT,*PPOINT;struct SCANSTAUTS_BITS / bits description Uint16 bscanErr:1; / bit 0 Qual periodUint16 bscanPenOk:1; / bit 1Uint16 bscanDecX:1; / bit 2Uint16 bscanDecY:1; / bit 3Uint16 bscanFreqErr:1; / bit 4Uint16 bscanXYErr:1; / bit 5Uint16 bscanXYOk:1; / bit 6Uint16 bscanWrite:1; / bit 7Uint16 bcommTrXY:1; / bit 8Uint16 bcommTrXY1:1; / bit 9Uint16 bcommTrPress:1; / bit 10Uint16 rsvd:5;/bit 11-15;union SCANSTAUTS_UNION struct SCANSTAUTS_BITS bit;Uint16 all;typedef struct tagScanInfor union SCANSTAUTS_UNION ScanStatus;UINT Px;UINT Py;UINT Px0;UINT Py0;UINT Press;UCHAR KeyType; OScanInfor;/Scan station#define SCAN_STS_DETECT 0#define SCAN_STS_SKEEP 1#define SCAN_STS_SLOCK 2#define SCAN_STS_LKEEP 3#define SCAN_STS_LLOCK 4#define SCAN_STS_TRACK 5#define SCAN_STS_TEST 6typedef struct tagWPEN_LMTUINT ValidVMin;UINT ValidVMax;UINT MKeyVMin;UINT MKeyVMax;UINT LKeyVMin;UINT LKeyVMax;UINT RKeyVMin;UINT RKeyVMax;UINT UKeyVMin;UINT UKeyVMax;UINT ERKeyVMin;UINT ERKeyVMax; WPEN_LMT,*PWPEN_LMT;const WPEN_LMT PenLmt2=19780,33333,23376,24657,20809,23376,26865,28571,30000,32727,18947,20571,6096,7682,6897,7105,6096,6872,7159,7382,7440,7682,0,0,;#define WPEN_BIG0#define WPEN_NEW1#define WPEN_TW2#define WPEN_II3/ -contact0-ucLButtons = 0;ucHButtons = 0;if(ucContact0Flag)/clear contact0 flagucContact0Flag = 0;ucLButtons = getEPenButton(WPEN_NO1);if(ucLButtons)cAbsLX = getEPenPx(WPEN_NO1);cAbsLY = getEPenPy(WPEN_NO1);/off-rate/cAbsLX = (short)cAbsLX * x_rate/1000 + x_offset;/cAbsLY = (short)cAbsLY * y_rate/1000 + y_offset;/projectedonePoint.x=cAbsLX;onePoint.y=cAbsLY;/usPoint_Ret = ProjTrans(onePoint,DbProjPara);usPoint_Ret = ProjTrans(onePoint,g_ProjCvtParaS);cAbsLX = usPoint_Ret.x;cAbsLY = usPoint_Ret.y; /填充当前包ptMtouchRep-ucButton1=ucLButtons;ptMtouchRep-usX1=cAbsLX;ptMtouchRep-usY1=cAbsLY;ret = 1; else/indicate void contact0 in report;if(0x07=ptLastMtRep-ucButton1)/填充当前包ptMtouchRep-ucButton1=0x02;ptMtouchRep-usX1=ptLastMtRep-usX1; ptMtouchRep-usY1=ptLastMtRep-usY1;ret = 1;elseret = 0;/ -contact1-if(ucContact1Flag)/clear contact1 flagucContact1Flag = 0;/indicate capture contact1 in report;ucHButtons = getEPenButton(WPEN_NO2);if(ucHButtons)cAbsHX = getEPenPx(WPEN_NO2);cAbsHY = getEPenPy(WPEN_NO2);/off-rate/cAbsHX = (short)cAbsHX * x_rate/1000 + x_offset;/cAbsHY = (short)cAbsHY * y_rate/1000 + y_offset;/projectedonePoint.x=cAbsHX;onePoint.y=cAbsHY;/usPoint_Ret = ProjTrans(onePoint,DbProjPara);usPoint_Ret = ProjTrans(onePoint,g_ProjCvtParaS);cAbsHX = usPoint_Ret.x;cAbsHY = usPoint_Ret.y;/填充当前包ptMtouchRep-ucButton2=ucHButtons;ptMtouchRep-usX2=cAbsHX;ptMtouchRep-usY2=cAbsHY;ret |= 1;else/indicate void contact0 in report;if(0x07=ptLastMtRep-ucButton2)/填充当前包ptMtouchRep-ucButton2=0x02;ptMtouchRep-usX2=ptLastMtRep-usX2; ptMtouchRep-usY2=ptLastMtRep-usY2;ret |= 1;elseret |= 0;return ret;static unsigned long HidGetMTouchDataEx(unsigned char *pucMtReport)tMtouchReport *ptMtouchRep,*ptLastMtRep;unsigned long ret;static unsigned short cAbsHX,cAbsHY; static unsigned short cAbsLX,cAbsLY;static unsigned char gucLastRep16;unsigned char ucHButtons;unsigned char ucLButtons; unsigned char ulKeyData;float fX_Rate, fY_Rate;/long x_offset = (long)g_sCoordCvtpara.sX_Offset;/short x_rate = (short)g_sCoordCvtpara.fX_Rate;/long y_offset = (long)g_sCoordCvtpara.sY_Offset;/short y_rate = (short)g_sCoordCvtpara.fY_Rate;CPoint onePoint;UsPoint usPoint_Ret;/g_sCoordCvtpara.fX_Rate = 1000.0;/g_sCoordCvtpara.sX_Offset = 0;/g_sCoordCvtpara.fY_Rate = 1000.0;/g_sCoordCvtpara.sY_Offset = 0;unsigned char pucKbButton4;/tEBoardShortCutKey *psShortCutKey;/UCHAR ucContact0Flag,ucContact1Flag;/init varsptMtouchRep = (tMtouchReport *)pucMtReport;ptLastMtRep = (tMtouchReport *)gucLastRep;ptMtouchRep-ucReportID = 1;ptMtouchRep-ucContact1 = 0;ptMtouchRep-ucContact2 = 1;ptMtouchRep-ucContact3 = 2;ptMtouchRep-ucContact4 = 3;ptMtouchRep-ucCntactCount = 4;if(penid = WPEN_NO1)but.all = 0;if(mCurrLPoint.key = EKEY_LEFT)but.all = 0x7;/else if(mCurrLPoint.key = EKEY_RIGHT)/but.all = 0x7;but.bits.BarSw1 = 1;but.bits.InRange1 = 1;but.bits.TouchValid1 =1;else if( mCurrLPoint.key = EKEY_ERASE)but.bits.Erase1 = 1;but.bits.InRange1 = 1;but.bits.TouchValid1 =1;else if(mCurrLPoint.key = EKEY_NONE) but.all = 0;else /if( mCurrLPoint.key = EKEY_MOUSE)but.bits.InRange1 = 1;/vx/but.bits.TouchValid1 =1;mCurrLPoint.key= EKEY_NONE; return but.all;/vxelse if(penid = WPEN_NO2)but.all = 0;if(mCurrHPoint.key = EKEY_LEFT)but.all = 0x7;else if(mCurrHPoint.key = EKEY_RIGHT)but.bits.BarSw1 = 1;but.bits.InRange1 = 1;but.bits.TouchValid1 =1;else if( mCurrHPoint.key = EKEY_ERASE)but.bits.Erase1 = 1;but.bits.InRange1 = 1;but.bits.TouchValid1 =1;else if(mCurrHPoint.key = EKEY_NONE) but.all = 0;else /if( mCurrHPoint.key = EKEY_MOUSE)but.bits.InRange1 = 1; /vx/but.bits.TouchValid1 =1;mCurrHPoint.key= EKEY_NONE; return but.all;/ pen digitizer buttons info根据变换参数对点pt实施投影变换?Cycle 1:SCommReceive( ) 串口接收来的数据传给下面函数的PX PY;addEPenLData(px, py, press);addEPenHData(0, 0, 0);该函数的PXPY传给mCurrLPoint.pxmLastLPoint.key = mCurrLPoint.key; mLastLPoint.px = mCurrLPoint.px;mLastLPoint.py = mCurrLPoint.py;mLastLPoint.press = mCurrLPoint.press;mCurrLPoint.px = px;mCurrLPoint.py = py;mCurrLPoint.press = press;if(Schedule & SYS_WORK_5) if(1=g_ulDev2OutReportFlag)USBDHIDCustomCmdHandler();HIDCustomStateChange(1,pucRetReport,32)USBDHIDCompDevStateChange(ucInterface, pucReport, ulLength);Cycle2 :DualModBoardHandler(void)EmIrNoDrivMode( );ret= HidGetMTouchDataEx(pucRetMtReport);cAbsHX = getEPenPx(WPEN_NO2);cAbsHY = getEPenPy(WPEN_NO2); return (mCurrLPoint.px);onePoint.x=cAbsHX;onePoint.y=cAbsHY;usPoint_Ret = ProjTrans(onePoint,g_ProjCvtParaS);void initScan( )/oScanParamSCAN_FLOW.Index = SCAN_FLOW;oScanParamSCAN_FHIGH.Index = SCAN_FHIGH;oScanInforSCAN_FLOW.ScanStatus.all = 0;oScanInforSCAN_FHIGH.ScanStatus.all = 0;oScanParamSCAN_FLOW.pScanXY = ScanXY1;oScanParamSCAN_FHIGH.pScanXY = ScanXY2;oScanParamSCAN_FLOW.bPenOk = 0;oScanParamSCAN_FLOW.bScanOK = 0; oScanParamSCAN_FHIGH.bPenOk = 0; oScanParamSCAN_FHIGH.bScanOK = 0;oScanParamSCAN_FLOW.pPenLmt = &PenLmt0;oScanParamSCAN_FHIGH.pPenLmt = &PenLmt1;pScanParam = &oScanParamSCAN_FLOW; pScanInfor = &oScanInforSCAN_FLOW; oScanParamSCAN_FLOW.fPenOk = 0; oScanParamSCAN_FHIGH.fPenOk = 0; oScanParamSCAN_FLOW.ScanSTS = SCAN_STS_DETECT;oScanParamSCAN_FHIGH.ScanSTS = SCAN_STS_DETECT;#ifdef EXP_AGCSET#ifdef AGC_XY_SEPARATEoScanParamSCAN_FLOW.pScanXYOBJ_X.AGCset= CAGC_SCANPEN;oScanParamSCAN_FLOW.pScanXYOBJ_Y.AGCset = CAGC_SCANPEN;oScanParamSCAN_FHIGH.pScanXYOBJ_X.AGCset = CAGC_SCANPEN;oScanParamSCAN_FHIGH.pScanXYOBJ_Y.AGCset = CAGC_SCANPEN;#elseoScanParamSCAN_FLOW.AGCset = CAGC_SCANPEN;oScanParamSCAN_FHIGH.AGCset = CAGC_SCANPEN;#endif #endif #ifdef DVR_PRESCALEoScanParamSCAN_FLOW.DvrSet = DVR_SET_INVALID;oScanParamSCAN_FHIGH.DvrSet = DVR_SET_INVALID;initAGC();#elseoScanParamSCAN_FLOW.DvrSet = DVR_SET_INVALID;oScanParamSCAN_FHIGH.DvrSet = DVR_SET_INVALID;#endifoScanErrorSCAN_FLOW.ucType= SCANERR_TYPE_NOERR;oScanErrorSCAN_FHIGH.ucType = SCANERR_TYPE_NOERR;bchkPress = 0;void setSysMode(UCHAR mode)if(SysStatus=CSYS_TEST)&(mode!=CSYS_INIT) return;SysStatus=mode;switch (mode)case CSYS_SLEEP: EnTask&=CTK_PENCOMPUTE; break;case CSYS_INIT:init();EnTask&=CTK_PENSCAN;EnTask&=CTK_PENCOMPUTE;setIndicate(LED_MODE_OFFLINE); break;case CSYS_OFFNET:EnTask&=CTK_PENSCAN;EnTask&=CTK_PENCOMPUTE; /CTK_XYPRESS;setIndicate(LED_MODE_OFFLINE); break;case CSYS_ONNET:EnTask&=CTK_PENSCAN;EnTask&=CTK_PENCOMPUTE;/CTK_XYPRESS;setIndicate(LED_MODE_ONNET);break;case CSYS_IDLE:setIndicate(LED_MODE_ONLINE);EnTask&=CTK_PENCOMPUTE;/CTK_XYPRESS;EnTask|=CTK_PENSCAN;break;case CSYS_MCTL:DINT; OscCompensate();EINT; initScan();setIndicate(LED_MODE_ONLINE);EnTask|=CTK_PENCOMPUTE; /CTK_XYPRESS;EnTask|=CTK_PENSCAN;break;case CSYS_QA:EnTask|=CTK_PENCOMPUTE;/CTK_XYPRESS;EnTask|=CTK_PENSCAN;break;case CSYS_WAIT:EnTask |=CTK_PENCOMPUTE;/CTK_XYPRESS;EnTask |=CTK_PENSCAN;break;case CSYS_DEBUG: break;case CSYS_TEST:if(CTST_STEP_DRAW!=TestStep)EnTask&=CTK_PENCOMPUTE;EnTask&=CTK_PENSCAN;elseEnTask|=CTK_PENCOMPUTE;EnTask|=CTK_PENSCAN;setIndicate(LED_MODE_TEST); break; case CSYS_ERROR:EnTask&=CTK_PENCOMPUTE; EnTask&=CTK_PENSCAN;setIndicate(LED_MODE_ERR); break; default:init( );EnTask&=CTK_PENSCAN; EnTask&=CTK_PENCOMPUTE; typedef void (*TFuncPointer) ( );const TFuncPointer *pFuncPt;const TFuncPointer FuncArray= FUNC_NULL, FUNC_NULL, FUNC_NULL, FUNC_NULL, FUNC_NULL, PenScan, / No.0 real functionPenCompute, / No.1 real functionSComm, / No.2 real functionkeyin, / No.3 real functionEHandler, / No.4 real functionIndicate, / No.5 real functionComm_FR, / No.6 real functionCheckPress, / No.7 real functiontestCompute, / No.8 real function;void initFuncTable(void) pFuncPt = &FuncArrayFUNI_VALIDBASE; FUNC_PenScan(SCANSTEP_T1) #define FUNC_PenScan TFUNA_VFU(pFuncPt,FUNI_PenScan)#define TFUNA_VFU(a,f) (void(*)(UCHAR)af)#ifdef AGC_XY_SEPARATEScanXYStruct /*code*/ ScanXY12=P2CodeX,CXLINECOUNT,CX_MAX,0,0,0,0,0,0,0,0,0,0,P2CodeY,CYLINECOUNT,CY_MAX,0,0,0,0,0,0,0,0,0,0;ScanXYStruct /*code*/ ScanXY22=P2CodeX,CXLINECOUNT,CX_MAX,0,0,0,0,0,0,0,0,0,0,P2CodeY,CYLINECOUNT,CY_MAX,0,0,0,0,0,0,0,0,0,0;#elseScanXYStruct /*code*/ ScanXY12=P2CodeX,CXLINECOUNT,CX_MAX,0,0,0,0,0,0,P2CodeY,CYLINECOUNT,CY_MAX,0,0,0,0,0,0;ScanXYStruct

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论