USB3-DIO01 API Programming (Rev 1.2) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned in this document as their own property. Information furnished by DAQ system is believed to be accurate and reliable. However, no responsibility is assumed by DAQ system for its use, nor for any infringements of patents or other rights of third parties which may result from its use. No license is granted by implication or otherwise under any patent or copyrights of DAQ system. The information in this document is subject to change without notice and no part of this document may be copied or reproduced without the prior written consent. Copyrights 2005 DAQ system, All rights reserved. -1- http://www.daqsystem.com
Board Level APIs Overview Int OpenDAQDevice (void) BOOL ResetBoard (int nboard) BOOL CloseDAQDevice (void) Int GetBoardNum (void) OpenDAQDevice 디바이스를 Open 한다. 프로그램에서초기에반드시한번함수를호출하여디바이스를 Open 하여야한다. int OpenDAQDevice (void) 없음. 함수호출에성공한경우, 설치된보드의번호를리턴한다. 함수호출에실패한경우, -1 을리턴한다. 이것의의미는시스템에장치가없다는의미이다. ResetBoard 현재시스템 (PC) 에장착된디바이스를초기화한다. BOOL ResetBoard (int nboard) nboard : 현재시스템에장착되어있는보드번호를알려준다. 보드번호는보드의 DIP 스위치를이용하여설정한다. 함수호출에성공일경우 TRUE 을리턴함. 함수호출에실패한경우, 어떤 API 함수도호출할수없고 CloseDAQDevice() 를부른다. -2- http://www.daqsystem.com
CloseDAQDevice Open된디바이스를 Close한다. 장치의사용이끝나게되면, 반드시장치를 Close하여다른프로그램에서사용할수있도록한다. BOOL CloseDAQDevice (void) 없음. 디바이스 Open에성공할경우 TRUE를실패할경우 FALSE를리턴한다. GetBoardNum 시스템에서설치된보드개수를알려준다. int GetBoardNum (void) 없음. 설치된보드의개수를리턴한다. 보드넘버는장착되어있는 DIP 스위치 (SW1) 의설정값이넘어온다. -3- http://www.daqsystem.com
LVDS API Functions Overview BOOL LVDS_Init (int nboard) BOOL LVDS_Start (int nboard) BOOL LVDS_GetFrame (int nboard, DWORD* ncnt, unsigned char* buf) BOOL LVDS_Close (int nboard) BOOL LVDS_GetResolutuion (int nboard DWORD, *xres, DWORD *yres) BOOL LVDS_Stop (int nboard) BOOL LVDS_SetDataMode (int nboard, int nmode) BOOL LVDS_GetVersion (int nboard, int *nfpgaver, int *nfirmver) BOOL LVDS_BufferFlush (int nboard) BOOL LVDS_HsyncPol (int nboard, BOOL bpol) BOOL LVDS_SetDeUse (int nboard, BOOL buse) BOOL LVDS_VideoMode (int nboard, int nmode) LVDS_Init LVDS sub-system 의자원, 예를들어 interrupt 와 LVDS control register 을초기화한다. BOOL LVDS_Init (int nboard) -4- http://www.daqsystem.com
LVDS_Start 프레임데이터수집을시작한다. 이함수를호출한후에 LVDS_GetFrame 함수를 호출하여데이터가완성이되었는가를확인할수있다. BOOL LVDS_Start (int nboard) LVDS_GetFrame 프레임데이터가완성이되었는가를검사하고완성이되었으면프레임데이터를 가져온다. 이때데이터를받아올버퍼크기를반드시알려주어야한다. BOOL LVDS_GetFrame (int nboard, DWORD* ncnt, unsigned char* buf) nboard : 현재시스템에장착되어있는보드번호를알려준다. ncnt : 프레임데이터를받아올버퍼의크기가저장되어있는변수의번지이다. 함수를호출할때버퍼크기를지정하고호출한후에는변수값을읽어서실제로읽어온개수를확인한다. 데이터크기는바이트단위이다. buf : 프레임버퍼포인터. 호출이성공하면 ncnt 값을확인하여원하는크기만큼읽어졌는가를확인한다. 프레임데이터가완성이되지않았으면바로 FALSE를리턴하고 ncnt 값을 0으로해서리턴이일어난다. -5- http://www.daqsystem.com
LVDS_Close LVDS 함수에서사용된모든자원을되돌려준다. 어플리케이션프로그램은 프로그램종료시이함수를부른다. BOOL LVDS_Close (int nboard) LVDS_GetResolution Video 입력의해상도를가져온다. BOOL LVDS_GetResolutuion (int nboard, DWORD *xres, DWORD *yres) *nxres : 수평해상도값즉, Frame의 Width를가져온다. *nyres : 수직해상도값즉, Frame의 Height를가져온다. LVDS_Stop 프레임데이터 Capture 를중지한다. BOOL LVDS_Stop (int nboard) -6- http://www.daqsystem.com
LVDS_SetDataMode 프레임 ( 이미지 ) 데이터모드를선택한다. BOOL LVDS_SetDataMode (int nboard, int nmode) nmode : 0 이면 8bit Mode이고, 1 이면 16bit Mode 2 이면 24bit Mode이고, 3 이면 32bit Mode이고 4 이면 Convert Mode (24bit RGB to 16Bit YUV Mode) 이다. LVDS_GetVersion 현재프로그램의버전을가져온다. BOOL LVDS_GetVersion (int nboard, int *nfpgaver, int *nfirmver) *nfpgaver : FPGA version. *nfirmver : Firmware version. LVDS_BufferFlush 버퍼를초기화한다. BOOL LVDS_BufferFlush (int nboard) -7- http://www.daqsystem.com
LVDS_HsyncPol 전체영상프레임은 Hsize(Horizontal Size) x Vsize(Vertical Size) 로표현된다. 예를들어, 800 x 600 인경우가로크기가 800 개의 Pixel( 화소 ) 에 600개의세로줄로표시된다. 여기에실제영상을표현하기위해 Front parch, Back parch 등의영상앞 / 뒤마진등으로표시한다. 전체 Timing 도는아래와같으며 LVDS_HsyncPol 함수는수평신호 (HSYNC : Horizontal Synchronization) Polarity 방향이 Positive 인지 Negative인지를결정한다, <V_RES, V_BLK 와 D_RES, D_BLK 관계 > VSYNC : Vertical Synchronization, 수직동기화 1장의영상데이타를구분하는기준이되는신호 (Sync) 다. 현재설정은 Positive 극성이다. HSYNC : Horizontal Syncgronization, 수평동기화 1줄의영상데이타를구분하는기준이되는신호 (Sync) 다. 현재설정은 Positive 극성이다. Inversed HSYNC인경우 Negative 극성이된다. BOOL LVDS_HsyncPol (int nboard, BOOL bpol) bpol : False 이면 Normal HSYNC 사용하고 True 이면 Inverse된 HSYNC를사용한다 -8- http://www.daqsystem.com
LVDS_SetDeUse 어떤디바이스는영상을드라이브하는신호로수평 Hsync 대신에영상데이터 (data enable) 신호를사용하기도한다. 이함수는수평 Hsync 또는 DVAL 신호를선택할수있게해준다. BOOL LVDS_SetDeUse (int nboard, BOOL buse) buse : True 이면 DVAL(Data Validation) 사용하고 False 이면 HSYNC (Horizontal Synchronization) 를사용한다 LVDS_VideoMode 영상모드의한프레임정보처리를 Vsync, Hsync, De를사용하거나 Clock에맞춰데이터를보내는 BT656 Mode를선택할수있다. ITU-R BT.656 또는 ITU 656 표준은압축되지않은 PAL 또는 NTSC 표준화질텔레비전을스트리밍하기위한단순한디지털영상프로토콜을정의한다. 이프로토콜은비월주사된영상데이터를지원하며, 각필드는따로따로스트리밍된다. 하나의 BT.656 스트림은 27 MHz 로동작하는픽셀클럭신호에따라동시에 8 비트를병렬로전송한다. 스트림내의비디오픽셀데이터의수평주사선은 SAV (Start of Active Video) 코드와 EAV (End of Active Video) 코드로구분된다. BOOL LVDS_VideoMode (int nboard, int nmode) nmode : 0 이면 Signal Mode이고 (Vsync, Hsync, De) 사용 1 이면 BT656 Mode이다. -9- http://www.daqsystem.com
Clock API Functions Overview BOOL CLK_Init (int nboard) BOOL CLK_Close (int nboard) BOOL CLK_Select (int nboard, int nselect) DWORD CLK_Get (int nboard) BOOL CLK_Set (int nboard, DWORD val) BOOL CLK_Off (int nboard, BOOL boff) CLK_Init 센서 Clock 을초기화한다. BOOL CLK_Init (int nboard) CLK_ Close Open 된센서 Clock 을 Close 한다. BOOL CLK_Close (int nboard) -10- http://www.daqsystem.com
CLK_ Select 센서클럭을선택한다. BOOL CLK_Select (int nboard) CLK_Get 선택된센서 Clock 을가져온다. DWORD CLK_Get (int nboard) CLK_Set 센서 Clock 을 1039Hz ~ 68MHz 까지세팅할수있다. BOOL CLK_Set (int nboard, DWORD val) val : 1039Hz ~ 68Mhz. -11- http://www.daqsystem.com
CLK_Off 센서 Clock 을동작시킨다. BOOL CLK_Off (int nboard, BOOL bon) boff : True : Clock Off False : Clock On -12- http://www.daqsystem.com
I2C API Functions Overview BOOL BOOL BOOL BOOL I2C_SYS_Reset (int nboard) I2C_SYS_Set_Clock (int nboard, int nclock) I2C_SYS_Read (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Write (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Reset I2C system 의자원을초기화한다. BOOL I2C_SYS_Reset (int nboard) I2C_SYS_Set_Clock Baudrate 을정한다. BOOL I2C_SYS_Set_Clock (int nboard, int nclock) nclock : 0 : command(0xf8), 1 ~ 3 : reserved 4 ~ 7 : 32bit Baudrate Value(Hz) Ex) 200KHz : 2000000 100KHz : 1000000-13- http://www.daqsystem.com
I2C_SYS_Read I2C 를통하여데이터를받는다. BOOL I2C_SYS_Read (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Lengh naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대받을수있는문자는 256byte로제한되어있다. buf : 버퍼어드레스. I2C_SYS_Write I2C 를통하여데이터를보낸다. BOOL I2C_SYS_Write (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Lengh naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대전송할수있는문자는 1Kbyte(1024) 로제한되어있다. buf : 버퍼어드레스. -14- http://www.daqsystem.com