Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 128
Poder: 24
emeceuy Va por buen camino
gracias por la respuesta !!!

la inicialzación está muy larga como para postearla, y si, necesito conocer dialogan entre si !

Utilizando el programa para espiar el puerto, deduje los parametros de la comunicacion (baudios, buffer, todo)... El programa espía cuando muestra una linea con la informacion (los bytes) y además describe la funcion... por ejemplo, cuando se setean la velocidad pone (algo)+CONTROL_SET_BAUD_RATE o algo así (que aparentemente son funciones propias de la API, y hay varias más)... yo comentaba que cuando espío como se comunica la aplicacion original, los comandos que envía (luego que está la comunicacion establecida) la funcion dice CONTROL, en cambio con el componente a través de delphi cuando envio informacion la funcion dice WRITE...

esa es una diferencia, y por eso preguntaba si no hay manera de escribir el puerto con la API directamente y que use la funcion CONTROL o lo que sea... que lio este !!!
__________________
Marcelo C.
Responder Con Cita
  #2  
Antiguo 29-11-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por emeceuy Ver Mensaje
gracias por la respuesta !!!

la inicialzación está muy larga como para postearla, y si, necesito conocer dialogan entre si !

Utilizando el programa para espiar el puerto, deduje los parametros de la comunicacion (baudios, buffer, todo)... El programa espía cuando muestra una linea con la informacion (los bytes) y además describe la funcion... por ejemplo, cuando se setean la velocidad pone (algo)+CONTROL_SET_BAUD_RATE o algo así (que aparentemente son funciones propias de la API, y hay varias más)... yo comentaba que cuando espío como se comunica la aplicacion original, los comandos que envía (luego que está la comunicacion establecida) la funcion dice CONTROL, en cambio con el componente a través de delphi cuando envio informacion la funcion dice WRITE...

esa es una diferencia, y por eso preguntaba si no hay manera de escribir el puerto con la API directamente y que use la funcion CONTROL o lo que sea... que lio este !!!

Ese (algo) es lo que necesitamos conocer que es, me atrevo a decir que son caracteres de control como los que te puse anteriormente, tal vez un Start of Text, o un Enquiry o un ACK, no se , esos caracteres son primordiales para que los equipos "platiquen" en el mismo idioma.

Lo que yo hago normalmente es tomar esos datos con hiperterminal y guardarlos en un archivo de texto para después hacer un "barrido" caracter por caracter y saber el valor decimal que le corresponde.

Ojala y puedas hacerlo y que postees lo que te manda, se que es largo, pero en este foro no se te cobra por palabra escrita .

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 30-11-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 128
Poder: 24
emeceuy Va por buen camino
si, puede ser, mañana posteo algo de la información que deslpiega... lo que si, he intentado hacerlo con el hiperterminal, pero si la aplicacion de comunicacion original abre el puerto el hiperterminal da error que no lo puede abrir, y al revés, lo mismo...

gracias por seguir este hilo e intentar darme una mano
__________________
Marcelo C.
Responder Con Cita
  #4  
Antiguo 30-11-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 128
Poder: 24
emeceuy Va por buen camino
un poco más...

DIFERENCIAS EN EL SETEO DE PARAMETROS
a pesar que unas lineas antes el retrieve está igual, al setear el handshake hay un par de parametros que no coinciden el del TComPort con el de la aplicacion original:

TComPort
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters) DOWN TRUE 0x0 84 00 00 00 11 13
Aplicacion original
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_CHARS: Set special characters) DOWN TRUE 0x0 1A 00 00 00 11 13

TComPort:
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information) DOWN TRUE 0x0 01 00 00 00 40 00 00 00 00 04 00 00 00 04 00 00
Aplicacion original
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information) DOWN TRUE 0x0 01 00 00 00 40 00 00 00 00 08 00 00 00 02 00 00

o sea, en los special chars y en el handshake hay alguna diferencia... variando todos los parametros del TComPort no logré que variara el valor de esos números, no se como cambiarlos !!! con el unico que encontré una diferencia fue con el 84 de los special chars, que logré cambiarlo a 58 si la pongo en true la propiedad conected (es decir que al compiar y ejecutar ya se conecte el puerto), pero 58 tampoco sirve, tiene que ser 1A !!!


DIFERENCIAS AL ENVIAR DATOS
Tanto al abrir la aplicación original como al abrir el puerto del TComPort de delphi, en "serial port monitor" (sniffer), dice en la columna funcion algo como:

IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_QUEUE_SIZE: Set queue size)
y lo mismo con el resto de los parametros, BAUDS, HANDSHAKE, etc, etc...

luego de todo el seteo de parámetros, los comandos al equipo se los manda con la funcion:

Aplicacion original
IRP_MJ_DEVICE_CONTROL
y la info que manda, por ejemplo es:
00 00 0B 00 30 00 EF 00 03 00 00 0B 00 07 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0

TComPort
puedo mandar la misma información, pero en la función en vez de aparecer IRP_MJ_DEVICE_CONTROL (como lo hace el programa original) aparece:
IRP_MJ_WRITE

y peor aún, con el TComPort aparece continuamente la espera de eventos, con datos 04 00 00 00:
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event)
aunque en el seteo de eventos del TComPort, comparando esos seteos con los de la aplicacion origianal están iguales...



la serie de eventos que le mando, queda algo asi (no puse los datos para no entreverar más):

IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) DOWN
IRP_MJ_WRITE DOWN
IRP_MJ_WRITE UP
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) UP
IRP_MJ_WRITE DOWN
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) DOWN
IRP_MJ_WRITE UP
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) UP
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) DOWN
IRP_MJ_WRITE DOWN
IRP_MJ_WRITE UP
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) UP
IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_WAIT_ON_MASK: Wait for event) DOWN


muchisimas gracias, como siempre... espero poder hacer funcionar esto

__________________
Marcelo C.

Última edición por emeceuy fecha: 30-11-2007 a las 14:16:17.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Puerto serial CLX bismarck_sierra Lazarus, FreePascal, Kylix, etc. 0 06-07-2004 21:55:22
Mi navigator esta loco nefy Varios 7 19-05-2004 16:58:44
Puerto serial fled Varios 2 28-04-2004 22:27:47
Puerto serial. danytorres Impresión 1 29-01-2004 16:51:42
me estoy volviendo loco haron Humor 6 04-09-2003 08:21:32


La franja horaria es GMT +2. Ahora son las 06:01:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi