// CT-3001 Library Header File // for Windows NT/2000 Only // 2001/7/13 IN // 2001/11/26 ver.1.1 add CT3001_GetStat() // 2002/3/20 ver.1.2 add CT3001_GetSingleFrame(),CT3001_StartCapture(),CT3001_StopCapture() #ifndef __CT3001_H__ #define __CT3001_H__ // 汎用 #define CERR_SUCCESS 0 #define CERR_FAILURE 1 #define CERR_BAD_PARAM 2 #define CERR_FILE_OPEN 3 #define CERR_FILE_READ 4 #define CERR_FILE_WRITE 5 #define CERR_MEM_ALLOC 6 #define CERR_FILE_FORMAT 7 #define CERR_FILE_EOF 8 enum {CT_XOR = 0,CT_OR,CT_SET,CT_FILL}; // CTDEV.SYS (for Windows NT4.0/2000) #define METHOD_BUFFERED 0 #define FILE_READ_ACCESS (0x0001) // file & pipe #define CTL_CODE(DeviceType,Function,Method,Access) \ (DWORD)(((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method)) #define CTDEV_DEVICE_TYPE 40000 #define CT_GETVERSION \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA00, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_ALLOCPHYSMEM \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA01, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_FREEPHYSMEM \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA02, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_OUTDW \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA03, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_INDW \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA04, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_GETERSION_1 \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA05, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_GETDEVICEINFO \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA06, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_GETPCICONF \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA07, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_OUTW \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA13, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_INW \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA14, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_OUTB \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA23, METHOD_BUFFERED,FILE_READ_ACCESS) #define CT_INB \ CTL_CODE(CTDEV_DEVICE_TYPE, 0xA24, METHOD_BUFFERED,FILE_READ_ACCESS) #define PRIVATE 0x80000400 /* anywhere in private arena (ver.1.0のみ使用)*/ #define SHARED 0x80060000 /* anywhere in shared arena (ver.1.0のみ使用)*/ // フレーム メモリ #define NFRAME_WIDTH 1024 #define NFRAME_WIDTH_VIEW 640 #define NFRAME_HEIGHT 512 #define NFRAME_HEIGHT_VIEW 486 #define NFRAME_PXLBYTES 4 #define NFRAME_PITCH 4096 #define CR0_START 0x01 #define CR0_EVEN 0x02 #define CR0_ODD 0x04 #define CR0_NATIV 0x08 #define CR0_FRAME 0x10 #define CR0_POSCOR 0x40 #define CR0_CONT_TRIG 0x80 #define CR0_UNDER_WRITE 0x01 #define CR0_FRAME_INDEX 0x80 #define CR0_READ_MASK 0x7e #define CR1_INH_RED 0x01 #define CR1_INH_GREEN 0x02 #define CR1_INH_BLUE 0x04 #define CR1_FSHUT 0x10 #define CR1_COL_HUE 0x10 #define CR1_PIC_BRT 0x20 #define CR1_IO_MEM 0x40 #define CR1_CIE 0x80 #define CR1_READ_MASK 0x77 #define CR0W_INH_RED 0x0100 #define CR0W_INH_GREEN 0x0200 #define CR0W_INH_BLUE 0x0400 #define CR0W_FSHUT 0x1000 #define CR0W_COL_HUE 0x1000 #define CR0W_PIC_BRT 0x2000 #define CR0W_IO_MEM 0x4000 #define CR0W_CIE 0x8000 #define CR0_READ_WMASK 0x777e #define CR0W_READ_MASK 0x777e HANDLE CT3001_Handle; int CT3001_Iobase; int *CT3001_Vram; int CT3001_Param[4]; int CT3001_Init(void) { int n,r; // Getting Handle CT3001_Handle=CreateFile("\\\\.\\CTDEV",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL); if(CT3001_Handle==INVALID_HANDLE_VALUE){ MessageBox(HWND_DESKTOP,"CTDEV failed to open!","Error CT-3001",MB_OK); return 1; } // Getting Vram Address CT3001_Param[1] = -1; CT3001_Param[2] = 0x3001; // Device ID CT3001_Param[3] = 0; // Board ID (No.1) r=DeviceIoControl(CT3001_Handle,CT_ALLOCPHYSMEM,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); if(CT3001_Param[0]==-1 || r==0){ MessageBox(HWND_DESKTOP,"CT_ALLOCPHYSMEM failed!","Error CT-3001",MB_OK); return 1; } CT3001_Vram=(int *)CT3001_Param[0]; // Getting IO-base Address CT3001_Param[1] = 0x3001; // Device ID CT3001_Param[2] = 0; // Board ID(No.1) CT3001_Param[3] = 1; // Type DeviceIoControl(CT3001_Handle,CT_GETDEVICEINFO,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); CT3001_Iobase=CT3001_Param[0]; return 0; } void CT3001_Term(void) { int n; // Free memory CT3001_Param[1]=(int)CT3001_Vram; DeviceIoControl(CT3001_Handle,CT_FREEPHYSMEM,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); // Close Driver CloseHandle(CT3001_Handle); } void CT3001_GetSingleFrame(void) { int n; CT3001_Param[1] = CT3001_Iobase + 0; CT3001_Param[2] = 0x01; DeviceIoControl(CT3001_Handle,CT_OUTB,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); } void CT3001_StartCapture(void) { int n; CT3001_Param[1] = CT3001_Iobase + 0; CT3001_Param[2] = 0x81; DeviceIoControl(CT3001_Handle,CT_OUTB,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); } void CT3001_StopCapture(void) { int n; CT3001_Param[1] = CT3001_Iobase + 0; CT3001_Param[2] = 0x80; DeviceIoControl(CT3001_Handle,CT_OUTB,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); } // bit0 --- UnderWriting // bit7 --- Odd/Even int CT3001_GetStat(void) { int n; CT3001_Param[1] = CT3001_Iobase + 0; DeviceIoControl(CT3001_Handle,CT_INB,(LPVOID)CT3001_Param,4*4,(LPVOID)CT3001_Param,4,&n,NULL); return CT3001_Param[0]; } #endif