Page 1 of 1

DUDA

Posted: Fri Jun 09, 2006 3:14 pm
by mamartin
Hola,

Me gustaría saber si alguien tiene un problema parecido y sabe como solucionarlo.
Estoy intentando imprimir via bluetooth, para ello cuento con mi pocket (tengo una HP iPAQ serie hx2100 con windows mobile 5.0) y una impresora STAR DP8340 con un adaptador bluetooth conectado a ella.
(com8: -> puerto de salida de la pocket y com5:->puerto de entrada)

Utilizo la forma de imprimir que aparece en el ejemplo bluetoth.prg

El problema es que al hacer:

local hOut := CreateFile( "COM8:",;
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )

El valor de hOut casi siempre es negativo (-10244536370,-1046546440...)
y entonces no me imprime, sin embargo de vez en cuando el valor del descriptor de fichero si que es positivo y si que me imprime.

¿Cual puede ser la causa de que me de estos valores negativos y no me de un positivo a la primera?Sobre todo esto ocurre cuando apago la pocket y la vuelvo a encender.

¿Puede ser que cambiando alguno de los atributos de la función CreateFile funcione mejor?

Agradecería cualquier opinión ya que estoy un poco perdido

Muchas gracias

Posted: Fri Jun 09, 2006 5:00 pm
by Biel EA6DD
hOut := CreateFile( "COM6:",GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
Yo lo utilizo igual que tu, y no me da problemas. Tambien uso impresora STAR DP8340 con un adaptador bluetooth (BlueTake) el pocketPC UNITECH.
Siento no poder ayudarte, pero tal cual lo dienes debiera de funcionar.

Has probado a imprimir con algun otro software para comprobar que no te de el mismo problema.

mamartin

Posted: Mon Jun 12, 2006 7:58 am
by mamartin
Hola Biel,

El problema de que a veces no me imprima puede ser del writeByte()???

Lo digo porque he añadido un bucle para forzar que me devuelva un descriptor de fichero positivo:

DO WHILE hOut <0 .and. nVeces <= 10
hOut:=CreateFile(......
nVeces++
ENDDO

así siempre me devuelve un descriptor positivo, pero aun así hay veces que tampoco me imprime, por eso pienso que el problema me lo da el WriteByte(), pero no se muy bien como solucionarlo, hay que envíar un número determinado de bytes a la impresora???hay que vaciar el buffer, como se haria???

Muchas gracias!!

Posted: Mon Jun 12, 2006 9:00 am
by Biel EA6DD
Hola,
vamos por partes, el tema del descriptor de fichero positivo, veo que ya lo tienes resuelto, de todas formas me parece estraño. A mi si la impresora esta conectada simpre me devuelve numero positivo.

Referente al WriteByte, yo si tuve problemas con el vaciado de buffer, parece que lo envia por bloques y hasta que no tiene un bloque completo no envia a la impresora. Y pasa que a veces me quedaba parte del listado pendiente de imprimir, probe haciendo un flush del puerto, pero no funciona, la solucion que uso es al final del listado enviarle un ascii no imprimible, para asegurarme de que el buffer se llena y lo envia a la impresora.

Code: Select all

//-------------------------
FUNCTION SendText( cText )
//-------------------------
   LOCAL i, hOut := CreateFile( "COM6:",GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL )
   IF hOut==-1
      MsgStop('No pudo abrise el puerto de impresora')
   ELSE
      FOR i:= 1 TO Len( cText )
         WriteByte( hOut, Asc( SubStr( cText, i, 1 ) ) )
      NEXT
      FOR i:=1 TO 64
         WriteByte( hOut, 27)
      NEXT
      CloseHandle( hOut )
   ENDIF
RETURN NIL