Buzzer en CE 5.0

Buzzer en CE 5.0

Postby gmart1 » Wed Oct 23, 2013 12:13 pm

hola, necesito que un Honeywell ScanPal 5100 emita un sonido después de leer un codigo de barras y comprobar que existe dicho codigo.
En el emulador suena usando MsgBeep y MessageBeep, pero en el Pocket no suena nada.
El pocket tiene instalado Windows CE 5.00 y en el panel de control hay un icono llamado Buzzer donde permite activar y desactivar el sonido de "System" y de "Scan", ya he probado con todas las combinaciones.
Creo que el problema puede ser que la función MsgBeep usa el driver del sonido y como este pocket solo tiene el altavoz no recibe la orden.
Espero sus comentarios.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Wed Oct 23, 2013 4:51 pm

Prueba a usar la función Tone(), por ejemplo:

Tone( 500, 2 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Wed Oct 23, 2013 6:10 pm

Es la primera función que usé y en el emulador (wincearm) no se oía, así que la descarté.
La he probado ahora directamente en el Scanpal 5100 y tampoco se oye.
Gracias por la ayuda.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Wed Oct 23, 2013 8:48 pm

Igual tendras que usar un aviso visual tipo MsgInfo() en vez de un sonido
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Thu Oct 24, 2013 7:19 pm

Ya le aparece al usuario una MsgInfo cuando se lee un codigo de barras que no está en la base de datos de artículos, pero en el Pocket no suena nada y el usuario sigue pasando el escaner por los siguientes artículos sin percatarse que en la pantalla hay un mensaje de error.
El problema ocurre porque en los artículos hay dos códigos de barras, el preimpreso del fabricante y una pegatina que tiene el código de barras correcto, y pasa a veces que el escaner lee el del fabricante.
La idea es descativar el pitido del escaner cuando lee el codigo de barras y que sea el programa el que de un pitido de aprobación si el código es correcto o un pitido de error cuando sea incorrecto.
He intentado usar la función Beep (), pero no la reconoce FiveWin PocketPC.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Fri Oct 25, 2013 7:29 am

Prueba a usar la función PlaySound() que parece que puede servirte:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Fri Jul 24, 2015 5:22 pm

Hola, he tenido que retomar este tema de hacer sonar un Scanpal 5100.
Antonio, la función PlaySound no sé como incorporarla en mi prg, al ser una función en C necesitaría que me explicaras un poco como puedo usarla en mi programa.
Gracias.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Sat Jul 25, 2015 12:14 pm

Gabriel,

Añade este código a tu PRG principal:

Code: Select all  Expand view
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SNDPLAYSOUND ) // ( <cSndName>, <nMode> )  --> <lSuccess>
{
   hb_retl( sndPlaySound( IF( HB_ISNUM( 1 ), ( LPSTR ) hb_parnl( 1 ), hb_parc( 1 ) ),
                        IF( hb_pcount() > 1, hb_parnl( 2 ), SND_ASYNC ) ) );
}

#pragma ENDDUMP
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Tue Jul 28, 2015 8:53 am

Hola, al ejecutar buildce.bat en el siguiente comando :

%vcdir%\bin\clarm -W3 -c /DARM /DUNICODE /I%hdir%\include /I%fwppc%\include icm.c

me da estos warning

icm.c
icm.prg(74) : warning C4013: 'IF' undefined; assuming extern returning int
icm.prg(74) : warning C4047: 'function' : 'const unsigned short *' differs in levels of indirection from 'int '
icm.prg(74) : warning C4024: 'sndPlaySoundW' : different types for formal and actual parameter 1

y al final al linkar

icm.obj : error LNK2019: unresolved external symbol IF referenced in function HB_FUN_SNDPLAYSOUND
icm.exe : fatal error LNK1120: 1 unresolved externals


No reconoce la función IF (), he copiado la función SNDPLAYSOUND tal cual me la puso Antonio y no encuentro error en la sintaxis.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby cnavarro » Tue Jul 28, 2015 9:17 am

Prueba asi

Code: Select all  Expand view


#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( SNDPLAYSOUND ) // ( <cSndName>, <nMode> )  --> <lSuccess>
{
   hb_retl( sndPlaySound( ( ( HB_ISNUM( 1 ) ) ? ( LPSTR ) hb_parnl( 1 ) | hb_parc( 1 ) ),
                        ( ( hb_pcount() > 1 ) ? hb_parnl( 2 ) | SND_ASYNC ) ) );
}

#pragma ENDDUMP
 


 


O tambien

Code: Select all  Expand view

#define IF(x,y,z) ((x)?(y):(z))
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buzzer en CE 5.0

Postby gmart1 » Tue Jul 28, 2015 9:33 am

Muchas gracias, he usado la clausula #define y ha generado el EXE.
Voy a probarlo en el ordenador de mano.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Tue Jul 28, 2015 10:53 am

Gabriel,

Se me pasó el quitar el IF() como muy bien ha hecho Cristobal
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Tue Aug 11, 2015 1:00 pm

Hola de nuevo, no he conseguido nada con la funcion SndPlaySound.
He buscado en Internet y parece ser que el Pocket no tiene tarjeta de sonido y solo es posible hacer sonar el Buzzer.
Para ello es necesario tener tu propia función y en este Post he encontrado una que parece ser que lo hace.
Necesito que me la pudierais traducir para usar en FiveWin.
Muchas gracias.

You can just write a stream interface driver to access some I/O ports.
There's a sample using 8253 buzzer, but the I/O ports should depend on your
BIOS setting.


Code: Select all  Expand view
 BOOL MyBeep(DWORD dwFreq, DWORD dwDuration)
{
_outp(0x43, 0xb6); // Set Buzzer
_outp(0x42, LOBYTE(0x1234dc / dwFreq)); // Frequency LSB
_outp(0x42, HIBYTE(0x1234dc / dwFreq)); // Frequency MSB
_outp(0x61, _inp(0x61) | 0x3); // Start beep
Sleep(dwDuration);
_outp(0x61, _inp(0x61) & 0xfc); // End beep
return TRUE;
} 
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Postby Antonio Linares » Tue Aug 11, 2015 1:56 pm

Gabriel,

Salvo que esté equivocado, _outp() e _inp() no están disponibles en aplicaciones de 32 bits.

De todas formas aqui tienes la función para Harbour:

Code: Select all  Expand view

HB_FUNC( MYBEEP ) // nFreq, nDuration
{
   _outp(0x43, 0xb6); // Set Buzzer
   _outp(0x42, LOBYTE(0x1234dc / hb_parnl( 1 ) ) ); // Frequency LSB
   _outp(0x42, HIBYTE(0x1234dc / hb_parnl( 1 ) ) ); // Frequency MSB
   _outp(0x61, _inp(0x61) | 0x3); // Start beep
   Sleep( hb_parnl( 2 ) );
   _outp(0x61, _inp(0x61) & 0xfc); // End beep
   hb_retl( TRUE );
}
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42080
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Buzzer en CE 5.0

Postby gmart1 » Tue Aug 11, 2015 4:12 pm

Muchas gracias Antonio,
es verdad las funciones _outp() e _inp() no están para 32 bits, he buscado alguna equivalente, pero parece que no se puede acceder directamente a los puertos según he leido.
Bueno, creo que no es posible hacer sonar el ScanPal 5100.

Un saludo.
gmart1
 
Posts: 80
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 8 guests