Que tal, no es referido a programación de juegos (no directamente al menos), pero igual pregunto por si alguien sabe.
¿Como puedo adquirir datos en tiempo constante a alta velocidad a travez del puerto paralelo, o USB o algo así?
Mas de 16 megabaudios por lo menos, en palabras de 16 bits .
Algo así como un DMA (como el de la SoundBlaster) o algo así, pero no tengo ni idea de como funciona esto.
Si alguien sabe como, o a donde mandarme a preguntar o algun link, le agradeceria.
Saludos.
La verdad es casi no recuerdo nada de esto (me estoy amariconando con tanto Java ¬¬), así que te pego un trozo de mi viejo código para puerto serie:
BOOL CComSerie::Abrir( int nPuerto )
{
BOOL fSuccess;
COMMTIMEOUTS CommTimeOuts;
char szCad[128];
wsprintf( szCad, "COM%d", nPuerto );
SECURITY_ATTRIBUTES sa;
sa.nLength =sizeof(sa);
sa.lpSecurityDescriptor =NULL;
sa.bInheritHandle =TRUE;
hComm = CreateFile( szCad, GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
&sa, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL |
//FILE_FLAG_OVERLAPPED |
0,
NULL );
if( hComm == INVALID_HANDLE_VALUE )
return FALSE;
fSuccess = GetCommState( hComm, &dcb );
if( !fSuccess )
return FALSE;
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.fBinary = TRUE; // binary mode, no EOF check
dcb.fNull = FALSE;
dcb.EvtChar = 0;
/*
dcb.BaudRate = CBR_9600;
dcb.fParity = FALSE; // enable parity checking
dcb.fOutxDsrFlow = FALSE; // DSR output flow control
dcb.fOutxCtsFlow = FALSE; // CTS output flow control
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE; // DSR sensitivity
dcb.fTXContinueOnXoff = FALSE; // XOFF continues Tx
dcb.fOutX = FALSE; // XON/XOFF out flow control
dcb.fInX = FALSE; // XON/XOFF in flow control
dcb.fErrorChar = FALSE; // enable error replacement
dcb.fNull = FALSE; // enable null stripping
dcb.fAbortOnError = TRUE; // abort reads/writes on error
dcb.XonLim = 100; // transmit XON threshold
dcb.XoffLim = 100; // transmit XOFF threshold
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.XonChar = 0; // Tx and Rx XON character
dcb.XoffChar = 0; // Tx and Rx XOFF character
dcb.ErrorChar = 0; // error replacement character
dcb.EofChar = 0; // end of input character
dcb.EvtChar = 0; // received event character
*/
fSuccess = SetCommState ( hComm, &dcb );
if( !fSuccess )
return ( FALSE );
SetCommMask( hComm, 0 );
// Aumentar el buffer de entrada si se pierde algún dato
SetupComm( hComm, 128*1024,4096 );
CommTimeOuts.ReadIntervalTimeout = 100;
CommTimeOuts.ReadTotalTimeoutMultiplier = 100;
CommTimeOuts.ReadTotalTimeoutConstant = 100;
CommTimeOuts.WriteTotalTimeoutMultiplier = 100;
CommTimeOuts.WriteTotalTimeoutConstant = 100;
fSuccess = SetCommTimeouts( hComm, &CommTimeOuts );
if( !fSuccess ) return FALSE;
LimpiaPuerto();
return TRUE;
}
-= EDIT =-
La lectura es con ReadFile y la escritura con WriteFile. Mira la documentación de las funciones que viene aquí para ver más sobre su funcionamiento.
en que lenguage de programación?
Supongo que se habla de Windows y C/C++.
16mbps? Pues USB o FireWire.. me temo que si quieres acceder de manera directa a los datos tendrás que programar a nivel de driver. El SDK de Microsoft para drivers y bajo nivel se llama DDK, y ya no está disponible para descarga gratuita. Tendrás que buscarlo en redes p2p o encargarlo a Microsoft.
Con puertos serie, como ha escrito Sés, es posible la lectura/escritura con Win32, sin demasiadas complicaciones... pero la velocidad máxima del puerto es de unos 9000bps
PD: ¿ Y para qué necesitas hacer ésto? Si se puede saber.. :rolleyes:
Si el caso es vb te podre ayudar basante , ya que me dedicava a sacar protocolos de los automatas i programarlos mediante puerto serie entre otras cosas
Si, pido perdon, Visual C++ / win32, y es para un proyecto secreto del curro :ph34r:, sobre tratado de señales y se requiere adquirir mucha informacion a alta velocidad y tiempo constante, el tema es actualizarme, la ultima vez utilice DOS y puerto paralelo.
Sobre el puerto serie mas o menos tengo idea, el que no se ni encuentro info es el USB.
Si alguien sabe ...
Gracias
http://www.lvr.com/usb.htmhttp://www.tetradyne.com/dxusb.htmEs lo poko q encontre por inet en un rato, ya buscare mas si tengo tiempo luego...
Me voy q a las 8 tengo examen practiko de estadistika (grrr)
Saludos! B)
en la página de intel tambien habia info y ejemplos para adquirir datos incluso desde VB (usb)