USB3-FRM01 API Programming (Rev 1.1) 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) ResetBoard (int nboard) CloseDAQDevice (void) Int GetBoardNum (void) USB3_SetMode (int nmode) OpenDAQDevice 디바이스를 Open 한다. 프로그램에서초기에반드시한번함수를호출하여디바이스를 Open 하여야한다. int OpenDAQDevice (void) 없음. 함수호출에성공한경우, 설치된보드의개수를리턴한다. 함수호출에실패한경우, -1 을리턴한다. 이것의의미는시스템에장치가없다는의미이다. ResetBoard 현재시스템 (PC) 에장착된디바이스를초기화한다. ResetBoard (int nboard) 함수호출에성공일경우 TRUE 을리턴함. 함수호출에실패한경우, 어떤 API 함수도호출할수없고 CloseDAQDevice() 를부른다. -2- http://www.daqsystem.com
CloseDAQDevice Open된디바이스를 Close한다. 장치의사용이끝나게되면, 반드시장치를 Close하여다른프로그램에서사용할수있도록한다. CloseDAQDevice (void) 없음. 디바이스 Open에성공할경우 TRUE를실패할경우 FALSE를리턴한다. GetBoardNum 시스템에서설치된보드개수를알려준다. int GetBoardNum (void) 없음. 설치된보드의개수를리턴한다. 보드넘버는장착되어있는 DIP 스위치 (SW1) 의설정값이다. USB3_SetMode 보드의 USB 입출력방향을결정한다. 0 이면입력보드로사용하고, 나머지는출력 보드로사용한다. USB3_SetMode (int nmode) nmode : 0: input(default), others : output -3- http://www.daqsystem.com
LVDS API Functions Overview LVDS_Init (void) LVDS_Start (void) LVDS_GetFrame (DWORD* ncnt, unsigned char* buf) LVDS_Close (void) LVDS_GetResolutuion (DWORD *xres, DWORD *yres) LVDS_Stop (void) LVDS_StartFrame (void) LVDS_SendFrame (DWORD* ncnt, unsigned char* buf) LVDS_SetDataMode (int nmode) LVDS_GetVersion (int *nversion) DWORD LVDS_GetError (DWORD *dwstatuse) LVDS_Init LVDS sub-system 의자원, 예를들어 interrupt 와 LVDS control register 을초기화한다. LVDS_Init (void) 없음. LVDS_Start 프레임데이터수집을시작한다. 이함수를호출한후에 LVDS_GetFrame 함수를 호출하여데이터가완성이되었는가를확인할수있다. LVDS_Start (void) 없음. -4- http://www.daqsystem.com
LVDS_GetFrame 프레임데이터가완성이되었는가를검사하고완성이되었으면프레임데이터를 가져온다. 이때데이터를받아올버퍼크기를반드시알려주어야한다. LVDS_GetFrame (DWORD* ncnt, unsigned char* buf) ncnt : 프레임데이터를받아올버퍼의크기가저장되어있는변수의번지이다. 함수를호출할때버퍼크기를지정하고호출한후에는변수값을읽어서실제로읽어온개수를확인한다. 데이터크기는바이트단위이다. buf : 프레임버퍼포인터. 호출이성공하면 ncnt 값을확인하여원하는크기만큼읽어졌는가를확인한다. 프레임데이터가완성이되지않았으면바로 FALSE를리턴하고 ncnt 값을 0으로해서리턴이일어난다. LVDS_Close LVDS 함수에서사용된모든자원을되돌려준다. 어플리케이션프로그램은 프로그램종료시이함수를부른다. LVDS_Close (void) 없음. LVDS_GetResolution Video 입력의해상도를가져온다. LVDS_GetResolutuion (DWORD *xres, DWORD *yres) *xres : 수평해상도값즉, Frame의 Width를가져온다. *yres : 수직해상도값즉, Frame의 Height를가져온다. -5- http://www.daqsystem.com
LVDS_Stop 프레임데이터 Capture 를중지한다. LVDS_Stop (void) 없음. LVDS_StartFrame 프레임데이터전송을시작한다. LVDS_StartFrame (void) 없음. LVDS_SendFrame 프레임데이터를지정된크기에맞게보낸다. 이때데이터를보낼버퍼크기를 반드시알려주어야한다. LVDS_SendFrame (DWORD* ncnt, unsigned char* buf) ncnt : 프레임데이터를보낼버퍼의크기가저장되어있는변수의번지이다. 데이터크기는바이트단위이다. buf : 보낼프레임데이터버퍼포인터. -6- http://www.daqsystem.com
LVDS_SetDataMode 프레임 ( 이미지 ) 데이터모드를선택한다. LVDS_SetDataMode (int nmode) nmode : 0 이면 8bit Mode이고, 1 이면 16bit Mode 2 이면 24bit Mode이고, 3 이면 32bit Mode(Not Used) 이고 4 이면 Convert Mode (24bit RGB to 16Bit YUV Mode) 이다. LVDS_GetVersion 현재프로그램의버전을가져온다. LVDS_GetVersion (int *nversion ) *nversion : 현재프로그램버전값. LVDS_GetError 프레임 ( 이미지 ) 에러를가져온다. DWORD LVDS_GetError (DWORD *dwstatus) *dwstatus : 에러상태값을가져온다. 1 이면 Overflow error 2 이면 Read error 4 이면 Size error -7- http://www.daqsystem.com
Clock API Functions Overview CLK_Init (void) CLK_Close (void) DWORD CLK_Get (void) CLK_Set (DWORD val) CLK_On ( bon) CLK_Init 센서의 Clock 을초기화한다. CLK_Init (void) 없음. CLK_ Close _Clock Open 된 Clock 을 Close 한다. CLK_Close (void) 없음. CLK_Get 선택된 Clock 을가져온다. DWORD CLK_Get (void) 없음. -8- http://www.daqsystem.com
CLK_Set Clock 을 1039Hz ~ 68MHz 까지세팅할수있다. CLK_Set (DWORD val) val : 1039Hz ~ 68Mhz. CLK_On Clock 을동작시킨다. CLK_On ( bon) bon : True : Clock Off False : Clock On -9- http://www.daqsystem.com
Digital Input/Output API Functions Overview DWORD DIO_SetDirection (DWORD dwval) DIO_GetDirection (DWORD *dwval) DIO_Read (void) DIO_Write (DWORD dwval) DIO_GetWrite (DWORD *dwval) DIO_SetDirection USB3-FRM01 보드를 Frame Grabber 로사용하지않고 32 비트데이터라인으로사 용할때, 각각의데이터포트를입력으로사용할지출력으로사용할지설정한다. DIO_SetDirection (DWORD dwval) dwval : 입 / 출력 direction 설정값. 각포트에 1 출력 / 0 입력 DIO_GetDirection 현재설정된 direction 값을읽는다. Get_Direction (DWORD *dwval) *dwval : 입 / 출력 direction을읽어올변수. -10- http://www.daqsystem.com
DIO_Read 입력값을읽는다. DWORD DIO_Read (void) 없음. DIO_Write 원하는값을출력포트에출력한다. DIO_Write (DWORD dwval) dwval : 출력포트에기록할값. DIO_GetWrite 출력된현재값을적는다. DOUT_Read (DWORD *dwval) *dwval : 출력포트의현재값을쓸변수이다. -11- http://www.daqsystem.com
I2C API Functions Overview I2C_SYS_Reset (void) I2C_SYS_Read (Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Write (Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Reset I2C system 의자원을초기화한다. I2C_SYS_Reset (void) 없음. I2C_SYS_Read I2C 를통하여데이터를받는다. I2C_SYS_Read (Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Lengh naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대받을수있는문자는 256byte로제한되어있다. buf : 버퍼어드레스. -12- http://www.daqsystem.com
I2C_SYS_Write I2C 를통하여데이터를보낸다. I2C_SYS_Write (Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Lengh naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대전송할수있는문자는 1Kbyte(1024) 로제한되어있다. buf : 버퍼어드레스. -13- http://www.daqsystem.com
Video Simulation API Functions Overview SIM_Vout_Size (int nhmax, int nhblk, int ndres, int ndblk, int nvres, int nvblk) SIM_Vout_Mode (int nmode) SIM_Vout_RbSwap ( bswap) SYM_Vout_Size 사용자는유효한 active 프레임을 H_MAX, H_BLK, D_RES, D_BLK, V_RES, V_BLK Timing 값으로조절하여출력할수도있다. [ 그림 1. H_MAX, H_BLK 와 V_RES, V_BLK 관계 ] -14- http://www.daqsystem.com
[ 그림 2. V_RES, V_BLK 와 D_RES, D_BLK 관계 ] SIM_Vout_Size (int nhmax, int nhblk, int ndres, int ndblk, int nvres, int nvblk) nhmax : H_MAX 값 nhblk : H_BLK 값 ndres : D_RES 값 ndblk : D_BLK 값 nvres : V_RES 값 nvblk : V_BLK 값 -15- http://www.daqsystem.com
SYM_Vout_Mode 출력데이터의형태를선택한다. USB Data --- 일반적인 USB 데이터값을출력한다. Constant --- 일정한패턴의지정된상수값을출력한다. hcnt --- Horizontal Count 값을출력한다. Pixel Count --- 전체 Pixel Count 값을 16진수값으로출력한다. 예를들어, 640x480인경우 0 ~ 4B000 (307200 pixels) 을출력한다. SIM_Vout_Mode (int nmode) nmode : 0:USB, 1:Constant, 2:Horizontal Count, 4: Pixel Count SYM_Vout_RbSwap 출력데이터의 Red 와 Blue 신호값을교환한다. SIM_Vout_RbSwap ( bswap) bswap : 참이면 Red, 거짓이면 Blue -16- http://www.daqsystem.com
Multi-Board API Functions 싱글보드의 API인경우단지하나의보드가인스톨된시스템에서사용된다. 하지만, 두개의보드이거나그이상 ( 최대 4개지원 ) 의보드가인스톨된시스템에서는다중 API를사용해야만한다. 멀티보드 API의경우싱글보드 API에보드번호가추가된형태이다. 최대설정가능한보드번호는 0 ~ 3 이다. Overview USB3_SetMode_Mul (int nboard, int nmode) USB3_SetMode 보드의 USB 입출력방향을결정한다. 0 이면입력보드로사용하고, 나머지는출력 보드로사용한다. USB3_SetMode (int nmode) nmode : 0: input(default), others : output -17- http://www.daqsystem.com
Multi-Board LVDS API Functions Overview DWORD LVDS_Init_Mul (int nboard) LVDS_Start_Mul (int nboard) LVDS_GetFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) LVDS_Close_Mul (int nboard) LVDS_GetResolutuion_Mul (int nboard, DWORD *xres, DWORD *yres) LVDS_Stop_Mul (int nboard) LVDS_StartFrame_Mul (int nboard) LVDS_SendFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) LVDS_SetDataMode_Mul (int nboard, int nmode) LVDS_GetVersion_Mul (int nboard, int *nversion) LVDS_GetError_Mul (int nboard, DWORD *dwstatuse) LVDS_Init_Mul LVDS sub-system 의자원, 예를들어 interrupt 와 LVDS control register 을초기화한다. LVDS_Init_Mul (int nboard) LVDS_Start_Mul 프레임데이터를받기시작한다. LVDS_Start_Mul (int nboard) -18- http://www.daqsystem.com
LVDS_GetFrame_Mul 프레임버퍼로부터프레임데이터를가져온다. LVDS_GetFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) ncnt : 데이터의어드레스는바이트사이즈로받는다. 최대받을수있는데이터는 16Mbyte(0x1000000) 로제한되어있다. buf : 버퍼주소. LVDS_Close_Mul LVDS 함수에서사용된모든자원을되돌려준다. 어플리케이션프로그램은 프로그램종료시이함수를부른다. LVDS_Close_Mul (int nboard) LVDS_GetResolution_Mul Video 입력의해상도를가져온다. LVDS_GetResolutuion_Mul (int nboard, DWORD *xres, DWORD *yres) *nxres : 수평해상도즉, Frame의 Width를가져온다. *nyres : 수직해상도즉, Frame의 Height를가져온다. -19- http://www.daqsystem.com
LVDS_Stop_Mul 프레임데이터 Capture 를중지한다. LVDS_Stop_Mul (int nboard) LVDS_StartFrame_Mul 프레임데이터전송을시작한다. LVDS_StartFrame_Mul (int nboard) LVDS_SendFrame_Mul 프레임데이터를지정된크기에맞게보낸다. 이때데이터를보낼버퍼크기를 반드시알려주어야한다. LVDS_SendFrame_Mul (int nboard, DWORD* ncnt, unsigned char* buf) ncnt : 프레임데이터를보낼버퍼의크기가저장되어있는변수의번지이다. 데이터크기는바이트단위이다. buf : 보낼프레임데이터버퍼포인터. -20- http://www.daqsystem.com
LVDS_SetDataMode_Mul 프레임 ( 이미지 ) 데이터모드를선택한다. LVDS_SetDataMode_Mul (int nboard, int nmode) nmode: 0 이면 8bit Mode이고, 1 이면 16bit Mode 2 이면 24bit Mode이고, 3 이면 32bit Mode(Not Used) 이고 4 이면 Convert Mode (24bit RGB to 16Bit YUV Mode) 이다. LVDS_GetVersion_Mul 현재프로그램의버전을가져온다. LVDS_GetVersion_Mul (int nboard, int *nversion ) *nversion : 현재프로그램버전값. -21- http://www.daqsystem.com
LVDS_GetError_Mul 프레임 ( 이미지 ) 에러를가져온다. LVDS_GetError_Mul (int nboard, DWORD *dwstatus) *dwstatus : 에러상태값을가져온다. 1 이면 Overflow error 2 이면 Read error 4 이면 Size error -22- http://www.daqsystem.com
Multi-Board Clock API Functions Overview CLK_Init_Mul (int nboard) CLK_Close_Mul (int nboard) DWORD CLK_Get_Mul (int nboard) CLK_Set_Mul (int nboard, DWORD val) CLK_On_Mul (int nboard, bon) CLK_Init_Mul 센서의 Clock 을초기화한다. CLK_Init_Mul (int nboard) CLK_ Close_Mul Open 된 Clock 을 Close 한다. CLK_Close_Mul (int nboard) -23- http://www.daqsystem.com
CLK_Get_Mul 선택된 Clock 을가져온다. DWORD CLK_Get_Mul (int nboard) CLK_Set_Mul Open 된 Clock 을 Close 한다. CLK_Set_Mul (int nboard, DWORD val) val : 1039Hz ~ 68Mhz. CLK_On_Mul Clock 을동작시킨다. CLK_On_Mul (int nboard, bon) bon : True : Clock Off False : Clock On -24- http://www.daqsystem.com
Multi-Board Digital Input/Output API Functions Overview DWORD DIO_SetDirection_Mul (int nboard, DWORD dwval) DIO_GetDirection_Mul (int nboard, DWORD *dwval) DIO_Read_Mul (int nboard) DIO_Write_Mul (int nboard, DWORD dwval) DIO_GetWrite_Mul (int nboard, DWORD *dwval) DIO_SetDirection_Mul 각각의포트를입력으로사용할지출력으로사용할지설정한다. DIO_SetDirection_Mul (int nboard, DWORD dwval) dwval : 입 / 출력 direction 설정값. 각포트에 1 출력 / 0 입력 Get_Direction_Mul 현재설정된 direction 값을읽는다. Get_Direction_Mul (int nboard, DWORD *dwval) *dwval : 입 / 출력 direction을읽어올변수. -25- http://www.daqsystem.com
DIO_Read_Mul 입력값을읽는다. DWORD DIO_Read_Mul (int nboard) DIO_Write_Mul 원하는값을출력포트에출력한다. DIO_Write_Mul (int nboard, DWORD dwval) dwval : 출력포트에기록할값. DOUT_GetWrite_Mul 출력된현재값을적는다. DOUT_Read_Mul (int nboard, DWORD *dwval) *dwval : 출력포트의현재값을쓸변수이다. -26- http://www.daqsystem.com
Multi-Board I2C API Functions Overview I2C_SYS_Reset_Mul (int nboard) I2C_SYS_Read_Mul (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Write_Mul (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) I2C_SYS_Reset_Mul I2C system 의자원을초기화한다. I2C_SYS_Reset_Mul (int nboard) I2C_SYS_Read_Mul I2C 를통하여데이터를받는다. I2C_SYS_Read_Mul (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Length naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대받을수있는문자는 256byte로제한되어있다. buf : 버퍼어드레스. -27- http://www.daqsystem.com
I2C_SYS_Write_Mul I2C 를통하여데이터를보낸다. I2C_SYS_Write_Mul (int nboard, Byte sladdr, DWORD naddrlen, DWORD naddr, DWORD ncnt, unsigned char* buf) sladdr : Slave address naddrlen : Address Length naddr : Register Address ncnt : 문자를나타내는어드레스를바이트사이즈로받는다. 최대전송할수있는문자는 1Kbyte(1024) 로제한되어있다. buf : 버퍼어드레스. -28- http://www.daqsystem.com
Multi-Board Video Simulation API Functions Overview SIM_Vout_Size_Mul (int nboard, int nhmax, int nhblk, int ndres, int ndblk, int nvres, int nvblk) SIM_Vout_Mode_Mul (int nboard, int nmode) SIM_Vout_RbSwap_Mul (int nboard, bswap) SYM_Vout_Size_Mul 사용자는유효한 active 프레임을 H_MAX, H_BLK, D_RES, D_BLK, V_RES, V_BLK Timing 값으로조절하여출력할수도있다. [ 그림 3. H_MAX, H_BLK 와 V_RES, V_BLK 관계 ] -29- http://www.daqsystem.com
[ 그림 4. V_RES, V_BLK 와 D_RES, D_BLK 관계 ] SIM_Vout_Size_Mul (int nboard, int nhmax, int nhblk, int ndres, int ndblk, int nvres, int nvblk) nhmax : H_MAX 값 nhblk : H_BLK 값 ndres : D_RES 값 ndblk : D_BLK 값 nvres : V_RES 값 nvblk : V_BLK 값 -30- http://www.daqsystem.com
SYM_Vout_Mode_Mul 출력데이터의형태를선택한다. USB Data --- 일반적인 USB 데이터값을출력한다. Constant --- 일정한패턴의지정된상수값을출력한다. hcnt --- Horizontal Count 값을출력한다. Pixel Count --- 전체 Pixel Count 값을 16진수값으로출력한다. 예를들어, 640x480인경우 0 ~ 4B000 (307200 pixels) 을출력한다. SIM_Vout_Mode_Mul (int nboard, int nmode) nmode : 0:USB, 1:Constant, 2:Horizontal Count, 4: Pixel Count SYM_Vout_RbSwap_Mul 출력데이터의 Red 와 Blue 신호값을교환한다. SIM_Vout_RbSwap_Mul (int nboard, bswap) bswap : 참이면 Red, 거짓이면 Blue -31- http://www.daqsystem.com