Cita:
Iniciado por pedrobarreno010 Ahora bien siguiendo el ejemplo que me mostraste "SerialPortExample" debo decir que no me recnoce en windows la libreria termios.h cual podria utilizar en ese caso?
termios.h es propia del entorno Linux y no hay un sustituto "tal cual" en Windows, que imagino será tu caso.
En cualquier caso, si ya tienes el puerto serie reconocido como COM1 la comunicación la puedes realizar (o deberías poder realizarla) de forma directa.
Lo primero es abrir el puerto. En windows el puerto serie se gestiona como un fichero... tiene sus particularidades con respecto a un fichero de verdad (las opciones de seek no tienen ningún efecto, por ejemplo) pero su uso es básicamente el mismo.
Para empezar hay que abrir el fichero:
Código C:
Ver originalHANDLE hSerial;
hSerial = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Lo básico a saber de esas líneas es que abres el fichero "COM1" con acceso de lectura y escritura... y que el fichero ha de existir, para una documentación más precisa consulta la MSDN.
Después estaría bien verificar que hemos podido abrir el puerto:
Código C:
Ver originalif ( INVALID_HANDLE_VALUE == hSerial )
{
printf("No se ha podido abrir el puerto.\n"); if (GetLastError() == ERROR_FILE_NOT_FOUND)
printf("\tNo existe el puerto serie.\n"); }
El siguiente paso sería configurar el puerto serie. En este caso lo mejor es leer la configuración actual y sobreescribir los parámetros que necesitemos...
Código C:
Ver originalCOMMCONFIG dcbSerialParams;
if (!GetCommState(hSerial, &dcbSerialParams.dcb))
{
printf("No ha sido posible leer la configuración del puerto\n"); }
dcbSerialParams.dcb.DCBlength = sizeof(dcbSerialParams.dcb);
dcbSerialParams.dcb.BaudRate = CBR_9600; // Velocidad de conexión
dcbSerialParams.dcb.ByteSize = 8; // Tamaño del byte
dcbSerialParams.dcb.StopBits = ONESTOPBIT; // Bits de stop
dcbSerialParams.dcb.Parity = NOPARITY; // Paridad
dcbSerialParams.dcb.fBinary = TRUE;
// Sin control de ningún tipo
dcbSerialParams.dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcbSerialParams.dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcbSerialParams.dcb.fOutxCtsFlow = FALSE;
dcbSerialParams.dcb.fOutxDsrFlow = FALSE;
dcbSerialParams.dcb.fDsrSensitivity= FALSE;
dcbSerialParams.dcb.fAbortOnError = TRUE;
if (!SetCommState(hSerial, &dcbSerialParams.dcb))
{
printf("No ha sido posible configurar el puerto\n"); }
Y si no se me olvida nada, ya está... ya puedes leer y escribir del puerto a placer:
Escribir:
Código C:
Ver originalchar* toSend = "Datos a enviar";
int nToSend
= strlen(toSend
); DWORD bytesWritten = 0;
if (!WriteFile(hSerial, toSend, nToSend, &bytesWritten , NULL))
{
printf("Error de escritura\n"); }
Leer:
Código C:
Ver originalchar buffer[200];
DWORD bytesRead = 0;
if (!ReadFile(hSerial, buffer, nToRead, &bytesRead, NULL))
{
}
Y claro, cuando terminemos sólo falta cerrar el puerto:
y ya está. Si no me he olvidado de nada con esto ya tendrías todo lo necesario para leer y escribir de tu flamante nuevo puerto serie.
Un saludo