From 6af2627d32732edb263e41f5dbfe91f024788eb0 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Wed, 29 May 2013 11:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ETC4000=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=8D=A1=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h | 1158 +++++++++++++++++ .../Msi/Hsi/SevenOcean/NewDataStruct.h | 460 +++++++ .../Msi/Hsi/SevenOcean/So7_Interface.cpp | 252 +--- .../Msi/Hsi/SevenOcean/So7_Interface.h | 48 +- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 115 ++ .../Tools/UsbUtility/Debug/Utility_Config.ini | 50 +- .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 64 +- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 34 +- .../UsbUtility/UsbUtil/So7_Util_ImageDll.cpp | 95 ++ .../UsbUtility/UsbUtil/So7_Util_ImageDll.h | 26 + .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 11 +- .../UsbUtil/Usb_Util.vcxproj.filters | 21 + .../UsbUtility/UsbUtil/Videocard_SDK3000.cpp | 1 - .../UsbUtility/UsbUtil/Videocard_SV2000E.cpp | 23 - .../UsbUtility/UsbUtil/Videocard_TC4000.cpp | 509 ++++++++ .../UsbUtility/UsbUtil/Videocard_TC4000.h | 54 + .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 19 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 201216 -> 207360 bytes .../Msi/Hsi/Videocard/SDK3000/sdk3000_7130.h | 65 +- .../Msi/Hsi/Videocard/SV2000E/datastru.h | 10 +- .../Msi/Hsi/Videocard/TC4000/Sa7134Capture.h | 273 ++++ .../Hsi/Videocard/TC4000/Sa7134Capture.lib | Bin 0 -> 17542 bytes .../Msi/Hsi/Videocard/VideocardCommonDefine.h | 78 ++ 23 files changed, 2995 insertions(+), 371 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/NewDataStruct.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.lib create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Videocard/VideocardCommonDefine.h diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h new file mode 100644 index 0000000..c906bde --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/DLL.h @@ -0,0 +1,1158 @@ +#ifndef DLL_H_ +#define DLL_H_ +#pragma once + +#include +#include "NewDataStruct.h" + +#define PI 3.14159 +#define SET_FACE_NUM 100 + +#define BAR_CODE_WIDTH 20 +#define BAR_CODE_HEIGHT 20 + + +#ifdef EF_IMAGE_DLL +#define EXP __declspec(dllexport) +#else +#define EXP __declspec(dllimport) +#endif + + +#define WM_MSG (WM_USER+101) +#define RS232 (WM_USER+102) +#define WM_COMM_USBIN (WM_USER+103) +#define WM_IMAGE_MSG (WM_USER+104) +#define WM_IMAGE_DAT (WM_USER+105) +#define WM_MUL_CCD (WM_USER+106) +#define WM_MUL_CCD1 (WM_USER+107) +#define WM_M1K_CCD1 (WM_USER+108) +#define WM_M1K_CCD2 (WM_USER+109) +#define WM_GET_PIC (WM_USER+110) + +const UINT WM_USERDEFMSG = ::RegisterWindowMessage(_T("UserDefMsg")); + +//using namespace std; +#pragma pack(push) +#pragma pack(16) + +typedef struct float_point +{ + double x; + double y; +}FP; + +typedef struct light_value +{ + char top_value; + char bom_value; + char fan_value; + char bom1_value; + char bom2_value; + char fan1_switch; + char fan2_switch; +}g_light; + +typedef struct Image_Section +{ + double x0; + double y0; + double x1; + double y1; + double scalex; + double scaley; +}Image_Section; + +//typedef struct video_80M +//{ +// BOOL m_Aeen; +// BYTE m_AeTarget; +// int m_BGain; +// BOOL m_bColorCorrect; +// BYTE m_Contrast; +// int m_ExpTime; +// int m_AnalogGain; +// BYTE m_Gamma; +// int m_GGain; +// int m_RGain; +// BYTE m_Saturation; +// BYTE m_FrameSpeed; +// UINT m_StrobleDelay; +// UINT m_StrobleDuration; +// UINT m_TriggerDelay; +// char m_Mode; +// char m_Save_Mode; +// //bool m_ +// +//}video_80M; + + + +typedef struct Dev_Info +{ + //CWnd * m_cWnd; + HWND g_USB_hWnd; + HWND g_hWnd_Display;//显示主窗口 + HWND g_hWnd_Msg;//消息主窗口 + int g_Card_Num; + int g_Card_No; + int g_Switch_No;//显示通道 + int g_Width; + int g_Height; + //BYTE pBuf[640*480*2]; + int g_Sharpness; //锐度 + int g_Saturation;//饱和度 + int g_Hue;//色度 + int g_Contrast;//对比度 + int g_Brightness;//亮度 + char g_Picture_Type;//0-bmp,1-jpg + char StrFileName[50]; + int cap_xa; + int cap_ya; + int cap_xb; + int cap_yb; + int disp_xa; + int disp_ya; + int disp_xb; + int disp_yb; + char IOin; + char IOout; + + BYTE RD_Usb_Dat[64]; + BYTE WR_Usb_Dat[64]; + BYTE User_Dat[250]; + + unsigned long RD_Usb_Dat_Length; + unsigned long WR_Usb_Dat_Length; + char MoveX_Value; + char MoveY_Value; + char MoveZ_Value; + char MoveV_Value; + double MoveToX_Value; + double MoveToY_Value; + double MoveToZ_Value; + char MoveToV_Value; + double MaxisX; + double MaxisY; + double MaxisZ; + int Fan_Light_Size; + int Top_Light_Size; + int Bottom_Light_Size; + char Light_Value[14]; + char Light_Switch; + int light_size_value; + + BYTE *pBit; + int startX; + int startY; + int nWidth; + int nHeight; + double coorX; + double coorY; + int coorX_Off; + int coorY_Off; + double ValueZ; + char rect_flag; + int bar_type; + int bar_num; + + char g_type; + char g_mode; + char g_base; + char g_fresh; + char g_start; + char g_hold; + float g_slow; + float g_precision; + char get_xy_flag_num; + char draw_num; + int bar_dir; + int Dog_Cmd; + int User_Dat_Len; + int MaxisX_Dir; + int MaxisY_Dir; + int MaxisZ_Dir; + char Face_Flag; + //double Get_Axis_Z[SET_FACE_NUM]; + //double Get_Image_Value[SET_FACE_NUM]; + int g_Face_Index; + + double Org_AbsX; + double Org_AbsY; + double Org_AbsZ; + + double g_Bar_Scalex; + double g_Bar_Scaley; + + double g_Bar_Orgx; + double g_Bar_Orgy; + + double g_Bar_curx; + double g_Bar_cury; + + double MaxisX1; + double MaxisY1; + double MaxisZ1; + + double MaxisX_Scale; + double MaxisY_Scale; + double MaxisZ_Scale; + + double g_Bar_dirx; + double g_Bar_diry; + int Bar_fresh_flag; + + char Usb_Cmd; + char m_Usb_Cmd; + char m_Usb_type; + double m_Usb_dat; + + double g_Bar_LineScaleX; + double g_Bar_LineScaleY; + + double ResultVZ; + + char Diy_Face_Flag; + double Diy_x; + double Diy_y; + + double Face_Long_Dis; + double Face_Short_Dis; + double Face_Long_Step; + double Face_Short_Step; + + int Mdat1; + int Mdat2; + int Mdat3; + int Mdat4; + int Mdat5; + int Mdat6; + + int Mdat; + char value; + long Max_ToV; + int Min_ToV; + + int g_Rule_Type;//1,旧板,2-新板 + + unsigned long g_Axis_V; + long Org_AbsV; + int BarCode_Width; + int BarCode_Height; + + double XT_scale; + double XM_scale; + double XB_scale; + + double YL_scale; + double YM_scale; + double YR_scale; + + char Enable_Face_flag; + char g_Check_BarCode_Flag; + g_light g_light1; + char g_sys_reset_flag; + char Adc_Num; + int Adc_Value[10]; + char Adc_No; + int g_Adc_Value; + + int motor_type; + + double motor_ScaleX; + double motor_ScaleY; + double motor_ScaleZ; + + char motor_check_flag; + char g_video_type; + + char bar_XY_type;//barcode XY 读数坐标对换 + + char Set_Current_Flag; + char m_Aeen; + BYTE m_AeTarget; + int m_BGain; + char m_bColorCorrect; + BYTE m_Contrast; + int m_ExpTime; + int m_AnalogGain; + BYTE m_Gamma; + int m_GGain; + int m_RGain; + BYTE m_Saturation; + BYTE m_FrameSpeed; + UINT m_StrobleDelay; + UINT m_StrobleDuration; + UINT m_TriggerDelay; + char m_Mode; + char m_Save_Mode; + UINT m_RawTime; + + double m_Motor_Dx; + double m_Motor_Dy; + double m_Motor_Dz; + int m_Motor_Plus_Num; + char m_face_mode; + char g_M_Count_Flag; + char Get_Plc_Dat; + char Set_Plc_Dat; + + double g_ProbeX; + double g_ProbeY; + double g_ProbeZ; + + char g_video_type1; + int g_Cap_Image; + double g_Angle; + char g_Debug_Video; + int bar_Len_Type; + int g_BarY_dir; + float g_Lase1; + float g_Lase2; + char g_BarCode_Dir_Flag; + + int g_HOff1;// = 1192; + int g_VOff1; + int g_HOff2;// = 1192; + int g_VOff2; + int g_Add_Pic_Flag; + int Lase_USB_Type; + int g_OScreen_Flag; + + bool g_Mon; + bool g_MirrorV; + bool g_MirrorH; + char g_M1k_Mode; + + int BarCodeX; + int BarCodeY; + int RunBar_Mode; + + float Axis_X; + float Axis_Y; + + float Bar_Ofx; + float Bar_Ofy; + float Bar_X; + float Bar_Y; + + int Bar_Filter_Mode; + int g_Set_Area_Flag; + PointDB g_Set_Areas[5]; + int gFrameKey; + + float Bar_Scale_Unit; + + int g_ITO_Flag; + int g_face_flag; + int g_Nav_Flag; + int g_Video_Input_Mode; + int gAutoZoomFlag; + int gScanLaserPntsSampleTime; + int gScanLaserPntsNumber; + int gIsLaserStorage; + int gLaserStoredNumber; + + + Dev_Info() + { + g_hWnd_Display = NULL; + g_hWnd_Msg = NULL; + g_Card_Num = 0; + g_Card_No = 0; + g_Switch_No = 0; + g_Width = 640; + g_Height = 480; + g_Sharpness = 0; + g_Saturation = 0; + g_Hue = 0; + g_Contrast = 0; + g_Picture_Type = 0; + + cap_xa = 0; + cap_ya = 0; + cap_xb = 640; + cap_yb = 480; + + disp_xa = 0; + disp_ya = 0; + disp_xb = 640; + disp_yb = 480; + + IOin = 0; + IOout = 0; + RD_Usb_Dat_Length=0; + WR_Usb_Dat_Length=0; + MoveX_Value=0; + MoveY_Value=0; + MoveZ_Value=0; + MoveV_Value=0; + MoveToX_Value=0; + MoveToY_Value=0; + MoveToZ_Value=0; + MoveToV_Value=0; + MaxisX=0; + MaxisY=0; + MaxisZ=0; + Fan_Light_Size=0; + Top_Light_Size=0; + Bottom_Light_Size=0; + Light_Switch=0; + light_size_value=0; + + pBit=NULL; + startX=0; + startY=0; + nWidth=0; + nHeight=0; + coorX=0; + coorY=0; + coorX_Off=0; + coorY_Off=0; + ValueZ=0; + rect_flag=0; + bar_type=2; + bar_num=10; + + g_mode=1; + g_base=10; + g_fresh=10; + g_start=100; + g_hold=10; + g_slow=1; + g_precision=0.0; + get_xy_flag_num=3; + draw_num=0; + bar_dir=0; + Dog_Cmd=0; + User_Dat_Len=0; + MaxisX_Dir=1; + MaxisY_Dir=1; + MaxisZ_Dir=1; + Face_Flag=0; + g_Face_Index=150; + Org_AbsX=0; + Org_AbsY=0; + Org_AbsZ=0; + + g_Bar_Scalex=0.00243309; + g_Bar_Scaley=0.00247525; + g_Bar_Orgx=0; + g_Bar_Orgy=0; + g_Bar_curx=0; + g_Bar_cury=0; + MaxisX1=0; + MaxisY1=0; + + g_Bar_dirx=1; + g_Bar_diry=-1; + Bar_fresh_flag=0; + + Usb_Cmd=0; + m_Usb_Cmd=0; + m_Usb_type=0; + m_Usb_dat=0; + + MaxisX_Scale=1; + MaxisY_Scale=1; + MaxisZ_Scale=1; + g_Bar_LineScaleX=1; + g_Bar_LineScaleY=1; + ResultVZ = 0; + Diy_Face_Flag=0; + Diy_x = 0; + Diy_y = 0; + + Face_Long_Dis = 0; + Face_Short_Dis = 0; + Face_Long_Step = 0; + Face_Short_Step = 0; + + Mdat1 = 0; + Mdat2 = 0; + Mdat3 = 0; + Mdat4 = 0; + Mdat5 = 0; + Mdat6 = 0; + + Mdat = 0; + value = 0; + Max_ToV = 2800; + Min_ToV = 10; + g_Rule_Type = 2; + g_Axis_V = 0; + Org_AbsV = 0; + BarCode_Width = 600; + BarCode_Height = 500; + + XT_scale = 1; + XM_scale = 1; + XB_scale = 1; + + YL_scale = 1; + YM_scale = 1; + YR_scale = 1; + Enable_Face_flag = 0; + g_Check_BarCode_Flag = 0; + g_sys_reset_flag = 0; + Adc_Num = 0; + Adc_No = 0; + g_Adc_Value = 0; + motor_type = 0; + + motor_ScaleX = 0.001; + motor_ScaleY = 0.001; + motor_ScaleZ = 0.001; + + motor_check_flag = 0; + g_video_type = 0; + bar_XY_type = 1; + Set_Current_Flag = 0; + + m_Aeen=0; + m_AeTarget=1; + m_BGain=1; + m_bColorCorrect=0; + m_Contrast=1; + m_ExpTime=1; + m_AnalogGain=5; + m_Gamma=5; + m_GGain=10; + m_RGain=10; + m_Saturation=1; + m_FrameSpeed=5; + m_StrobleDelay=5; + m_StrobleDuration=5; + m_TriggerDelay=5; + m_Mode=3; + m_Save_Mode=0; + m_RawTime=1; + + m_Motor_Dx=1.5; + m_Motor_Dy=1.5; + m_Motor_Dz=1.5; + m_Motor_Plus_Num=10000; + m_face_mode=1; + g_M_Count_Flag=0; + Set_Plc_Dat=0; + Get_Plc_Dat=0; + + g_ProbeX = 0; + g_ProbeY = 0; + g_ProbeZ = 0; + g_video_type1=1; + g_Cap_Image=0; + g_Angle=0; + g_Debug_Video=0; + bar_Len_Type=0; + g_BarY_dir=1; + g_Lase1=0; + g_Lase2=0; + g_BarCode_Dir_Flag=0; + + g_HOff1 = 1192; + g_VOff1 = 1134; + + g_HOff2 = 1192; + g_VOff2 = 1134; + g_Add_Pic_Flag=0; + Lase_USB_Type=0; + g_OScreen_Flag=0; + g_MirrorV=0; + g_MirrorH=0; + g_Mon=0; + g_M1k_Mode=0; + + BarCodeX=0; + BarCodeY=0; + RunBar_Mode=0; + + Axis_X=0; + Axis_Y=0; + Bar_Ofx=0; + Bar_Ofy=0; + + Bar_X=0; + Bar_Y=0; + + Bar_Filter_Mode=0; + g_Set_Area_Flag=0; + gFrameKey=10; + + Bar_Scale_Unit=0.5; + g_ITO_Flag=0; + g_face_flag=0; + g_Nav_Flag=0; + g_Video_Input_Mode=0; + gAutoZoomFlag=0; + gScanLaserPntsSampleTime=0; + gScanLaserPntsNumber=0; + gIsLaserStorage=0; + gLaserStoredNumber=0; + }; +}g_Dev_Info; + +#pragma pack(pop) + +enum +{ + VINIT_DLL, + VSEND_DAT, + VSWITCH_NO, + VSET_PARAMETER, + VGET_PARAMETER, + VSAVE_PICTURE, + VGET_PICTURE, + VSET_CAP_VALUE, + VSET_DISP_VALUE, + VOUT_VALUE, + VIN_VALUE, + VIN_START, + VIN_STOP, + VRUN_VIDEO, + VPUSE_VIDEO, + VSTOP_VIDEO, + VDISP_PROPERTY, + VQUIT_DLL, + RSDAT, + + MINIT_USB, + MWRITE_DAT, + MREAD_DAT, + MMOVEX, + MMOVEY, + MMOVEZ, + MMOVEV, + MMOVETOX, + MMOVETOY, + MMOVETOZ, + MMOVETOV, + MMOVETOXYZ, + MMOVETOXYZV, + MSTOP, + MCLOSE, + MREAD_AXIS, + MREAD_PRODE, + MRESET_V, + + RWRITE_LIGHT1_SWITCH, + RWRITE_LIGHT2_SWITCH, + RWRITE_LIGHT3_SWITCH, + RWRITE_LIGHT4_SWITCH, + RSET_LIGHT1_SIZE, + RSET_LIGHT2_SIZE, + RSET_LIGHT3_SIZE, + RSET_LIGHT4_SIZE, + + CALE_XY_VALUE, + CALE_Z_VALUE, + GET_RECT, + + SET_SPEED, + SET_PRECISION, + PRO_DOG, + MRESETXY, + MRESETXYZ, + MRESET_ORG, + MUSB_SEND_CMD, + MUSB_SEND_DAT, + PRO_BARCODE, + CALE_Z_VALUE_DIY, + + MUSB_SEND_MDAT, + MUSB_READ_MDAT, + MUSB_SEND_MCMD, + READ_V, + RSET_LIGHT_CMD, + MUSB_GET_RESET_FLAG, + MUSB_READ_ADC, + MUSB_READ_ADC_INDEX, + PRO_MOTOR_TYPE, + PRO_MOTOR_SCALE, + PRO_CHANGE_VIDEO_TYPE, + PRO_SET_CURRENT_FLAG, + PRO_CHANGE_VIDEO_PARAMETER, + + VIDEO_GET_ALL_PARAMETER, + VIDEO_SET_ALL_PARAMETER, + VIDEO_ENABLE_AE, + VIDEO_EXPOSURE, + VIDEO_COLOR_CONTROL, + VIDEO_AUTO_WB, + VIDEO_ENHACEMENT, + VIDEO_FRAME_SPEED, + VIDEO_TRIGGER_CONTROL, + VIDEO_SAVE_PARAMETER, + VIDEO_READ_SAVE_PARAMETER, + VIDEO_PRO_PARAMETER, + VIDEO_SET_MODE, + + MOTOR_XYZ_DXYZ, + + RS232_FRESH_DAT, + SET_TABLE_MODE, + + PRO_IMAGE_MSG, + PRO_IMAGE_DAT, + INIT_RS232_PLC, + + MUSB_READ_PLC, + MUSB_WRITE_PLC, + PRO_CHANGE_VIDEO_TYPE1, + PRO_CAP_IMAGE, + CALE_BARCODE_COOR_ANGLE, + START_CAP_IMAGE, + START_CAP_IMAGE1, + START_MUL_NAV, + STOP_MUL_NAV, + + MMOVE_TOXYZ, + MMOVE_TOXYZ_LASE, + + //GET_MIN_BOX, + + MUSB_GET_LASE_VALUE, + Exit_DLL, + MADD_M1000K, + + SWITCH_USB_LASE, + MMOVE_TOXYZV, + SWITCH_WORK_MODE, + DLL_DEBUG_ON, + DLL_DEBUG_OFF, + VIDEO_MIRROR_VH_MONO, + CHANGE_M1K_MODE, + MMOVE_TOXYZ_JM, + + MVIDEO_NAV_START, + MVAUTOZOOM, + START_SCAN_LASER_POINTS, + STOP_SCAN_LASER_POINTS, + GET_SCAN_LASER_STATUS, + + VCOM_TOTAL +}; + +#ifdef EF_IMAGE_DLL + +extern BOOL WINAPI OpenPicture(LPBYTE pBits,int nWidth,int nHeight,int* px,int* py,int* pR); +//Mv8800回调 +void WINAPI __stdcall StreamCap(const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam); +void CALLBACK VCAPrcVidCapCallBack(DWORD dwCard, BYTE *pbuff,DWORD dwSize); +//============================SV2000E===================================== +unsigned CALLBACK SVAPrcVidCapCallBack(unsigned char* buffer, unsigned colorSpace, unsigned width, unsigned height, unsigned bytesWidth, void WINAPI* context); +int CALLBACK SnapThreadCallback(BYTE *pBuffer); + +#endif + +extern "C" +{ + EXP void WINAPI Pro_Cmd(int nCmd, LPARAM value); + + + EXP void WINAPI Get_Image_Dat(BYTE* pBuf,int type); + + EXP void WINAPI Pro_Image_Data(LPBYTE pBits,int nWidth, int nHeight); + + EXP void WINAPI Pro_Circle(float_point* pBits,int num,double *x,double *y,double* pR); + EXP void WINAPI Pro_Line(float_point *p,int num,float_point *p2,float *dis,float *ange,float *t);//p取点缓冲区首址 num取点数 dis线长度 ange角度 t直线度 + + EXP bool WINAPI init_232(HWND hwnd, char com_type, UINT baud,BYTE m_iDataBIT, BYTE m_iStopBit, BYTE m_iParity); + EXP void WINAPI Write_Com(BYTE* Str,int len); + EXP void WINAPI Get_Dat(BYTE* Str); + EXP void WINAPI Get_Picture_Dat(BYTE* pBuf); + + + // Function name : ExpArrEdgeLine + // Description : 输入一个矩形框,返回框内的直线边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point pot1Rect 输入矩形框的第一个顶点 + // Argument : Point pot2Rect 输入矩形框的第二个顶点 + // Argument : Point _pot1Rect 输入矩形框的第三个顶点 + // Argument : Point _pot2Rect 输入矩形框的第四个顶点 + // Argument : Point* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrEdgeLine(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold); + EXP int WINAPI ExpArrEdgeLine_down(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold); + + // Function name : ExpArrEdgeArc + // Description : 输入一个环扇形区,返回区内的圆弧边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point center 输入环扇形区圆心 + // Argument : double dRadiusIn 输入环扇形区的内径 + // Argument : double dRadiusOut 输入环扇形区的外径 + // Argument : double dAngleStart 输入环扇形区的起始边角度 + // Argument : double dAngleEnd 输入环扇形区的终止边角度 + // Argument : Point* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrEdgeArc(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,double dAngleStart,double dAngleEnd,PointDB* ptArr,int& count,int threshold,PointDB& cen,double& R); + + // Function name : ExpLineFit + // Description : 直线拟合函数 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : Point* ptArr 输入参与拟合运算的点数组 + // Argument : int count 点数组长度 + // Argument : Point& pot1Line 返回拟合线段一个端点 + // Argument : Point& pot2Line 返回拟合线段的另一个端点 + + EXP int WINAPI ExpLineFit(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line); + + // Function name : ExpArcFit + // Description : 圆弧拟合函数 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : Point* ptArr 输入参与拟合运算的点数组 + // Argument : int count 点数组长度 + // Argument : Point& center 返回拟合圆弧的圆心 + // Argument : double& dRadius 返回拟合圆弧的半径 + // Argument : double& dAngleStart 返回拟合圆弧的起始角度 + // Argument : double& dAngleEnd 返回拟合圆弧的终止角度 + + EXP int WINAPI ExpArcFit(PointDB* ptArr,int count,PointDB& center,double& dRadius,double& dAngleStart,double& dAngleEnd); + + // Function name : ExpCircleFit + // Description : 圆拟合函数 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : Point* ptArr 输入参与拟合运算的点数组 + // Argument : int count 点数组长度 + // Argument : Point& center 返回拟合圆的圆心 + // Argument : double& dRadius 返回拟合圆的半径 + + EXP int WINAPI ExpCircleFit(PointDB* ptArr,int count,PointDB& center,double& dRadius); + + // Function name : ExpEllipseFit + // Description : 椭圆拟合函数 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : Point* ptArr 输入参与拟合运算的点数组 + // Argument : int count 点数组长度 + // Argument : PointDB& center 返回拟合椭圆的中心点坐标 + // Argument : PointDB& ptVer1Long 返回拟合椭圆长轴的一个端点 + // Argument : PointDB& ptVer2Long 返回拟合椭圆长轴的另一个端点 + // Argument : PointDB& ptVer1Short 返回拟合椭圆短轴的一个端点 + // Argument : PointDB& ptVer2Short 返回拟合椭圆短轴的另一个端点 + // Argument : double& dShaftLong 返回拟合椭圆的长轴长度 + // Argument : double& dShaftShort 返回拟合椭圆的短轴长度 + + EXP int WINAPI ExpEllipseFit(PointDB* ptArr,int count,PointDB& center,PointDB& ptVer1Long,PointDB& ptVer2Long,PointDB& ptVer1Short,PointDB& ptVer2Short,double& dShaftLong,double& dShaftShort); + + // Function name : ArcReviseAngle + // Description : 圆弧起点终点,起始角终止角转换函数 + // Argument : pot1Arc,pot2Arc,pot3Arc 输入圆弧上三点 center为圆心,radius为半径 + // Argument : ptStart,ptEnd 返回圆弧起点终点 + //Argument : dAngleStart,dAngleEnd返回起始角终止角 + EXP void WINAPI ArcReviseAngle(Point pot1Arc,Point pot2Arc,Point pot3Arc,Point center,double radius,Point& ptStart,Point& ptEnd,double& dAngleStart,double& dAngleEnd); + + EXP void WINAPI Circle_3P(Point pot1Arc,Point pot2Arc,Point pot3Arc,Point& center,double& radius); + + EXP void WINAPI LintTo4P(Point p1,Point p2,Point point,Point& pa,Point& pb,Point& pc,Point& pd); + + // Function name : ExpCircleBoundSearch + // Description : 区域查找圆,输入一个环形区域,返回区域内的一个圆的圆心和半径 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : PointDB& center 输入环形的圆心同时用于返回查找出的圆的圆心 + // Argument : double dRadiusIn 输入环形的内径值 + // Argument : double dRadiusOut 输入环形的外径值 + // Argument : double& dRadius 返回查找出的圆的半径 + + EXP int WINAPI ExpCircleBoundSearch1(LPBYTE pBits,int nWidth,int nHeight,PointDB& center,double dRadiusIn,double dRadiusOut,double& dRadius); + + // Function name : ExpCirclePotSearch + // Description : 点查找圆,输入一个点,查找包围该点的最小的圆 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point pot 输入一个点 + // Argument : PointDB& center 返回查找出的圆的圆心 + // Argument : double& dRadius 返回查找出的圆的半径 + + EXP int WINAPI ExpCirclePotSearch1(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB& ptCenter,double& dRadius); + + // Function name : ExpCirclePotSearch + // Description : 点查找圆,输入一个点,查找包围该点的最小的圆 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point pot 输入一个点 + // Argument : PointDB& center 返回查找出的圆的圆心 + // Argument : double& dRadius 返回查找出的圆的半径 + + //超强查找 + + EXP int WINAPI ExpCirclePotSearch2(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB& ptCenter,double& dRadius); + + + // Function name : ExpArrEdgeCircle + // Description : 输入一个环形区,返回区内的圆边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point center 输入环形区圆心 + // Argument : double dRadiusStart 输入环形区的搜索起始半径 + // Argument : double dRadiusEnd 输入环形区的搜索终止半径 + // Argument : PointDB* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrEdgeCircle2(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,PointDB* ptArr,int& count,int threshold=-1); + + // Function name : ExpArrCirclePotSearch + // Description : 点返回圆边沿数组,输入一个点,查找包围该点的最小的圆的边沿数组 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point pot 输入一个点 + // Argument : PointDB* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrCirclePotSearch(LPBYTE pBits,int nWidth,int nHeight,Point pot,PointDB* ptArr,int& count,int threshold=-1); + + // Function name : PlumbLine + // Description : 输入一条线段返回经过它第一个端点的垂线 + // Return type : void WINAPI + // Argument : Point pot1 输入线段的第一个端点 + // Argument : Point pot2 输入线段的第二个端点 + // Argument : int width 输入屏幕宽度 + // Argument : int height 输入屏幕高度 + // Argument : Point& pot3 返回垂线与屏幕边框的第一个交点 + // Argument : Point& pot4 返回垂线与屏幕边框的第二个交点 + EXP void WINAPI PlumbLine(PointDB pot1,PointDB pot2,int width,int height,PointDB& pot3,PointDB& pot4); + + // Function name : Bisector + // Description : 输入两条线段返回它们的角平分线 + // Return type : void WINAPI + // Argument : Point pot1 第1条线段的第1个端点 + // Argument : Point pot2 第1条线段的第2个端点 + // Argument : Point pot3 第2条线段的第1个端点 + // Argument : Point pot4 第2条线段的第2个端点 + // Argument : int width 输入屏幕宽度 + // Argument : int height 输入屏幕高度 + // Argument : Point& pot5 返回角平分线与屏幕边框的第一个交点 + // Argument : Point& pot6 返回角平分线与屏幕边框的第二个交点 + + EXP void WINAPI Bisector(PointDB pot1,PointDB pot2,PointDB pot3,PointDB pot4,int width,int height,PointDB& pot5,PointDB& pot6); + + EXP int WINAPI ExpLineFit2(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line); + + EXP int WINAPI ExpArrEdgeLine2(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold); + EXP int WINAPI ExpArrTwoEdge(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr1,int& count1,PointDB* ptArr2,int& count2,int threshold); + + + + // Function name : ExpArrTwoEdge + // Description : 输入一个矩形框,返回框内的两条直线边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point Start1Rect 输入矩形框既搜索起始边的第一个顶点 + // Argument : Point Start2Rect 输入矩形框既搜索起始边的第二个顶点 + // Argument : Point End1Rect 输入矩形框既搜索终止边的第一个顶点 + // Argument : Point End2Rect 输入矩形框既搜索终止边的第二个顶点 + // Argument : PointDB* ptArr1 返回边沿点数组1 + // Argument : int& count1 返回边沿点数组1长度 + // Argument : PointDB* ptArr2 返回边沿点数组2 + // Argument : int& count2 返回边沿点数组2长度 + // Argument : int threshold 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrTwoEdgeNew(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr1,int& count1,PointDB* ptArr2,int& count2,int threshold=-1); + + // Function name : ExpArrEdgeLine + // Description : 输入一个矩形框,返回框内的直线边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : Point Start1Rect 输入矩形框既搜索起始边的第一个顶点 + // Argument : Point Start2Rect 输入矩形框既搜索起始边的第二个顶点 + // Argument : Point End1Rect 输入矩形框既搜索终止边的第一个顶点 + // Argument : Point End2Rect 输入矩形框既搜索终止边的第二个顶点 + // Argument : Point* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + + EXP int WINAPI ExpArrEdgeLineNew(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold=-1); + + // Function name : ExpLineFit + // Description : 直线拟合函数 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : Point* ptArr 输入参与拟合运算的点数组 + // Argument : int count 点数组长度 + // Argument : Point& pot1Line 返回拟合线段一个端点 + // Argument : Point& pot2Line 返回拟合线段的另一个端点 + EXP int WINAPI ExpArrEdgeArcNew(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,double dAngleStart,double dAngleEnd,PointDB* ptArr,int& count,int threshold=-1); + + EXP int WINAPI ExpLineFitNew(PointDB* ptArr,int count,PointDB& pot1Line,PointDB& pot2Line); + + EXP int WINAPI ExpArrEdgeCircleNew(LPBYTE pBits,int nWidth,int nHeight,Point center,double dRadiusStart,double dRadiusEnd,PointDB* ptArr,int& count,int threshold=-1); + + + // Function name : NearInsertValue + // Description : + // Return type : void WINAPI + // Argument : MYPIXEL *lpOldDIBBits 输入图像指针 + // Argument : int oldWidth 输入图像宽度 + // Argument : int oldHeight 输入图像高度 + // Argument : MYPIXEL *lpNewDIBBits 输入图像指针 + // Argument : int newWidth 输出图像高度 + // Argument : int newHeight 输出图像高度 + + //几何校正(球形镜头校正) + EXP int WINAPI GeometryAdjust(MYPIXEL *pBits,int nWidth,int nHeight,double R/*球的半径*/); + //精确修改版//功能同上 + EXP void WINAPI GeometryAdjustA(MYPIXEL *pBits,int inWidth,int inHeight,double R,MYPIXEL *pNewBits,int outWidth,int outHeight); + + EXP int WINAPI FindLine(LPBYTE pBits,int nWidth,int nHeight,Point Start1Rect,Point Start2Rect,Point End1Rect,Point End2Rect,PointDB* ptArr,int& count,int threshold); + EXP void WINAPI Get_BianYuan(LPBYTE pBits,int nWidth,int nHeight,int threshold=-1); + + // Function name : CTaperFit::Fitting + // Description : 返回拟合结果 + // Return type : BOOL 返回TRUE,表示拟合出结果,返回FALSE,表示无法拟合 + // Argument : MY3DPoint* pArr 输入欲进行拟合运算的点坐标数组 + // Argument : int num 输入欲进行拟合运算的点数目 + // Argument : double &x_Value 返回拟合出的圆锥顶点x坐标 + // Argument : double &y_Value 返回拟合出的圆锥顶点y坐标 + // Argument : double &z_Value 返回拟合出的圆锥顶点z坐标 + // 圆锥轴心线用方程 (x-x0)/p=(y-y0)/q=(z-z0)/r,x0,y0,z0就是上面求出的圆锥顶点的x,y,z坐标 + // Argument : double &p_Value 返回圆锥轴心线方程中的p值 + // Argument : double &q_Value 返回圆锥轴心线方程中的q值 + // Argument : double &r_Value 返回圆锥轴心线方程中的r值 + // Argument : double &R_Value 返回圆锥顶角的余弦值 + + EXP int WINAPI TaperFit(MY3DPoint* pArr,int num,double &x_Value,double &y_Value,double &z_Value,double &p_Value,double &q_Value,double &r_Value,double &R_Value); + + + // Function name : columnFit::Fitting + // Description : 拟和函数,该函数参数返回拟和后的圆柱的半径和轴心线信息 + // Return type : void WINAPI + // 轴心线以方程(x-x1)/p=(y-y1)/q=(z-z1)/r + // Argument : double& x_Value 返回轴心线的x1值 + // Argument : double& y_Value 返回轴心线的y1值 + // Argument : double& z_Value 返回轴心线的z1值 + // Argument : double& p_Value 返回轴心线的p值 + // Argument : double& q_Value 返回轴心线的q值 + // Argument : double& r_Value 返回轴心线的r值 + // Argument : double& R_Value 返回圆柱的半径R值 + + EXP bool WINAPI ColumnFit(MY3DPoint* pArr,int num,double& x_Value,double& y_Value,double& z_Value,double& p_Value,double& q_Value,double& r_Value,double& R_Value); + EXP int WINAPI Read_Barcode(LPBYTE pBits,PointDB *ptr,int *Num);//int& x,int& y,int& x_off, int& y_off, char type, int num, char dir); + EXP int WINAPI FaceFit(MY3DPoint* pArr,int n, double* Coe, double* Error, double& dis, double& dis2, double& dis3); + EXP int WINAPI Pro_Drl(char *str,int& len,READPOINT* myvalue, int type, int flag);//(char *str,std::vector &myvalue); + + // Res放四边形ABCD四点,Dest分别返回图形区域中最靠近AB、BC、CD、DA边的四点 + EXP void WINAPI PicGetPoint(BYTE * mBits, Point *Dest, const Point Res[4], int mWidth, int mHeight); + EXP void WINAPI TestVec(std::vector& t1,std::vector& t2); + // 边沿点及平均值 + // Return Value: + // Pots 跳变点 + // DBPots 平均后的跳变点 + // + // Entry: + // Res 边框四点,顺时针或逆时针压入 + + // Set 4控制参数。 + // THREAD_WIDTH; //线宽 + // AVER_NUMS; //做一个平均值的个数 + // RETURN_NUM_POINTS; //返回点数 + // MIN_POINTS; //认为是曲线的最少点数 + EXP void WINAPI Pro_Get_PAve_Value(BYTE * mBits, Point* Pots, PointDB* DBPots, const Point Res[4], const SetCtrl & Set, int* num,int &num1, int mWidth, int mHeight,int YV); + + // Function name : ExpArrEdgeArc + // Description : 输入一个环扇形区,返回区内的圆弧边沿点数组和数组长度 + // Return type : int 返回非0值,表示函数正常执行,返回0值,表示执行失败 + // Argument : LPBYTE pBits 输入图像像素数组 + // Argument : int nWidth 输入图像宽度 + // Argument : int nHeight 输入图像高度 + // Argument : PointDB mPos 输入当前点 + // Argument : Point* ptArr 返回边沿点数组 + // Argument : int& count 返回边沿点数组长度 + // Argument : int threshold=-1 输入阈值,如果使用默认参数,表示自动查找最佳阈值 + EXP int WINAPI ExpArcPoints(LPBYTE pBits,int nWidth,int nHeight,PointDB mPos,PointDB* ptArr,int& count,int threshold,PointDB + &cen,double& R); + + + EXP void WINAPI init_Lasercom(void); + EXP double WINAPI Get_Lasercom(void); + EXP void WINAPI Start_Lasercom(char mode,int nTime); + EXP void WINAPI End_Lasercom(void); + EXP void WINAPI Get_Light_Parameter(long *power_value,float *max_value, float *min_value,long *focal_value); + EXP void WINAPI Set_Power(char type,int value); + EXP int WINAPI Get_laserValue(float *value, float *mSnr,float *mQuality); + + + //处理松下PLC_232通讯 + EXP void WINAPI SetBit(int nAddr,bool bSet);// + EXP bool WINAPI GetBit(int nAddr); + EXP void WINAPI SetDTData(int nAddr,int data); + EXP int WINAPI GetDTData(int nAddr); + + //松下PLC_USB_IO通讯 + EXP void WINAPI SetPLCData(int data); + EXP int WINAPI GetPLCData(void ); + + + + EXP char WINAPI Get_Usb_Switch_Data(void); + + + //返回最小包围盒 + EXP void WINAPI pro_Min_Box(PointDB *pc,double *nWidth, double *nHeight,double *nAngle); + //返回当前周苌 + EXP double WINAPI pro_Length(void); + //返回面积 + EXP double WINAPI pro_Area(void ); + //返回当前周苌 面积 + EXP void WINAPI pro_Length_Area(double *mLen,double *mArea); + + //返回最小包围盒 周苌 面积 + EXP void WINAPI pro_Min_Box_LenArea(PointDB *pc,double *nWidth, double *nHeight,double *nAngle,double *nLen,double *nArea); + //返回最小包围盒 周苌 面积,外围角点 + EXP void WINAPI pro_Min_Box_LenArea1(PointDB *pc,double *nWidth, double *nHeight,double *nAngle,double *nLen,double *nArea,PointDB *nPtr,int &nNum,double &nDis_Tal,PointDB *pc1); + + + EXP void WINAPI GetKeycen_LaseData(float *value1,float *value2); + + //返回当前画面封闭区域面积和周长 + EXP void WINAPI Get_All_Lenth_Area(PBYTE buf, int mWidth, int mHeight,int mU,int mD,double* mLength, double* mArea,int *nNum); + + + //LK_H GETDATA + EXP void WINAPI GetData_LKH(float *value1,float *value2); + EXP void WINAPI Link_LKH(); + //得到buf图形中的距形中点坐标x,y + EXP void WINAPI Get_Rangle(PBYTE buf,int mWidth, int mHeight,double *x,double *y,double *nAngle,double *mW, double *mH); + + EXP void WINAPI Get_PRangle(PBYTE buf,int mWidth, int mHeight,PointDB pos,double *x,double *y,double *nAngle,double *mW, double *mH); + + EXP void WINAPI Set_Image_Face(double scalex,double scaley,int row,int col,double nRow_dis,double nCol_dis,char g_En_Flag,double midx,double midy,struct Image_Section *mFace_Section,int num); + + EXP void WINAPI Get_All_Cen_Area(PBYTE buf, int mWidth, int mHeight,int Setp,char flag,int SetV,PointDBV* pc,int *nNum); + EXP void WINAPI Get_Rangle_Points(PBYTE buf,int startX,int startY,int nW,int nH,PointDB* ptr,int *num); + + EXP void WINAPI Get_Rangle_Box(PointDB *ptr,int n,PointDB *cen,double *w,double *h,double *angle); + + //获得激光扫描点的数据 + EXP int WINAPI GetLaserStoredData(float *GetStorageData,int *GetStorageNumber); + //获得激光扫描时候的实时数据 + EXP int WINAPI PauseScanAndGetLaserData(float *GetStorageData,int *GetStorageNumber); + //获得激光扫描时候的状态 + EXP void WINAPI GetKeyenceStorageStatus(int& _bStatus,int& _StorageNumber); +} + +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/NewDataStruct.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/NewDataStruct.h new file mode 100644 index 0000000..b3ed097 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/NewDataStruct.h @@ -0,0 +1,460 @@ + +#pragma once +#ifndef __NEWDATASRUCT_H +#define __NEWDATASRUCT_H +#include +#include +#define ROW 12 //所能输入的最多点数 +#define COL ROW +using namespace std; +struct Mat +{ + Mat() + { + m_pArr=NULL; + m_nRow=0; + m_nCol=0; + } + Mat(int row,int col) + { + if(row>0&&col>0) + { + m_nRow=row; + m_nCol=col; + m_pArr=new double[row*col]; //自动选取 automatism 自动化 automatization 边沿 edge fringe 边缘 + } + else + { + m_nRow=0; + m_nCol=0; + m_pArr=NULL; + } + } + Mat(Mat& mat) + { + m_nRow=mat.m_nRow; + m_nCol=mat.m_nCol; + int length=m_nRow*m_nCol; + m_pArr=new double[length]; + for(int i=0;i0&&m_nCol>0) + m_pArr=new double[m_nRow*m_nCol]; + } + + void SetCol(int col) + { + if(m_pArr) + delete []m_pArr; + m_nCol=col; + if(m_nRow>0&&m_nCol>0) + m_pArr=new double[m_nRow*m_nCol]; + } + + BOOL SetData(int row,int col,double data) + { + if(row<0||row>=m_nRow||col<0||col>=m_nCol) + return FALSE; + m_pArr[row*m_nCol+col]=data; + return TRUE; + } + + double GetData(int row,int col) + { + return m_pArr[row*m_nCol+col]; + } + + Mat TurnSet() + { + Mat temp(m_nCol,m_nRow); + + for(int i=0;ix=xPara; + this->y=yPara; + } + + PointInt operator+(PointInt& pot) + { + PointInt temp; + temp.x=x+pot.x; + temp.y=y+pot.y; + return temp; + } + + PointInt operator*(INT mul) + { + PointInt temp; + temp.x=x*mul; + temp.y=y*mul; + return temp; + } +}; + +struct PointDB_New +{ + double x; + double y; + PointDB_New() + { + x=0.0; + y=0.0; + } + + PointDB_New(double xPara,double yPara) + { + this->x=xPara; + this->y=yPara; + } + + PointDB_New operator+(PointDB_New& pot) + { + PointDB_New temp; + temp.x=x+pot.x; + temp.y=y+pot.y; + return temp; + } + + PointDB_New operator-(PointDB_New& pot) + { + PointDB_New temp; + temp.x=x-pot.x; + temp.y=y-pot.y; + return temp; + } + + PointDB_New operator+(CPoint& pot) + { + PointDB_New temp; + temp.x=x+(double)pot.x; + temp.y=y+(double)pot.y; + return temp; + } + + PointDB_New operator-(CPoint& pot) + { + PointDB_New temp; + temp.x=x-(double)pot.x; + temp.y=y-(double)pot.y; + return temp; + } + + PointDB_New operator*(double mul) + { + PointDB_New temp; + temp.x=x*mul; + temp.y=y*mul; + return temp; + } + + PointDB_New& operator=(CPoint& pot) + { + x=(double)pot.x; + y=(double)pot.y; + return *this; + } + + PointDB_New& operator=(PointDB_New& pot) + { + x=pot.x; + y=pot.y; + return *this; + } + double Length() + { + return sqrt(x*x+y*y); + } +}; + +typedef struct tagdrawpoint + { + double X_COOR; + double Y_COOR; + }DRAWPoint; + +typedef struct{ + double x; + double y; + double z; +}MY3DPoint/*点*//*,MY3DVector向量*/; + +typedef struct Squ +{ + double ppA[ROW][COL]; + int row; + int col; +}Squ; + +typedef struct tagpoint + { + double X; + double Y; + double R; + tagpoint operator=(tagpoint pot) { X=pot.X; Y=pot.Y; R=pot.R; return (*this); } + }READPOINT; + + +struct SetCtrl{ + short THREAD_WIDTH; //线宽 + short AVER_NUMS; //做一个平均值的个数 + short RETURN_NUM_POINTS; //返回点数 + short MIN_POINTS; //认为是曲线的最少点数 + SetCtrl(void) {THREAD_WIDTH=5; AVER_NUMS=5; RETURN_NUM_POINTS=200; MIN_POINTS=100;} +}; + +struct LinkVec{ + vector vec; +}; + +struct LinkVecDB{ + vector vec; +}; + +typedef struct{ + int x; + int y; + int value; + double r; +}PointDBV; + +#endif \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp index c70fca4..ad79505 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.cpp @@ -1,238 +1,74 @@ #include "StdAfx.h" #include #include -#include "..\Keyence\LkIF.h" +#include "dll.h" #include "So7_Interface.h " #define MAX_STORAGE_DATA_SIZE 65536 CSo7_Interface::CSo7_Interface() { - m_bIsStorage=FALSE; - m_iSetOutNo=0; - m_StoredDataNumber=0; - m_NeedStorageDataNumber=0; } CSo7_Interface::~CSo7_Interface() { - FreeLibrary(m_hImageDLL); + if(m_hImageDLL) + { + Pro_cmd(Exit_DLL,(LPARAM)&Image_Info); + Pro_cmd(VQUIT_DLL,(LPARAM)&Image_Info); + Pro_cmd(MCLOSE,(LPARAM)&Image_Info); + FreeLibrary(m_hImageDLL); + } } //======================================== -void CSo7_Interface::KeyenceLaserInit(void) +void CSo7_Interface::InitDll(void) { m_hImageDLL=LoadLibrary(_T("Image.dll")); if(m_hImageDLL) { - m_pGetCalcData=(pLKIF_GetCalcData)GetProcAddress(m_hImageDLL,"LKIF_GetCalcData"); - m_pDataStorageStart=(pLKIF_DataStorageStart)GetProcAddress(m_hImageDLL,"LKIF_DataStorageStart"); - m_pDataStorageStop=(pLKIF_DataStorageStop)GetProcAddress(m_hImageDLL,"LKIF_DataStorageStop"); - m_pDataStorageInit=(pLKIF_DataStorageInit)GetProcAddress(m_hImageDLL,"LKIF_DataStorageInit"); - m_pDataStorageGetData=(pLKIF_DataStorageGetData)GetProcAddress(m_hImageDLL,"LKIF_DataStorageGetData"); - m_pDataStorageGetStatus=(pLKIF_DataStorageGetStatus)GetProcAddress(m_hImageDLL,"LKIF_DataStorageGetStatus"); - m_pSetDataStorage=(pLKIF_SetDataStorage)GetProcAddress(m_hImageDLL,"LKIF_SetDataStorage"); + Pro_cmd=(PRO_CMD)GetProcAddress(m_hImageDLL,"Pro_Cmd"); + m_pGET_LASER_STORED_DATA=(GET_LASER_STORED_DATA)GetProcAddress(m_hImageDLL,"GetLaserStoredData"); + m_pPAUSE_SCAN_AND_GET_LASER_DATA=(PAUSE_SCAN_AND_GET_LASER_DATA)GetProcAddress(m_hImageDLL,"PauseScanAndGetLaserData"); + m_pGET_SCAN_LASER_STORAGE_STATUS=(GET_SCAN_LASER_STORAGE_STATUS)GetProcAddress(m_hImageDLL,"GetKeyenceStorageStatus"); - } + Pro_cmd(VINIT_DLL,(LPARAM)&Image_Info); + Pro_cmd(MINIT_USB,(LPARAM)&Image_Info); -} -//============================================== -void CSo7_Interface::Get_KeyenceLaserData(float *LaserValue1,float *LaserValue2) -{ - *LaserValue1=10; - *LaserValue2=10; - LKIF_FLOATVALUE GetVal1,GetVal2; - if(m_pGetCalcData(&GetVal1,&GetVal2)!=1) - { - return ; - } - switch(GetVal1.FloatResult) - { - case LKIF_FLOATRESULT_RANGEOVER_P: - { - *LaserValue1=50; - break; - } - case LKIF_FLOATRESULT_RANGEOVER_N: - { - *LaserValue1=-50; - break; - } - case LKIF_FLOATRESULT_WAITING: - { - *LaserValue1=0; - break; - } - default: - { - *LaserValue1=GetVal1.Value; - break; - } - } - switch(GetVal2.FloatResult) - { - case LKIF_FLOATRESULT_RANGEOVER_P: - { - *LaserValue2=50; - break; - } - case LKIF_FLOATRESULT_RANGEOVER_N: - { - *LaserValue2=-50; - break; - } - case LKIF_FLOATRESULT_WAITING: - { - *LaserValue2=0; - break; - } - default: - { - *LaserValue2=GetVal2.Value; - break; - } } } - -//============================================== -BOOL CSo7_Interface::StartStoreData(int _NeedStorageDataNumber,int _SampleTime) +//======================================== +void CSo7_Interface::StartStoreData(void) { - BOOL bStatus(FALSE); - GetStoreDataStatus(); - if (!m_bIsStorage) - { - bStatus=m_pDataStorageInit(); - if (_NeedStorageDataNumber<1) - { - _NeedStorageDataNumber=1; - } - else if (_NeedStorageDataNumber>65536) - { - _NeedStorageDataNumber=65536; - } - m_NeedStorageDataNumber=_NeedStorageDataNumber; - - if (_SampleTime<0.4) - { - m_StorageCycle=LKIF_STORAGECYCLE_1; - } - else if (_SampleTime<1) - { - m_StorageCycle=LKIF_STORAGECYCLE_2; - } - else if (_SampleTime<2) - { - m_StorageCycle=LKIF_STORAGECYCLE_5; - } - else if (_SampleTime<4) - { - m_StorageCycle=LKIF_STORAGECYCLE_10; - } - else if (_SampleTime<10) - { - m_StorageCycle=LKIF_STORAGECYCLE_20; - } - else if (_SampleTime<20) - { - m_StorageCycle=LKIF_STORAGECYCLE_50; - } - else if (_SampleTime<40) - { - m_StorageCycle=LKIF_STORAGECYCLE_100; - } - else if (_SampleTime<100) - { - m_StorageCycle=LKIF_STORAGECYCLE_200; - } - else if (_SampleTime<200) - { - m_StorageCycle=LKIF_STORAGECYCLE_500; - } - else - { - m_StorageCycle=LKIF_STORAGECYCLE_1000; - } - bStatus=m_pSetDataStorage(LKIF_TARGETOUT_OUT1,m_NeedStorageDataNumber,m_StorageCycle); - - if (bStatus) - { - bStatus=m_pDataStorageStart(); - } - } - return bStatus; -}; -//============================================== -BOOL CSo7_Interface::StopStoreData() + Image_Info.gScanLaserPntsNumber=500; + Image_Info.gScanLaserPntsSampleTime=20; + Pro_cmd(START_SCAN_LASER_POINTS,(LPARAM)&Image_Info); +} +//======================================== +void CSo7_Interface::StopStoreData(void) { - BOOL bStatus(FALSE); - GetStoreDataStatus(); - if (m_bIsStorage) - { - bStatus=m_pDataStorageStop(); - } - return bStatus; -}; -//============================================== -BOOL CSo7_Interface::PauseScanAndGetData(float *GetStorageData,int *GetStorageNumber) + Pro_cmd(STOP_SCAN_LASER_POINTS,(LPARAM)&Image_Info); +} +//======================================== +void CSo7_Interface::GetStorageStatus(void) { - BOOL bStatus(FALSE); - GetStoreDataStatus(); - if (m_bIsStorage) - { - bStatus=m_pDataStorageStop(); - bStatus=GetStoredData(GetStorageData,GetStorageNumber); - bStatus=m_pDataStorageStart(); - } - else - { - bStatus=GetStoredData(GetStorageData,GetStorageNumber); - } - return bStatus; -}; -//============================================== -BOOL CSo7_Interface::GetStoredData(float *GetStorageData,int *GetStorageNumber) + int _bIsStorage(0),_StoredDataNumber(0); + Pro_cmd(GET_SCAN_LASER_STATUS,(LPARAM)&Image_Info); + _bIsStorage = Image_Info.gIsLaserStorage; + _StoredDataNumber= Image_Info.gLaserStoredNumber; +} +//======================================== +void CSo7_Interface::GetStoredData(void) { - BOOL bStatus(FALSE); - GetStoreDataStatus(); - if (!m_bIsStorage) - { - LKIF_FLOATVALUE GetStorageValue[MAX_STORAGE_DATA_SIZE]; - bStatus=m_pDataStorageGetData(m_iSetOutNo,m_StoredDataNumber,GetStorageValue,GetStorageNumber); - for(int i=0;i<*GetStorageNumber;i++) - { - switch(GetStorageValue[i].FloatResult) - { - case LKIF_FLOATRESULT_RANGEOVER_P: - { - *GetStorageData++=50; - break; - } - case LKIF_FLOATRESULT_RANGEOVER_N: - { - *GetStorageData++=-50; - break; - } - case LKIF_FLOATRESULT_WAITING: - { - *GetStorageData++=0; - break; - } - default: - { - *GetStorageData++=GetStorageValue[i].Value; - break; - } - } - } - - } - return bStatus; -}; -//============================================== -BOOL CSo7_Interface::GetStoreDataStatus() + float Laserval[1000]; + int LaserNum(0); + m_pGET_LASER_STORED_DATA(Laserval,&LaserNum); +} +//======================================== +void CSo7_Interface::PauseScanAndGetData(void) { - BOOL bStatus(FALSE); - bStatus=m_pDataStorageGetStatus(m_iSetOutNo,&m_bIsStorage,&m_StoredDataNumber); - return bStatus; -}; + float Laserval[1000]; + int LaserNum(0); + m_pPAUSE_SCAN_AND_GET_LASER_DATA(Laserval,&LaserNum); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h index 212628c..7b0e865 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_Interface.h @@ -9,52 +9,34 @@ #pragma once #endif // _MSC_VER > 1000 - -typedef int (WINAPI* pGetLaserStoredData) (float *GetStorageData,int *GetStorageNumber); -// Starting the Data Storage -typedef BOOL (WINAPI* pLKIF_DataStorageStart)(void); -// Stopping the Data Storage -typedef BOOL (WINAPI* pLKIF_DataStorageStop)(void); -// Initializing the Data Storage -typedef BOOL (WINAPI* pLKIF_DataStorageInit)(void); -// Outputting the Data Storage -typedef BOOL (WINAPI* pLKIF_DataStorageGetData)(IN int OutNo,IN int NumOutBuffer,OUT LKIF_FLOATVALUE *OutBuffer,OUT int *NumReceived); -// Data Storage Accumulation Status Output -typedef BOOL (WINAPI* pLKIF_DataStorageGetStatus)(IN int OutNo,OUT BOOL *IsStorage,OUT int *NumStorageData); -// Set Data Storage -typedef BOOL (WINAPI* pLKIF_SetDataStorage)(IN LKIF_TARGETOUT TargetOut,IN int NumStorage,IN LKIF_STORAGECYCLE StorageCycle); +typedef void (_cdecl*PRO_CMD)(int nCmd,LPARAM value); +typedef int (_cdecl*GET_LASER_STORED_DATA)(float *GetStorageData,int *GetStorageNumber); +typedef int (_cdecl*PAUSE_SCAN_AND_GET_LASER_DATA)(float *GetStorageData,int *GetStorageNumber); +typedef void (_cdecl*GET_SCAN_LASER_STORAGE_STATUS)(int& _bStatus,int& _StorageNumber); //====================================================================================== class CSo7_Interface { protected: - int m_iSetOutNo; - int m_NeedStorageDataNumber; - LKIF_STORAGECYCLE m_StorageCycle; HINSTANCE m_hImageDLL; + Dev_Info Image_Info; public: CSo7_Interface(); ~CSo7_Interface(); //获取数据的函数指针 - pLKIF_GetCalcData m_pGetCalcData; - pLKIF_DataStorageStart m_pDataStorageStart; - pLKIF_DataStorageStop m_pDataStorageStop; - pLKIF_DataStorageInit m_pDataStorageInit; - pLKIF_DataStorageGetData m_pDataStorageGetData; - pLKIF_DataStorageGetStatus m_pDataStorageGetStatus; - pLKIF_SetDataStorage m_pSetDataStorage; + PRO_CMD Pro_cmd; + GET_LASER_STORED_DATA m_pGET_LASER_STORED_DATA; + PAUSE_SCAN_AND_GET_LASER_DATA m_pPAUSE_SCAN_AND_GET_LASER_DATA; + GET_SCAN_LASER_STORAGE_STATUS m_pGET_SCAN_LASER_STORAGE_STATUS; + void InitDll(); - int m_StoredDataNumber; - BOOL m_bIsStorage; - void KeyenceLaserInit(void); - void Get_KeyenceLaserData(float *LaserValue1,float *LaserValue2); - BOOL StartStoreData(int _NeedStorageDataNumber,int _SampleTime); - BOOL StopStoreData(); - BOOL GetStoreDataStatus(); - BOOL GetStoredData(float *GetStorageData,int *GetStorageNumber); - BOOL PauseScanAndGetData(float *GetStorageData,int *GetStorageNumber); + void StartStoreData(); + void StopStoreData(); + void GetStorageStatus(); + void GetStoredData(); + void PauseScanAndGetData(); }; #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log index f4953e3..7a192d1 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -621,3 +621,118 @@ Init:Open device succeed . _start_machine Exit: Exit_SO7Usb Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini index bb16c5e..bb77e3c 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/Utility_Config.ini @@ -1,33 +1,33 @@ [HARDWARE] -SPEED_BASE_X1=1 -SPEED_MAX_X1=1 -SPEED_START_X1=1 -SPEED_FRESH_X1=1 -SPEED_SLOW_X1=1.000 +SPEED_BASE_X1=0 +SPEED_MAX_X1=10 +SPEED_START_X1=30 +SPEED_FRESH_X1=10 +SPEED_SLOW_X1=0.000 ; -SPEED_BASE_X2=1 -SPEED_MAX_X2=1 -SPEED_START_X2=1 -SPEED_FRESH_X2=1 -SPEED_SLOW_X2=1.000 +SPEED_BASE_X2=0 +SPEED_MAX_X2=10 +SPEED_START_X2=30 +SPEED_FRESH_X2=10 +SPEED_SLOW_X2=0.000 ; -SPEED_BASE_X3=1 +SPEED_BASE_X3=0 SPEED_MAX_X3=1 -SPEED_START_X3=1 -SPEED_FRESH_X3=1 -SPEED_SLOW_X3=1.000 +SPEED_START_X3=30 +SPEED_FRESH_X3=10 +SPEED_SLOW_X3=0.000 ; -SPEED_BASE_X4=1 +SPEED_BASE_X4=0 SPEED_MAX_X4=1 -SPEED_START_X4=1 -SPEED_FRESH_X4=1 -SPEED_SLOW_X4=1.000 +SPEED_START_X4=30 +SPEED_FRESH_X4=10 +SPEED_SLOW_X4=0.000 ; -SPEED_BASE_X5=1 +SPEED_BASE_X5=0 SPEED_MAX_X5=1 -SPEED_START_X5=1 -SPEED_FRESH_X5=1 -SPEED_SLOW_X5=1.000 +SPEED_START_X5=30 +SPEED_FRESH_X5=10 +SPEED_SLOW_X5=0.000 ; SPEED_BASE_Y1=1 SPEED_MAX_Y1=1 @@ -93,9 +93,9 @@ X_MOTOR_PRECISION=0.100 Y_MOTOR_PRECISION=0.100 Z_MOTOR_PRECISION=0.100 ; -X_MOTOR_WHEELBASE=1.000 -Y_MOTOR_WHEELBASE=1.000 -Z_MOTOR_WHEELBASE=1.000 +X_MOTOR_WHEELBASE=20.000 +Y_MOTOR_WHEELBASE=20.000 +Z_MOTOR_WHEELBASE=1.500 ; MOTOR_PULSE_NUM=10000 ; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 83ed5fc..8482aec 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -350,7 +350,7 @@ BEGIN PUSHBUTTON "MoveTo",IDC_BUTTON_ZOOM_MOVETO,263,43,50,14 END -IDD_S07_OPTION_DIALOG DIALOGEX 0, 0, 297, 150 +IDD_S07_OPTION_DIALOG DIALOGEX 0, 0, 298, 166 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Option Dialog" FONT 8, "MS Shell Dlg", 400, 0, 0x1 @@ -359,10 +359,12 @@ BEGIN CONTROL "Keyence激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,175,64,76,10 CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON,48,39,69,10 CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,48,64,69,10 - CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,48,89,69,10 - DEFPUSHBUTTON "OK",IDOK,181,129,50,14 - PUSHBUTTON "Cancel",IDCANCEL,240,129,50,14 - GROUPBOX "测试选项",IDC_STATIC,23,17,263,92 + CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,48,89,69,10 + DEFPUSHBUTTON "OK",IDOK,181,145,50,14 + PUSHBUTTON "Cancel",IDCANCEL,241,145,50,14 + GROUPBOX "测试选项",IDC_STATIC,29,15,243,120 + CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON,175,89,45,10 + CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,48,114,62,10 END IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316 @@ -507,6 +509,37 @@ BEGIN CONTROL "V",IDC_CHECK_REPETESTV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,37,267,20,10 END +IDD_SO7_UTIL_IMAGE_DLL DIALOGEX 0, 0, 316, 183 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Test Imae.dll" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + PUSHBUTTON "Exit",IDCANCEL,259,162,50,14 + PUSHBUTTON "Start",IDC_BUTTON_IMAGEDLL_START_SCAN_LASER,55,41,50,14 + PUSHBUTTON "Get Data",IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA,127,41,50,14 + PUSHBUTTON "Pause &Get",IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA,129,70,50,14 + PUSHBUTTON "Stop",IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER,55,71,50,14 +END + +IDD_SO7_VIDEOCARD_TC4000 DIALOGEX 0, 0, 488, 316 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "TC4000视频卡" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "开始",IDOK,372,298,50,14 + PUSHBUTTON "退出",IDCANCEL,435,298,50,14 + CONTROL "彩色图像",IDC_RADIO_RGB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,435,49,48,10 + CONTROL "黑白图像",IDC_RADIO_GRAY,"Button",BS_AUTORADIOBUTTON,435,67,48,10 + CONTROL "垂直镜像",IDC_CHECK_MIRROR_VERTICALLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,435,93,48,10 + PUSHBUTTON "保存图片",IDC_BUTTON_SAVE_PICTURE,435,117,50,14 + GROUPBOX "通道选择",IDC_STATIC,438,145,43,87 + CONTROL "",IDC_STATIC_TC4000_PICTURE,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,228,296,68,16 + CONTROL "1",IDC_RADIO_TC4000_CHANNEL1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,451,162,20,10 + CONTROL "2",IDC_RADIO_TC4000_CHANNEL2,"Button",BS_AUTORADIOBUTTON,451,179,20,10 + CONTROL "3",IDC_RADIO_TC4000_CHANNEL3,"Button",BS_AUTORADIOBUTTON,451,196,20,10 + CONTROL "4",IDC_RADIO_TC4000_CHANNEL4,"Button",BS_AUTORADIOBUTTON,451,213,20,10 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -542,9 +575,9 @@ BEGIN IDD_S07_OPTION_DIALOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 290 + RIGHTMARGIN, 291 TOPMARGIN, 7 - BOTTOMMARGIN, 143 + BOTTOMMARGIN, 159 END IDD_SO7_VIDEOCARD_SDK3000, DIALOG @@ -578,6 +611,23 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 429 END + + IDD_SO7_UTIL_IMAGE_DLL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 309 + TOPMARGIN, 7 + BOTTOMMARGIN, 176 + END + + IDD_SO7_VIDEOCARD_TC4000, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 485 + VERTGUIDE, 435 + TOPMARGIN, 7 + BOTTOMMARGIN, 312 + END END #endif // APSTUDIO_INVOKED diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index ee55d44..29ca41a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -5,6 +5,7 @@ #include "resource.h" #include "..\..\..\SevenOcean\SO7_Proto.h" #include "ProcessButton.h" + #include "VideoCardDefine.h" #include "..\..\..\Videocard\SDK3000\sdk3000_7130.h" #include "Videocard_SDK3000.h" @@ -12,11 +13,19 @@ #include "..\..\..\Videocard\SV2000E\DXMediaCap.h" #include "..\..\..\Videocard\SV2000E\dataAcq.h" #include "Videocard_SV2000E.h" + +#include "..\..\..\Videocard\TC4000\Sa7134Capture.h" +#include "Videocard_TC4000.h" + #include "SO7_UtilDlg.h" #include "..\..\..\Keyence\Keyence_Laser.h" #include "..\..\..\Keyence\Keyence_Laser_LK_H.h" #include "..\..\..\Keyence\\Keyence_Proto.h" #include "Keyence_UtilDlg.h" + +#include "..\..\..\SevenOcean\dll.h" +#include "..\..\..\SevenOcean\So7_Interface.h" +#include "So7_Util_ImageDll.h" #include "afxdialogex.h" #include "So7_Option.h" @@ -24,6 +33,8 @@ CSO7_Proto* m_pSO7_Proto=NULL; CKeyence_Laser* m_pKeyence_Laser=NULL; CKeyence_Laser_LK_H* m_pKeyence_Laser_LK_H=NULL; CKeyence_Proto* m_pKeyence_Proto=NULL; + + CSo7_Interface* m_pSo7_Interface=NULL; // CSo7_Option dialog IMPLEMENT_DYNAMIC(CSo7_Option, CDialog) @@ -129,7 +140,7 @@ void CSo7_Option::OnBnClickedOk() m_pKeyence_Proto=NULL; delete m_pSO7_Proto; m_pSO7_Proto=NULL; - } + } else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->GetCheck()) { CVideocard_SDK3000* pVideocard_SDK3000=new CVideocard_SDK3000(); @@ -141,6 +152,27 @@ void CSo7_Option::OnBnClickedOk() CVideocard_SV2000E* pVideocard_SV2000E=new CVideocard_SV2000E(); pVideocard_SV2000E->DoModal(); delete pVideocard_SV2000E; + } + else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->GetCheck()) + { + CVideocard_TC4000* pVideocard_TC4000=new CVideocard_TC4000(); + pVideocard_TC4000->DoModal(); + delete pVideocard_TC4000; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->GetCheck()) + { + if (!m_pSo7_Interface) + { + m_pSo7_Interface=new CSo7_Interface(); + } + CSo7_Util_ImageDll* pSo7_Util_ImageDll=new CSo7_Util_ImageDll(); + pSo7_Util_ImageDll->DoModal(); + delete pSo7_Util_ImageDll; + if (m_pSo7_Interface) + { + delete m_pSo7_Interface; + m_pSo7_Interface=NULL; + } } } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp new file mode 100644 index 0000000..3821f3c --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.cpp @@ -0,0 +1,95 @@ +// So7_Util_ImageDll.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" +#include "..\..\..\SevenOcean\dll.h" +#include "..\..\..\SevenOcean\So7_Interface.h" +#include "So7_Util_ImageDll.h" +#include "afxdialogex.h" + +extern CSo7_Interface* m_pSo7_Interface; +// CSo7_Util_ImageDll dialog + +IMPLEMENT_DYNAMIC(CSo7_Util_ImageDll, CDialog) + +CSo7_Util_ImageDll::CSo7_Util_ImageDll(CWnd* pParent /*=NULL*/) + : CDialog(CSo7_Util_ImageDll::IDD, pParent) +{ + +} + +CSo7_Util_ImageDll::~CSo7_Util_ImageDll() +{ +} + +void CSo7_Util_ImageDll::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CSo7_Util_ImageDll, CDialog) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_START_SCAN_LASER, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllStartScanLaser) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllStopScanLaser) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllGetScanLaserData) + ON_BN_CLICKED(IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA, &CSo7_Util_ImageDll::OnBnClickedButtonImagedllPauseAndGetScanLaserData) +END_MESSAGE_MAP() + + +// CSo7_Util_ImageDll message handlers + +//=================================================== +BOOL CSo7_Util_ImageDll::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + + m_pSo7_Interface->InitDll(); + + return TRUE; // return TRUE unless you set the focus to a control + +} + +//====================================================== +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllStartScanLaser() +{ + m_pSo7_Interface->StartStoreData(); +} + +//====================================================== +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllStopScanLaser() +{ + m_pSo7_Interface->StopStoreData(); +} + +//====================================================== +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllGetScanLaserData() +{ + m_pSo7_Interface->GetStoredData(); +} + +//====================================================== +void CSo7_Util_ImageDll::OnBnClickedButtonImagedllPauseAndGetScanLaserData() +{ + m_pSo7_Interface->PauseScanAndGetData(); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h new file mode 100644 index 0000000..2825f47 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_ImageDll.h @@ -0,0 +1,26 @@ +#pragma once + + +// CSo7_Util_ImageDll dialog + +class CSo7_Util_ImageDll : public CDialog +{ + DECLARE_DYNAMIC(CSo7_Util_ImageDll) + +public: + CSo7_Util_ImageDll(CWnd* pParent = NULL); // standard constructor + virtual ~CSo7_Util_ImageDll(); + +// Dialog Data + enum { IDD = IDD_SO7_UTIL_IMAGE_DLL }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); + DECLARE_MESSAGE_MAP() +public: + afx_msg void OnBnClickedButtonImagedllStartScanLaser(); + afx_msg void OnBnClickedButtonImagedllStopScanLaser(); + afx_msg void OnBnClickedButtonImagedllGetScanLaserData(); + afx_msg void OnBnClickedButtonImagedllPauseAndGetScanLaserData(); +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index 27338af..8d330be 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -109,7 +109,7 @@ $(IntDir);%(AdditionalIncludeDirectories) - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;%(AdditionalDependencies) true Windows MachineX86 @@ -170,7 +170,7 @@ true true MachineX86 - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Keyence\LKIF2.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;%(AdditionalDependencies) @@ -213,6 +213,7 @@ + @@ -238,6 +239,7 @@ + Create @@ -247,6 +249,7 @@ + @@ -260,6 +263,8 @@ + + @@ -287,6 +292,7 @@ + @@ -294,6 +300,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index 024e610..7e2f783 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -109,6 +109,15 @@ Sources Files + + Sources Files + + + Sources Files + + + Sources Files + @@ -246,6 +255,18 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SDK3000.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SDK3000.cpp index a525df6..3222d0b 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SDK3000.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SDK3000.cpp @@ -9,7 +9,6 @@ #include "afxdialogex.h" static BYTE g_DataBuffer[640*480*2]; -int g_nPic(0); HANDLE g_hEventCap = NULL; HANDLE g_hEventExt = NULL; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp index c420b0d..7d028de 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_SV2000E.cpp @@ -16,29 +16,6 @@ static const long SaturationDefault = 5000; static const long HueDefault = 5000; static const long SharpnessDefault = 4; -//视频制式 -typedef enum -{ - VideoStandard_None = 0x00000000, - VideoStandard_NTSC_M = 0x00000001, - VideoStandard_NTSC_M_J = 0x00000002, - VideoStandard_NTSC_433 = 0x00000004, - VideoStandard_PAL_B = 0x00000010, - VideoStandard_PAL_D = 0x00000020, - VideoStandard_PAL_H = 0x00000080, - VideoStandard_PAL_I = 0x00000100, - VideoStandard_PAL_M = 0x00000200, - VideoStandard_PAL_N = 0x00000400, - VideoStandard_PAL_60 = 0x00000800, - VideoStandard_SECAM_B = 0x00001000, - VideoStandard_SECAM_D = 0x00002000, - VideoStandard_SECAM_G = 0x00004000, - VideoStandard_SECAM_H = 0x00008000, - VideoStandard_SECAM_K = 0x00010000, - VideoStandard_SECAM_K1 = 0x00020000, - VideoStandard_SECAM_L = 0x00040000, - VideoStandard_SECAM_L1 = 0x00080000, -} VideoStandard; static BYTE g_DataBuffer[640*480*2]; // CVideocard_SV2000E dialog diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.cpp new file mode 100644 index 0000000..5018415 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.cpp @@ -0,0 +1,509 @@ +// Videocard_SDK3000.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" +#include "VideoCardDefine.h" +#include "..\..\..\Videocard\TC4000\Sa7134Capture.h" +#include "Videocard_TC4000.h" +#include "afxdialogex.h" + +static const ULONG BrightnessDefault = 0x80; +static const ULONG ContrastDefault = 0x46;//0x44; +static const ULONG SaturationDefault = 0x44;//0x3C; +static const ULONG HueDefault = 0x00; +static const ULONG SharpnessDefault = 0x01; + +static BYTE g_DataBuffer[640*480*2]; +static DWORD SwitchChannel=0; +// CVideocard_TC4000 dialog + +IMPLEMENT_DYNAMIC(CVideocard_TC4000, CDialog) + + CVideocard_TC4000::CVideocard_TC4000(CWnd* pParent /*=NULL*/) + : CDialog(CVideocard_TC4000::IDD, pParent) +{ + m_Status=FALSE; + m_dwCard=0; + m_nDevNum=0; + m_hCapThread = NULL; + m_bMirror=FALSE; + m_ConvertColorType=YUY2TORGB; + m_bSaveFile=FALSE; +} + +CVideocard_TC4000::~CVideocard_TC4000() +{ +} + +void CVideocard_TC4000::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CVideocard_TC4000, CDialog) + ON_WM_TIMER() + ON_BN_CLICKED(IDOK, &CVideocard_TC4000::OnBnClickedOk) + ON_BN_CLICKED(IDCANCEL, &CVideocard_TC4000::OnBnClickedCancel) + ON_BN_CLICKED(IDC_RADIO_RGB, &CVideocard_TC4000::OnBnClickedRadioRgb) + ON_BN_CLICKED(IDC_RADIO_GRAY, &CVideocard_TC4000::OnBnClickedRadioGray) + ON_BN_CLICKED(IDC_CHECK_MIRROR_VERTICALLY, &CVideocard_TC4000::OnBnClickedCheckMirrorVertically) + ON_BN_CLICKED(IDC_BUTTON_SAVE_PICTURE, &CVideocard_TC4000::OnBnClickedButtonSavePicture) + ON_BN_CLICKED(IDC_RADIO_TC4000_CHANNEL1, &CVideocard_TC4000::OnBnClickedRadioTc4000Channel1) + ON_BN_CLICKED(IDC_RADIO_TC4000_CHANNEL2, &CVideocard_TC4000::OnBnClickedRadioTc4000Channel2) + ON_BN_CLICKED(IDC_RADIO_TC4000_CHANNEL3, &CVideocard_TC4000::OnBnClickedRadioTc4000Channel3) + ON_BN_CLICKED(IDC_RADIO_TC4000_CHANNEL4, &CVideocard_TC4000::OnBnClickedRadioTc4000Channel4) +END_MESSAGE_MAP() + + +// CVideocard_TC4000 message handlers +//==================================== +BOOL CVideocard_TC4000::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // Add "About..." menu item to system menu. + + // IDM_ABOUTBOX must be in the system command range. + ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); + ASSERT(IDM_ABOUTBOX < 0xF000); + + CMenu* pSysMenu = GetSystemMenu(FALSE); + if (pSysMenu != NULL) + { + BOOL bNameValid; + CString strAboutMenu; + bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + ASSERT(bNameValid); + if (!strAboutMenu.IsEmpty()) + { + pSysMenu->AppendMenu(MF_SEPARATOR); + pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); + } + } + ((CButton *)GetDlgItem(IDC_RADIO_RGB))->SetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO_GRAY))->SetCheck(FALSE); + + ((CButton *)GetDlgItem(IDC_RADIO_TC4000_CHANNEL1))->SetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO_TC4000_CHANNEL2))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_TC4000_CHANNEL3))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_TC4000_CHANNEL4))->SetCheck(FALSE); + + return TRUE; // return TRUE unless you set the focus to a control +} +//====================================== +void CVideocard_TC4000::OnBnClickedOk() +{ + BOOL LoadStatus=LoadVideocard(); + if(LoadStatus) + { + SetTimer(1,50,NULL); + GetDlgItem(IDOK)->EnableWindow(false); + } + +} +//========================================== +void CVideocard_TC4000::OnBnClickedCancel() +{ + KillTimer(1); + UnloadVideocard(); + CDialog::OnCancel(); +} +//============================================ +void CVideocard_TC4000::OnBnClickedRadioRgb() +{ + m_ConvertColorType=YUY2TORGB; +} + +//============================================ +void CVideocard_TC4000::OnBnClickedRadioGray() +{ + m_ConvertColorType=YUY2TOGRAY; +} + +//============================================ +void CVideocard_TC4000::OnBnClickedCheckMirrorVertically() +{ + if (((CButton *)GetDlgItem(IDC_CHECK_MIRROR_VERTICALLY))->GetCheck()) + { + m_bMirror=TRUE; + } + else + { + m_bMirror=FALSE; + } +} + +//========================================== +void CVideocard_TC4000::OnBnClickedRadioTc4000Channel1() +{ + VCAStopVideoCapture(SwitchChannel); + SwitchChannel=0; + VCAStartVideoCapture(SwitchChannel,CAP_ORIGIN_STREAM,MPEG4_AVIFILE_ONLY,""); +} + +//========================================== +void CVideocard_TC4000::OnBnClickedRadioTc4000Channel2() +{ + VCAStopVideoCapture(SwitchChannel); + SwitchChannel=1; + VCAStartVideoCapture(SwitchChannel,CAP_ORIGIN_STREAM,MPEG4_AVIFILE_ONLY,""); + +} + +//========================================== +void CVideocard_TC4000::OnBnClickedRadioTc4000Channel3() +{ + VCAStopVideoCapture(SwitchChannel); + SwitchChannel=2; + VCAStartVideoCapture(SwitchChannel,CAP_ORIGIN_STREAM,MPEG4_AVIFILE_ONLY,""); + +} + +//========================================== +void CVideocard_TC4000::OnBnClickedRadioTc4000Channel4() +{ + VCAStopVideoCapture(SwitchChannel); + SwitchChannel=3; + VCAStartVideoCapture(SwitchChannel,CAP_ORIGIN_STREAM,MPEG4_AVIFILE_ONLY,""); + +} + +//============================================ +void CVideocard_TC4000::OnBnClickedButtonSavePicture() +{ + CString CTmpString; + CString PathName; + CString path_and_fileName; + + PathName=_T("TC4000.bmp"); + CString szFilter=_T("BMP Files(*.bmp)|*.bmp|ALL Files(*.*)|*.*||"); + CFileDialog fdlg(FALSE,_T("BMP"),PathName,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); + + if( fdlg.DoModal()==IDOK) + { + m_SaveFile=fdlg.GetPathName(); + m_bSaveFile=TRUE; + } + delete fdlg; + + +} +//======================================= +BOOL CVideocard_TC4000::LoadVideocard() +{ + HWND mHwnd=GetDlgItem(IDC_STATIC_TC4000_PICTURE)->GetSafeHwnd(); + m_Status=VCAInitSdk(mHwnd, PCI_MEMORY_VIDEOMEMORY,0);//PCI_MEMORY_VIDEOMEMORY); + if(m_Status) + { + m_nDevNum = VCAGetDevNum(); + for(int i=0;i255)Color_R=255; + if(Color_R<0)Color_R=0; + pDstData[x+2]=static_cast(Color_R); + + + Color_G=(1164*(_pSrcData[lCnt2*2]-16)-813*(_pSrcData[lCnt3+1]-128)-392*(_pSrcData[lCnt3+3]-128))/1000; + if(Color_G>255)Color_G=255; + if(Color_G<0)Color_G=0; + pDstData[x+1]=static_cast(Color_G); + + + Color_B=(1164*(_pSrcData[lCnt2*2]-16)+2017*(_pSrcData[lCnt3+1]-128))/1000; + if(Color_B>255)Color_B=255; + if(Color_B<0)Color_B=0; + pDstData[x]=static_cast(Color_B); + + break; + } + case RGB24TOGRAY: + { + pDstData[x+2]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + pDstData[x+1]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + pDstData[x]=(_pSrcData[lCnt2*3+2]+_pSrcData[lCnt2*3+1]+_pSrcData[lCnt2*3])/3; + break; + } + case YUY2TOGRAY: + { + pDstData[x+2]=_pSrcData[2*lCnt2]; + pDstData[x+1]=_pSrcData[2*lCnt2]; + pDstData[x]=_pSrcData[2*lCnt2]; + break; + } + } + if((lCnt1%2)==1) + lCnt3=lCnt3+4; + lCnt2++; + lCnt1++; + } + } +} +//================================================================ +BOOL CVideocard_TC4000::SaveBitmapToFile(const CBitmap& _bitmap, CString _lpFileName) +{ + HBITMAP hBitmap; // 为刚才的屏幕位图句柄 + HDC hDC; //设备描述表 + int iBits; //当前显示分辨率下每个像素所占字节数 + WORD wBitCount(24); //位图中每个像素所占字节数 + DWORD dwPaletteSize = 0, //定义调色板大小 + dwBmBitsSize, //位图中像素字节大小 + dwDIBSize, //位图文件大小 + dwWritten; //写入文件字节数 + BITMAP Bitmap; //位图属性结构 + BITMAPFILEHEADER bmhFiledr; //位图文件头结构 + BITMAPINFOHEADER bi; //位图信息头结构 + LPBITMAPINFOHEADER lpbi; //指向位图信息头结构 + HANDLE hFile, //定义文件 + hDib, //分配内存句柄 + hPal, //调色板句柄 + hOldPal = NULL; + + //计算位图文件每个像素所占字节数 + hBitmap = (HBITMAP)_bitmap; + hDC = CreateDC(_T("DISPLAY"),NULL,NULL,NULL); + iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); + DeleteDC(hDC); + + if (iBits <= 1) + wBitCount = 1; + else if (iBits <= 4) + wBitCount = 4; + else if (iBits <= 8) + wBitCount = 8; + else if (iBits <= 24) + wBitCount = 24; + else if (iBits <= 32) + wBitCount = 32; + + //计算调色板大小 + if (wBitCount <= 8) + dwPaletteSize = (1 << wBitCount) * sizeof (RGBQUAD); + + //设置位图信息头结构 + GetObject(hBitmap, sizeof (BITMAP), (LPSTR)&Bitmap); + bi.biSize = sizeof (BITMAPINFOHEADER); + bi.biWidth = Bitmap.bmWidth; + bi.biHeight = Bitmap.bmHeight; + bi.biPlanes = 1; + bi.biBitCount = wBitCount; + bi.biCompression = BI_RGB; + bi.biSizeImage = 0; + bi.biXPelsPerMeter = 0; + bi.biYPelsPerMeter = 0; + bi.biClrUsed = 0; + bi.biClrImportant = 0; + + dwBmBitsSize = ((Bitmap.bmWidth * wBitCount+31) / 32) * 4 * Bitmap.bmHeight; + + //为位图内容分配内存 + hDib = GlobalAlloc(GHND, dwBmBitsSize + dwPaletteSize + sizeof (BITMAPINFOHEADER)); + lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); + *lpbi = bi; + + // 处理调色板 + hPal = GetStockObject(DEFAULT_PALETTE); + if (hPal) + { + hDC = ::GetDC(NULL); + hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE); + RealizePalette(hDC); + } + + // 获取该调色板下新的像素值 + GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof (BITMAPINFOHEADER) + dwPaletteSize, (LPBITMAPINFO)lpbi, DIB_RGB_COLORS); + + //恢复调色板 + if (hOldPal) + { + SelectPalette(hDC, (HPALETTE)hOldPal, TRUE); + RealizePalette(hDC); + ::ReleaseDC(NULL, hDC); + } + + //创建位图文件 + hFile = CreateFile(_lpFileName, GENERIC_WRITE, + 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + return FALSE; + + // 设置位图文件头 + bmhFiledr.bfType = 0x4D42; // "BM" + dwDIBSize = sizeof (BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize; + bmhFiledr.bfSize = dwDIBSize; + bmhFiledr.bfReserved1 = 0; + bmhFiledr.bfReserved2 = 0; + bmhFiledr.bfOffBits = (DWORD)sizeof (BITMAPFILEHEADER) + (DWORD)sizeof (BITMAPINFOHEADER) + dwPaletteSize; + + // 写入位图文件头 + WriteFile(hFile, (LPSTR)&bmhFiledr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL); + + // 写入位图文件其余内容 + WriteFile(hFile, (LPSTR)lpbi, dwDIBSize,&dwWritten, NULL); + + //清除 + GlobalUnlock(hDib); + GlobalFree(hDib); + CloseHandle(hFile); + + return TRUE; +}; +//================================================================ +void CVideocard_TC4000::OnPaint() +{ + CDC* dc= this->GetDC(); + int nMode; + CDC* pMemDC = new CDC; + CBitmap pBitBmp; + ConvertVideoSubType(m_ImageBuffer,g_DataBuffer,m_ConvertColorType,m_bMirror); + BYTE *pData = (BYTE *)m_ImageBuffer.ScanLine; + BITMAPINFO bmpInfo; + bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmpInfo.bmiHeader.biWidth = 640; + bmpInfo.bmiHeader.biHeight = 480; + bmpInfo.bmiHeader.biPlanes = 1; + bmpInfo.bmiHeader.biBitCount = 24;//X位色 + bmpInfo.bmiHeader.biCompression = BI_RGB; + bmpInfo.bmiHeader.biSizeImage = 0; + bmpInfo.bmiHeader.biXPelsPerMeter = 30000; + bmpInfo.bmiHeader.biYPelsPerMeter = 30000; + bmpInfo.bmiHeader.biClrUsed = 0; + bmpInfo.bmiHeader.biClrImportant = 0; + + pBitBmp.CreateCompatibleBitmap(dc,640,480); + SetDIBits(dc->m_hDC,pBitBmp,0,480,pData,&bmpInfo,DIB_RGB_COLORS); + if (m_bSaveFile) + { + SaveBitmapToFile(pBitBmp,m_SaveFile); + //CImage imgTemp; + //imgTemp.Attach(pBitBmp.operator HBITMAP()); + //imgTemp.Save(m_SaveFile); + m_bSaveFile=FALSE; + } + + if (!pMemDC->m_hDC) + { + pMemDC->CreateCompatibleDC(dc); + } + CBitmap* pOldBitmap = pMemDC->SelectObject(&pBitBmp); + nMode = pMemDC->SetBkMode(TRANSPARENT); + + dc->BitBlt(0, 0, 640, 480, pMemDC,0,0, SRCCOPY); + + pMemDC->SetBkMode(nMode); + pMemDC->SelectObject(pOldBitmap); + ReleaseDC(pMemDC); + delete pMemDC; + ReleaseDC(dc); +} +//================================================================================================ +void CVideocard_TC4000::OnTimer(UINT_PTR nIDEvent) +{ + switch(nIDEvent) + { + case 1: + { + OnPaint(); + break; + } + } + + CDialog::OnTimer(nIDEvent); +} +//========================================== +void CALLBACK TC4000VCAPrcVidCapCallBack(DWORD dwCard, BYTE *pbuff,DWORD dwSize) +{ + UNREFERENCED_PARAMETER(dwSize); + UNREFERENCED_PARAMETER(dwCard); + + memcpy(g_DataBuffer,pbuff,640*480*2); + /* + switch(dwCard) + { + case 0: + memcpy(g_DataBuffer,pbuff,640*480*2); + break; + case 1: + memcpy(g_DataBuffer,pbuff,640*480*2); + break; + case 2: + memcpy(g_DataBuffer,pbuff,640*480*2); + break; + case 3: + memcpy(g_DataBuffer,pbuff,640*480*2); + break; + default:break; + } + */ +}; + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.h new file mode 100644 index 0000000..a5de890 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Videocard_TC4000.h @@ -0,0 +1,54 @@ +#pragma once + +//========================================== +void CALLBACK TC4000VCAPrcVidCapCallBack(DWORD dwCard, BYTE *pbuff,DWORD dwSize); + + +// CVideocard_TC4000 dialog + +class CVideocard_TC4000 : public CDialog +{ + DECLARE_DYNAMIC(CVideocard_TC4000) + +public: + CVideocard_TC4000(CWnd* pParent = NULL); // standard constructor + virtual ~CVideocard_TC4000(); + +// Dialog Data + enum { IDD = IDD_SO7_VIDEOCARD_TC4000 }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); + afx_msg void OnPaint(); + afx_msg void OnTimer(UINT_PTR nIDEvent); + DECLARE_MESSAGE_MAP() +public: + BOOL LoadVideocard(); + BOOL UnloadVideocard(); + void ConvertVideoSubType(const Image_Buffer& _ImageBuffer, BYTE *pSrcData,ConvertColorType _type,BOOL _bMirror); + BOOL SaveBitmapToFile(const CBitmap& bitmap, CString lpFileName); + +protected: + int m_nDevNum; + DWORD m_dwCard; + RECT m_rcShowWin; + Image_Buffer m_ImageBuffer; + ConvertColorType m_ConvertColorType; + BOOL m_Status; + BOOL m_bMirror; + BOOL m_bSaveFile; + CString m_SaveFile; +public: + HANDLE m_hCapThread; + afx_msg void OnBnClickedOk(); + afx_msg void OnBnClickedCancel(); + afx_msg void OnBnClickedRadioRgb(); + afx_msg void OnBnClickedRadioGray(); + afx_msg void OnBnClickedCheckMirrorVertically(); + afx_msg void OnBnClickedButtonSavePicture(); + afx_msg void OnBnClickedRadioTc4000Channel1(); + afx_msg void OnBnClickedRadioTc4000Channel2(); + afx_msg void OnBnClickedRadioTc4000Channel3(); + afx_msg void OnBnClickedRadioTc4000Channel4(); +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 4ef4275..5a577a1 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -40,6 +40,8 @@ #define IDD_DIALOG1 163 #define IDD_SO7_VIDEOCARD_SV2000E 163 #define IDD_SO7_UTIL_SETUP_CONFIGURE 164 +#define IDD_SO7_UTIL_IMAGE_DLL 165 +#define IDD_SO7_VIDEOCARD_TC4000 166 #define IDC_BUTTON_INIT_MVUSB 1001 #define IDC_BUTTON_START_MACHINE 1002 #define IDC_BUTTON_START_POLL_58 1004 @@ -603,6 +605,7 @@ #define IDC_BTN_CONFIGURE_CALIBRATEV 1518 #define IDC_BUTTON_SETUP_SO7CONFIG 1518 #define IDC_BUTTON_SCAN_KEYENCE_LK_GLASER 1518 +#define IDC_BUTTON_IMAGEDLL_START_SCAN_LASER 1518 #define IDC_STATIC_CANVAS 1519 #define IDC_BUTTON_SCAN_KEYENCE_LK_HLASER 1519 #define IDC_BUTTON_STATUS_OVERHEAT_X 1520 @@ -616,6 +619,7 @@ #define IDC_BUTTON_STOP_SAMPLE_SCURVE 1524 #define IDC_BTN_CONFIGURE_MOVEVOUT 1524 #define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_GLASER 1524 +#define IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA 1524 #define IDC_CUSTOM1 1525 #define IDC_CUSTOM_CANVAS 1525 #define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_HLASER 1525 @@ -648,18 +652,27 @@ #define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER 1555 #define IDC_EDIT_TEST_KEYENCE_MESSAGE 1556 #define IDC_RADIO_MACHINE_KEYENCE_TM3000 1557 -#define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER2 1557 #define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_HLASER 1557 #define IDC_RADIO_KEYENCE_LASER_LK_G 1558 #define IDC_RADIO_KEYENCE_LASER_LK_H 1559 +#define IDC_RADIO_TEST_IMAGE_DLL 1560 +#define IDC_BUTTON3 1562 +#define IDC_BUTTON_IMAGEDLL_PAUSE_AND_GET_SCAN_LASER_DATA 1562 +#define IDC_BUTTON_IMAGEDLL_STOP_SCAN_LASER 1563 +#define IDC_STATIC_TC4000_PICTURE 1564 +#define IDC_RADIO_SO7_IP_CAMERA 1565 +#define IDC_RADIO_TC4000_CHANNEL1 1566 +#define IDC_RADIO_TC4000_CHANNEL2 1567 +#define IDC_RADIO_TC4000_CHANNEL3 1568 +#define IDC_RADIO_TC4000_CHANNEL4 1569 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 165 +#define _APS_NEXT_RESOURCE_VALUE 166 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1560 +#define _APS_NEXT_CONTROL_VALUE 1570 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 719467e9ecc90a2667034ae9a73cf8d1db8183cf..4a6d31cdc94b851c2175320e5faa77b9facb78d2 100644 GIT binary patch delta 12986 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 delta 17269 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 100 时,为静音;开始音频捕获时有效 +BOOL WINAPI VCASetAudioCardOutOn( DWORD dwCard ); +//停止音频捕获,如果音频捕获方式为MPEG4,视频捕获MPEG4方式开始时,调用有效 +BOOL WINAPI VCAStopAudioCapture( DWORD dwCard ); +//允许音频Mpeg处理回调 +BOOL WINAPI VCAEnableAudMpegProcess( DWORD dwCard, BOOL bEnPorcess, PrcAudMpegPorCallBack ppCall ); +///////////////////////////////////////////////////////////////////////////////////////////////// +//VC404P IO处理函数 +///////////////////////////////////////////////////////////////////////////////////////////////// +//注册IO报警回调 +BOOL WINAPI VCARegIoAlertCallBack( DWORD dwCard, PrcIoAlertCallBack ppCall ); +//设置IO输入报警当前电平 +BOOL WINAPI VCASetIOAlertLevelIn( DWORD dwCard, eVOLTAGELEVEL enCurrentLevel ); +//开始IO输入报警,enSpringLevel为触发电平 +BOOL WINAPI VCAStartIOAlertIn( DWORD dwCard, eVOLTAGELEVEL enSpringLevel ); +//停止IO输入报警 +BOOL WINAPI VCAStopIOAlertIn( DWORD dwCard ); +//IO输出报警 +BOOL WINAPI VCAIOAlertOut( DWORD dwCard, eVOLTAGELEVEL enLevel ); +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.lib b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.lib new file mode 100644 index 0000000000000000000000000000000000000000..bfd0d6cd46a71cb718554312de04cd853ccb2698 GIT binary patch literal 17542 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