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 719467e..4a6d31c 100644 Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SDK3000/sdk3000_7130.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SDK3000/sdk3000_7130.h index a4c4f01..67ed827 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SDK3000/sdk3000_7130.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SDK3000/sdk3000_7130.h @@ -4,6 +4,7 @@ #if !defined(AFX_SDK3000_7130_H__37FDA63D_0A84_4797_9E52_320E37C41382__INCLUDED_) #define AFX_SDK3000_7130_H__37FDA63D_0A84_4797_9E52_320E37C41382__INCLUDED_ +#include"..\VideocardCommonDefine.h" static const ULONG BrightnessDefault = 0x80; static const ULONG ContrastDefault = 0x44; @@ -11,20 +12,7 @@ static const ULONG SaturationDefault = 0x40; static const ULONG HueDefault = 0x00; static const ULONG SharpnessDefault = 0x00; -#define MIN_VAMP_BRIGHTNESS_UNITS 0 -#define MAX_VAMP_BRIGHTNESS_UNITS 255 -#define MIN_VAMP_CONTRAST_UNITS -128 -#define MAX_VAMP_CONTRAST_UNITS 127 - -#define MIN_VAMP_HUE_UNITS -128 -#define MAX_VAMP_HUE_UNITS 127 - -#define MIN_VAMP_SATURATION_UNITS -128 -#define MAX_VAMP_SATURATION_UNITS 127 - -#define MIN_VAMP_SHARPNESS_UNITS -8 -#define MAX_VAMP_SHARPNESS_UNITS 7 //图像格式 typedef enum @@ -104,29 +92,7 @@ typedef enum VideoSubType_RGB32 } VideoSubType; -//视频制式 -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; + //场类型 typedef enum @@ -137,20 +103,6 @@ typedef enum Interlaced_Field//复合场 }VideoFieldType; -//视频叠加参数 -typedef struct -{ - LONG cfHeight; //字符高度 - LONG cfWidth; //字符宽度 - LONG cfWeight; //字符粗细 - LONG cfSpacing; //字符间距 - BOOL cfItalic; //斜体 - BOOL cfUnderline; //下划线 - BOOL cfStrikeOut; //删除线 - COLORREF cfBkColor; //背景色 - COLORREF cfTextColor; //前景色 - TCHAR cfFaceName[32]; //字体名 -}OSDPARAM; //视频属性范围 typedef struct @@ -175,21 +127,12 @@ typedef struct BITMAPINFOHEADER bmiHeader; //宽、高、颜色位率等 } VIDEOSTREAMINFO; -//视频源输入频率 -typedef enum -{ //@enum Field frequency - FIELD_FREQ_50HZ = 0, //@emem source is 50 Hz (PAL) - FIELD_FREQ_60HZ = 1, //@emem source is 60 Hz (NTSC) - FIELD_FREQ_0HZ = 2 //@emem source is 0 Hz (NO SIGNL) -}eFieldFrequency; - - //动态检测回调 typedef void (CALLBACK *PrcCbMotionDetect)( long lnCardID, BOOL bMove, LPVOID lpContext ); //捕获原始流回调 typedef void (CALLBACK *PrcCapSourceStream)( long lnCardID, long pBuf, long lnWidth, long lnHeight, long lnBiCount ); //IO报警回调 -typedef void (CALLBACK *PrcIoAlertCallBack)( long lnCardID ); +typedef void (CALLBACK *PrcIoAlertCallBack_TC4000)( long lnCardID ); typedef void (CALLBACK *PrcPicMessage)( long lnCardID, long pBuf, long lnWidth, long lnHeight); //初始化SDK HRESULT WINAPI VCAInitSdk(); @@ -224,7 +167,7 @@ HRESULT WINAPI VCAGetVideoPropertyValue(int nCards, VideoProperty eVideoProperty //IO输出 HRESULT WINAPI VCAIOAlertOut(int nCards, BOOL bHighLevel); //初始化IO输入 -HRESULT WINAPI VCAInitIOAlertIn(int nCards, PrcIoAlertCallBack ppCall); +HRESULT WINAPI VCAInitIOAlertIn(int nCards, PrcIoAlertCallBack_TC4000 ppCall); //开始等待IO输入 HRESULT WINAPI VCAStartIOAlertIn(int nCards, BOOL bHigh); //停止等待IO输入 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV2000E/datastru.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV2000E/datastru.h index 371a50f..651b202 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV2000E/datastru.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/SV2000E/datastru.h @@ -8,6 +8,9 @@ #ifndef __LIBDXCAP_DATASTRU__20110805__ #define __LIBDXCAP_DATASTRU__20110805__ + +#include"..\VideocardCommonDefine.h" + typedef void* device_handle; typedef void* image_handle; @@ -33,13 +36,6 @@ typedef void* image_handle; #define MAX_SHARPNESS 7 -typedef enum { //@enum Decoder control types - BRIGHTNESS = 0, //@emem control for brightness - CONTRAST = 1, //@emem control for contrast - SATURATION = 2, //@emem control for saturation - HUE = 3, //@emem control for hue - SHARPNESS = 4 //@emem control for sharpness -}COLORCONTROL; //视频制式 //typedef enum //{ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.h new file mode 100644 index 0000000..44670ff --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.h @@ -0,0 +1,273 @@ +#ifndef VC404_CAPTURE_SAA7134 +#define VC404_CAPTURE_SAA7134 + +#ifdef SAA7134CAPTURE_EXPORTS +#define SAA7134CAPTURE_API __declspec(dllexport) +#else +#define SAA7134CAPTURE_API __declspec(dllimport) +#endif + +#include"..\VideocardCommonDefine.h" + + +/////////////////////////////////////////////////////////// +//注意:VC枚举类型为32位,4字节;这里的枚举类型为4字节。 +// C++ builder枚举类型为8位,1字节,要重定义,例如: +//typedef int COLORCONTROL; +//COLORCONTROL BRIGHTNESS = 0; +//COLORCONTROL CONTRAST = 1; +//COLORCONTROL SATURATION = 2; +//COLORCONTROL HUE = 3; +//COLORCONTROL SHARPNESS = 4; + +//描述:在VC中enum、ULONG、LONG、BOOL、DWORD 都为32位,4字节, +//这里使用的是VC定义标准。 +///////////////////////////////////////////////////////////// + + +typedef enum { //@enum Decoder control types + XVID_CBR_MODE = 0, + XVID_VBR_MODE = 1//, +}COMPRESSMODE; + +typedef enum{ + COLOR_DECODER = 0, //解码器(包括视频预览和视频捕获) + COLOR_PREVIEW = 1, //视频预览 + COLOR_CAPTURE = 2 //视频捕获 +}COLORDEVICETYPE; + + +typedef enum{ + VID_CAPTURE_EVENT = 0, + AUD_CAPTURE_EVENT1 = 1, + AUD_CAPTURE_EVENT2 = 2, + IO_ALERT_EVENT = 3, + MOTION_DETECT = 4, + VID_PREVIEW_EVENT = 5 +}EVENTTYPE; + + +typedef enum +{ + RGB32 = 0x0, + RGB24 = 0x1, + RGB16 = 0x2, + RGB15 = 0x3, + YUY2 = 0x4, + BTYUV = 0x5, + Y8 = 0x6, + RGB8 = 0x7, + PL422 = 0x8, + PL411 = 0x9, + YUV12 = 0xA, + YUV9 = 0xB, + RAW = 0xE +}COLORFORMAT; + +typedef enum +{ + CAP_NULL_STREAM = 0, //捕获无效 + CAP_ORIGIN_STREAM = 1, /*原始流回调*/ + CAP_MPEG4_STREAM = 2, /*Mpeg4流*/ + CAP_MPEG4_XVID_STREAM = 3, + CAP_ORIGIN_MPEG4_STREAM = 4, + CAP_ORIGIN_XVID_STREAM = 5, + CAP_WMV9_STREAM = 6, + CAP_ORIGIN_WMV9_STREAM = 7 + +}CAPMODEL; + + +typedef enum +{ + MPEG4_AVIFILE_ONLY = 0, //存为MPEG文件 + MPEG4_CALLBACK_ONLY = 1, //MPEG数据回调 + MPEG4_AVIFILE_CALLBACK = 2 //存为MPEG文件并回调 +}MP4MODEL; + + + +typedef enum { //电平等级 + HIGH_VOLTAGE = 0, //高电平 + LOW_VOLTAGE = 1 //低电平 +}eVOLTAGELEVEL; + +typedef enum { + NOT_DISPLAY = 0, + PCI_VIEDOMEMORY = 1, + PCI_MEMORY_VIDEOMEMORY = 2 +}DISPLAYTRANSTYPE; + + + +//error define area + +#define ERR_SUCCESS 0 //no error,success +#define ERR_NODEVICEFOUND 1 //no device found in system +#define ERR_UNSUPPORTFUNC 2 //unsupport func tempro? +#define ERR_ALLOCRESOURCE 3 //alloc resource error +#define ERR_INITDIRECTDRAW 4 //Init Directdraw error +#define ERR_INITDIRECTSOUND 5 //Init Directdraw error +#define ERR_NOT_10MOONSDEV 6 //it is not device of 10Moons + +///////////////////////////////////////////////////////////////////////////////////////////////// +//VC4000/VC8000/VC404P公有函数 +///////////////////////////////////////////////////////////////////////////////////////////////// + +//动态检测回调, +//如果VCAEnableMotionDetect 参数nPersistTime = -1;则回调运动检测地图。取消(开始、停止)回调。bMove将无效。 +//如果VCAEnableMotionDetect 参数nPersistTime != -1;则回调开始、停止运动检测;取消回调运动检测地图。pbuff、dwSize将无效。 +typedef void (CALLBACK *PrcCbMotionDetect_TC4000)( DWORD dwCard, BOOL bMove, BYTE *pbuff, DWORD dwSize, LPVOID lpContext ); +//视频捕获原始数据回调 +typedef void (CALLBACK *PrcVidCapCallBack)( DWORD dwCard, BYTE *pbuff, DWORD dwSize ); +//视频MPEG压缩数据回调 +typedef void (CALLBACK *PrcVidMpegCallBack)( DWORD dwCard, BYTE *pbuff, DWORD dwSize, BOOL isKeyFrm ); +//音频捕获原始数据回调 +//音频包原始大小16 Bit PCM格式,8080 BYTE,2声道,32000Hz +typedef void (CALLBACK *PrcAudCapCallBack)( DWORD dwCard, BYTE *pbuff,DWORD dwSize ); +//音频MPEG压缩数据回调 +typedef void (CALLBACK *PrcAudMpegCallBack)( DWORD dwCard, BYTE *pbuff,DWORD dwSize ); +//IO报警回调 +typedef void (CALLBACK *PrcIoAlertCallBack)( DWORD dwCard ); +//视频Mpeg处理回调 ,pPorcess 返回为TRUE 表示当前帧压缩;返回为FALSE 表示丢掉当前帧 +typedef void (CALLBACK *PrcVidMpegPorCallBack)( DWORD dwCard, BOOL* pPorcess ); +//音频Mpeg处理回调,pPorcess 返回为TRUE 表示当音频包压缩;返回为FALSE 表示丢掉当前音频包。 +typedef void (CALLBACK *PrcAudMpegPorCallBack)( DWORD dwCard, BOOL* pPorcess ); +//注册视频捕获原始数据回调 +BOOL WINAPI VCARegVidCapCallBack( DWORD dwCard, PrcVidCapCallBack ppCall ); +//注册视频MPEG压缩数据回调 +BOOL WINAPI VCARegVidMpegCallBack( DWORD dwCard, PrcVidMpegCallBack ppCall ); +//设置错误序号 +void WINAPI VCASetLastError( DWORD dwError ); +//得到错误序号 +DWORD WINAPI VCAGetLastError(); +//初始化SDK,hWndMain:overlay窗口句柄,overlay窗口就是包含多路显示小窗口的大窗口。overlay窗口必须有一个,多路显示小窗口必须包含再其内部。 +//bInitVidDev:是否初始化视频设备用于预览,当视频不显示,只需视频录像或音频处理时可以设置为FALSE. +//bInitAudDev:是否初始化音频设备用于声音播放,当不音频不需要播放,只需音频录像或视频处理时、或没有安装声卡,可以设置为FALSE. +BOOL WINAPI VCAInitSdk( HWND hWndMain, DISPLAYTRANSTYPE eDispTransType = PCI_VIEDOMEMORY, BOOL bInitAudDev = FALSE ); +//释放SDK资源 +void WINAPI VCAUnInitSdk(); +//得到设备总数 +LONG WINAPI VCAGetDevNum(); +//打开设备,hPreviewWnd为视频预览窗口的句柄,该窗口背景色用户必需设置为RGB(255,0,255) +BOOL WINAPI VCAOpenDevice( DWORD dwCard,HWND hPreviewWnd ); +//关闭设备 +BOOL WINAPI VCACloseDevice( DWORD dwCard ); +//开始视频预览 +BOOL WINAPI VCAStartVideoPreview( DWORD dwCard ); +//停止视频预览 +BOOL WINAPI VCAStopVideoPreview( DWORD dwCard ); +//更新视频预览,比如改变了显示窗口时,调用。 +BOOL WINAPI VCAUpdateVideoPreview( DWORD dwCard, HWND hPreviewWnd ); +//更新overlay窗口,当overlay窗口句柄改变或尺寸,位置改变时调用,overlay窗口就是包含多路显示小窗口的大窗口。overlay窗口必须有一个,多路显示小窗口必须包含再其内部。 +BOOL WINAPI VCAUpdateOverlayWnd(HWND hOverlayWnd); + +//保存快照数据到相应的缓冲区 +BOOL WINAPI VCASaveBitsToBuf( DWORD dwCard, PVOID pDestBuf, DWORD& dwWidth, DWORD& dwHeight ); +//保存快照为JPEG文件 +BOOL WINAPI VCASaveAsJpegFile( DWORD dwCard, LPCTSTR lpFileName, DWORD dwQuality = 100 ); +//保存快照为BMP文件 +BOOL WINAPI VCASaveAsBmpFile( DWORD dwCard, LPCTSTR lpFileName ); +//开始视频捕获 +BOOL WINAPI VCAStartVideoCapture(unsigned long ,CAPMODEL,MP4MODEL,char const *); + //( DWORD dwCard,CAPMODEL enCapMode,MP4MODEL enMp4Mode,LPCTSTR lpFileName ); +//停止视频捕获 +BOOL WINAPI VCAStopVideoCapture( DWORD dwCard ); +//设置视频捕获尺寸, dwWidth和dwHeight最好为16的倍数,否则,动态检测为16*16一个检测小块,检测将会不准确。 +BOOL WINAPI VCASetVidCapSize( DWORD dwCard, DWORD dwWidth, DWORD dwHeight ); +//得到视频捕获尺寸 +BOOL WINAPI VCAGetVidCapSize( DWORD dwCard, DWORD &dwWidth, DWORD &dwHeight ); + +/*设置视频捕获帧率,bFrameRateReduction参数为保留参数。 + PAL显示帧率显示帧率始终为25,NTSC显示帧率始终为30 + PAL捕获帧率最大为25,NTSC捕获帧率最大为30 +*/ +BOOL WINAPI VCASetVidCapFrameRate( DWORD dwCard, DWORD dwFrameRate, BOOL bFrameRateReduction = FALSE ); + +//设置MPEG压缩的位率,范围:56bps ~ 10Mbps; 单位Kbps +BOOL WINAPI VCASetBitRate( DWORD dwCard, DWORD dwBitRate); +//设置MPEG压缩的关键帧间隔,必须大于等于帧率 +BOOL WINAPI VCASetKeyFrmInterval( DWORD dwCard, DWORD dwKeyFrmInterval); +//设置MPEG4_XVID压缩的质量 dwQuantizer: 1 ~ 31 (1为最小量度,压缩质量最好); dwMotionPrecision: 0 ~ 6 (0最小运动精度) +BOOL WINAPI VCASetXVIDQuality( DWORD dwCard, DWORD dwQuantizer, DWORD dwMotionPrecision); +//设置MPEG4_XVID压缩模式 +BOOL WINAPI VCASetXVIDCompressMode( DWORD dwCard, COMPRESSMODE enCompessMode ); + +//设置动态检测,视频捕获停止时调用有效,VCASetVidCapSize 的设置参数 dwWidth和dwHeight最好为16的倍数,否则,动态检测因16*16一个检测小块,检测将会不准确。 +BOOL WINAPI VCAEnableMotionDetect( DWORD dwCard, + BOOL bEnaDetect, //是否允许动态检测 + BYTE *pAreaMap, //运动检测地图 + LONG nSizeOfMap, //pAreaMap尺寸,以BYTE为单位 + LONG nPersistTime, //物体持续nPersistTime秒不动则认为停止 1-30s ,如果nPersistTime = -1;则回调运动检测地图。取消(开始、停止)回调。 + INT nFrameRateReduce, // zdp add 降低采样比较倍数 + LPVOID lpContext, //监测上下文 + PrcCbMotionDetect_TC4000 OnObjectMove ); //运动/停止回调函数 + +//设置视频色彩 +BOOL WINAPI VCASetVidDeviceColor( DWORD dwCard, COLORCONTROL enCtlType, DWORD dwValue ); + +//得到视频源输入频率( 0HZ / 50HZ / 60HZ )对应( 无信号 / PAL制 / NTSC制 ), 参考枚举变量eFieldFrequency +BOOL WINAPI VCAGetVidFieldFrq( DWORD dwCard, eFieldFrequency &eVidSourceFieldRate ); +//设置视频源输入频率( 0HZ / 50HZ / 60HZ )对应( 无信号 / PAL制 / NTSC制 ), 参考枚举变量eFieldFrequency +BOOL WINAPI VCASetVidFieldFrq( DWORD dwCard, eFieldFrequency eVidSourceFieldRate ); + +//暂停捕获,暂停视频捕获和音频捕获,可用于快速改变音视频捕获类型和文件切换,设置视频捕获字幕叠加 +BOOL WINAPI VCAPauseCapture( DWORD dwCard ); +//设置视频捕获文本叠加 +BOOL WINAPI VCASetVidCapTextOSD( DWORD dwCard, BOOL bEnableOSD, TCHAR* tcText, POINT& ptTopLeft, OSDPARAM* pOSDParm ); +//设置视频捕获时间、日期叠加,在VCASetVidCapDateTimeOSDPARAM()函数设置后调用有效 +BOOL WINAPI VCASetVidCapDateTimeOSD( DWORD dwCard, BOOL bEnableOSD, POINT& ptTopLeft); +//设置视频捕获字幕叠加 +BOOL WINAPI VCASetVidCapDateTimeOSDParam( OSDPARAM* pOSDParm ); +//允许视频Mpeg处理回调 +BOOL WINAPI VCAEnableVidMpegProcess( DWORD dwCard, BOOL bEnPorcess, PrcVidMpegPorCallBack ppCall ); +//得到设备芯片ID +BOOL WINAPI VCAGetDeviceID( DWORD dwCard, DWORD& dwDeviceID ); +//初始化视频设备,当视频不显示,只需视频录像或音频处理时、或通过VCAInitSdk()函数已经初始化完成可以不初始化。 +BOOL WINAPI VCAInitVidDev( DISPLAYTRANSTYPE eDispTransType = PCI_VIEDOMEMORY); +//读E2C +BOOL WINAPI VCAIsE2C( DWORD dwCard, BOOL& bIsE2C ); +//读E2C +BOOL WINAPI VCAGetE2C( DWORD dwCard, int iSubAddr, BYTE& ucData ); +//写E2C +BOOL WINAPI VCASetE2C( DWORD dwCard, int iSubAddr, BYTE ucData ); +//检验客户信息 pKey:长度为16 字节,用户加密Key值;bSuccess:表示验证是否通过 。 +BOOL WINAPI VCACheckValidate( BYTE* pKey, BOOL& bSuccess ); + +BOOL WINAPI VCAGetFileLength(DWORD dwCard, DWORD & FileLength); + +///////////////////////////////////////////////////////////////////////////////////////////////// +//VC404P音频处理函数 +///////////////////////////////////////////////////////////////////////////////////////////////// +//初始化音频设备,是否初始化音频设备用于声音播放,当不音频不需要播放,只需音频录像或视频处理时、或没有安装声卡或通过VCAInitSdk()函数已经初始化完成可以不初始化。 +//dwAudFreq:音频播放频率,默认为32K,但有些主板因为某些原因,上传的音频频率可能高于或低于32K,所以根据实际情况,传入这个参数。 +BOOL WINAPI VCAInitAudDev( DWORD dwAudFreq = 32000 ); +//注册音频捕获原始数据回调 +BOOL WINAPI VCARegAudCapCallBack( DWORD dwCard, PrcAudCapCallBack ppCall ); +//注册音频MPEG压缩数据回调 +BOOL WINAPI VCARegAudMpegCallBack( DWORD dwCard, PrcAudMpegCallBack ppCall ); +//开始音频捕获,如果音频捕获方式为MPEG4,视频捕获MPEG4方式开始时,调用有效 +BOOL WINAPI VCAStartAudioCapture( DWORD dwCard, + CAPMODEL enCapMode, + MP4MODEL enMp4Mode ); + +//允许音频从声卡输出,当dwCard >= 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 0000000..bfd0d6c Binary files /dev/null and b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/TC4000/Sa7134Capture.lib differ diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Videocard/VideocardCommonDefine.h b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/VideocardCommonDefine.h new file mode 100644 index 0000000..e563e0d --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Videocard/VideocardCommonDefine.h @@ -0,0 +1,78 @@ +#ifndef VIDEOCARD_COMMON_DEFINE_H +#define VIDEOCARD_COMMON_DEFINE_H + +#define MIN_VAMP_BRIGHTNESS_UNITS 0 +#define MAX_VAMP_BRIGHTNESS_UNITS 255 + +#define MIN_VAMP_CONTRAST_UNITS -128 +#define MAX_VAMP_CONTRAST_UNITS 127 + +#define MIN_VAMP_HUE_UNITS -128 +#define MAX_VAMP_HUE_UNITS 127 + +#define MIN_VAMP_SATURATION_UNITS -128 +#define MAX_VAMP_SATURATION_UNITS 127 + +#define MIN_VAMP_SHARPNESS_UNITS -8 +#define MAX_VAMP_SHARPNESS_UNITS 7 + + +//视频制式 +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; + +typedef enum +{ //@enum Field frequency + FIELD_FREQ_50HZ = 0, //@emem source is 50 Hz (PAL) + FIELD_FREQ_60HZ = 1, //@emem source is 60 Hz (NTSC) + FIELD_FREQ_0HZ = 2, //@emem source is 0 Hz (NO SIGNL) + FIELD_FREQ_50HZ_NULL = 3, + FIELD_FREQ_60HZ_NULL = 4 +}eFieldFrequency; + +typedef enum { //@enum Decoder control types + BRIGHTNESS = 0, //@emem control for brightness + CONTRAST = 1, //@emem control for contrast + SATURATION = 2, //@emem control for saturation + HUE = 3, //@emem control for hue + SHARPNESS = 4 //@emem control for sharpness +}COLORCONTROL; + +typedef struct +{ + + LONG cfHeight; //字符高度 + LONG cfWidth; //字符宽度 + LONG cfWeight; //字符粗细 + LONG cfSpacing; //字符间距 + BOOL cfItalic; //斜体 + BOOL cfUnderline; //下划线 + BOOL cfStrikeOut; //删除线 + BOOL bTransparent; //透明 + COLORREF cfBkColor; //背景色 + COLORREF cfTextColor; //前景色 + TCHAR cfFaceName[32]; //字体名 + +}OSDPARAM; + +#endif \ No newline at end of file