[C con Clase] puerto serie

Diego Durante diegogeid en gmail.com
Vie Ene 12 12:07:08 CET 2007


Hola Emiliano... Una pregunta y una solución:

Vos hiciste el receptor del control remoto? Porque casualmente hace bastante
estaba haciendo uno y tuve que desistir al no conseguir los componentes
necesarios... Si es así me podés decir que receptor infrarrojos usaste y en
que país? Y todavía estoy con "la bronca" de eso dando vueltas en la
cabeza... je...

POR OTRO LADO (lo escribo en mayúsculas porque esto debe ser lo importante
para vos) TE RECOMIENDO QUE VEAS EL PROGRAMA WINLIRC PARA WINDOWS QUE SE
ADAPTA A LOS DISTINTOS RECEPTORES, QUE PARTE DE LIRC PARA LINUX. Es gratis y
no se de donde lo saqué (siempre hablando del winlirc), supongo que debe
estar por todos lados, pero tengo el código fuente. Si no lo encontrás te lo
puedo pasar, lo tengo con el fuente y funcionando, así como también algún
programa para manejar distintos programas con plug' ins (Que ahora no me
acuerdo el nombre. Si te interesa decime y te lo paso...)... Saludos y mejor
suerte que yo.. je aunque si tenés el receptor lo demás es historia con el
WinLirc

El día 27/12/06, Jorge Luis Betancourt González <mayragm en finlay.cmw.sld.cu>
escribió:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hola Emiliano:
>
> Mira en mi modesta opinión, puede que al tratarse de un control
> remoto, así como otros dispositivos inalámbricos estos envían señales
> periódicas para ver si el dispositivo está aún conecta o para
> averiguar en que estado se encuentra el dispositivo, así por ejemplo
> sucede con los dispositivos WiFi de redes, mi consejo es que depures
> un poco más tu algoritmo y escribas una función o un código que te
> permita «filtrar» lo leído desde el dispositivo, y entonces luego
> pasárselo al selector de acciones que tengas planeado implementar, si
> te hace más fácil cuando tienes todas las interrupciones (datos) que
> te envía el dispositivo y que no son las lecturas de las teclas
> presionadas ni nada de esto, así pues:
>
> Mando -> Envía señal -> Procesar señal en busca de ->  entregar señal
> al selector de acciones
>                         datos inválidos FF, FD, o
>                         FE,
> slds
>
> Emiliano Nuñez escribió:
> > Hola lista, resulta que tengo un control remoto con el correspondiente
> > receptor que va conectado al puerto serie, estoy haciendo un programa
> para
> > obtener los bytes que el mando me envia cada vez que presiono una
> tecla, el
> > programa escucha el puerto y cuando apreto un boton me envia los bytes
> > recibidos, hací yo puedo actuar en funcion de estos.
> > El problema es que aveces (es impredecible) aparecen datos leidos sin
> que yo
> > presione una tecla, o sea, por ejemplo, el programa dice "escichando" y
> > aparecen bytes normalmente FF, FD, o FE, o sea, lee esos bytes del
> puerto
> > serie sin que yo haya apretado ninguna tecla, y estos aveces si yo estoy
> > apretando teclas se mezclan con lo verdaderos bytes que he enviado.
> >
> > digamos que la salida deberia ser esta:
> >
> > listando.........
> >
> > 32,45,A1  ---> aprete la tecla x
> > 43,CD,2A ----> aprete la tecla y
> > .
> > .
> > .
> >
> > pero la salida es:
> >
> > listando.....
> >
> > FF (no aprete nada)
> > FE (no aprete nada)
> >
> > 32,45,A1 (aprete la tecla x)
> >
> > 43,FF,CD,2A (aprete la tecla y)
> >
> > o sea, es como si se meten bytes que no tendrían que estar allí, como si
> > otro programa estubiese escribiendo esos bytes en el puerto paralelo.
> >
> > no se si alguíen podrá ayudarme.
> >
> > dejo el codigo (compilado con vc++)
> >
> > #include "stdafx.h"
> > #include <stdio.h>
> > #include <string.h>
> > #include <windows.h>
> > #include <conio.h>
> > #include <winsock.h>
> >
> >
> > void main(int argc, char* argv[])
> > {
> >     char cadena[1024];
> >     DCB dcb;
> >     HANDLE hCom;
> >     DWORD dwError;
> >     BOOL fSuccess;
> >
> >
> >     printf("escuchandoooooooo...\n");
> >
> >     hCom = CreateFile( "com1",
> >         GENERIC_READ | GENERIC_WRITE,
> >         0,    // comm devices must be opened w/exclusive-access
> >         NULL, // no security attributes
> >         OPEN_EXISTING, // comm devices must use OPEN_EXISTING
> >         0,    // not overlapped I/O
> >         NULL  // hTemplate must be NULL for comm devices
> >         );
> >
> >     if (hCom == INVALID_HANDLE_VALUE)
> >     {
> >         dwError = GetLastError();
> >         return;
> >
> >         // handle error
> >     }
> >
> >     // Omit the call to SetupComm to use the default queue sizes.
> >     // Get the current configuration.
> >
> >     fSuccess = GetCommState(hCom, &dcb);
> >
> >     if (!fSuccess)
> >     {
> >         // Handle the error.
> >         CloseHandle(hCom);
> >         return;
> >     }
> >
> >     // Fill in the DCB: baud=1200, 8 data bits, no parity, 1 stop bit.
> >
> >     dcb.BaudRate = CBR_1200;
> >     dcb.ByteSize = 8;
> >     dcb.Parity = NOPARITY;
> >     dcb.StopBits = ONESTOPBIT;
> >
> >        dcb.fAbortOnError = FALSE;
> >        dcb.fInX = FALSE;
> >        dcb.fOutX = FALSE;
> >        dcb.fOutxCtsFlow = FALSE;
> >        dcb.fOutxDsrFlow = FALSE;
> >        dcb.fDsrSensitivity = FALSE;
> >        dcb.fTXContinueOnXoff = FALSE;
> >        dcb.fRtsControl = RTS_CONTROL_ENABLE;
> >        dcb.fDtrControl = DTR_CONTROL_DISABLE;
> >
> >
> >     fSuccess = SetCommState(hCom, &dcb);
> >
> >     if (!fSuccess)
> >     {
> >         // Handle the error.
> >         CloseHandle(hCom);
> >         return;
> >     }
> >     unsigned long leidos,total;
> >
> >     COMMTIMEOUTS ct;
> >     memset(&ct,0,sizeof(COMMTIMEOUTS));
> > //    ct.ReadIntervalTimeout=MAXDWORD;
> > //    ct.ReadTotalTimeoutMultiplier=0;
> > //    ct.ReadTotalTimeoutConstant=0;
> >     SetCommTimeouts(hCom,&ct);
> >     COMSTAT ComStatNew;
> >     DWORD dwErrors;
> >
> >     total=0;
> >     char rxchar;
> >     while(!_kbhit())
> >     {
> >         leidos=0;
> >         while(!leidos && !_kbhit()){
> >                 fSuccess=ReadFile(hCom,&rxchar,1,&leidos,NULL);
> >         }
> >         if(fSuccess)
> >         {
> >             total+=leidos;
> >             cadena[leidos]='\0';
> >             printf("%d,\n",rxchar);
> >
> >         }
> >     }
> >
> >     CloseHandle(hCom);
> > }
> >
> >
> > felices fiestas!
> >
> > _________________________________________________________________
> > Windows Live Messenger, la nueva generación de tu MSN.
> > http://imagine-msn.com/minisites/messenger/default.aspx?locale=es-ar
> >
> >
> > _______________________________________________
> > Cconclase mailing list
> > Cconclase en listas.conclase.net
> >
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> >
>
> - --
> Jorge Luis Betancourt González
> E-Mail: betancourt.jorge en gmail.com (home)
>         mayragm en finlay.cmw.sld.cu (work/home)
> G-Talk: betancourt.jorge en gmail.com (jabber)
> Blog:   http://jorgelb.blogeasy.com
> Phone:  ++(53)(32)59440
> Linux User: 386271
> [El conocimiento humano pertenece al mundo]
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.4 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>
> iD8DBQFFkxe5/9sG/XUcjyYRAunoAKDbcazfWsSmRPypzt/Lh+NE5Sp/4QCfY4X8
> 21OuKyS3EOPpp+P4SA9GjGo=
> =ASWR
> -----END PGP SIGNATURE-----
>
>
>
> --
> Este mensaje ha sido analizado por MailScanner del Nodo Finlay, Camaguey,
> Cuba
> en busca de virus y se considera que está limpio.
>
>
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070112/aaa870f5/attachment.html>


Más información sobre la lista de distribución Cconclase