Page 1 of 1

Buzzer en CE 5.0

PostPosted: Wed Oct 23, 2013 12:13 pm
by gmart1
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.

Re: Buzzer en CE 5.0

PostPosted: Wed Oct 23, 2013 4:51 pm
by Antonio Linares
Prueba a usar la función Tone(), por ejemplo:

Tone( 500, 2 )

Re: Buzzer en CE 5.0

PostPosted: Wed Oct 23, 2013 6:10 pm
by gmart1
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.

Re: Buzzer en CE 5.0

PostPosted: Wed Oct 23, 2013 8:48 pm
by Antonio Linares
Igual tendras que usar un aviso visual tipo MsgInfo() en vez de un sonido

Re: Buzzer en CE 5.0

PostPosted: Thu Oct 24, 2013 7:19 pm
by gmart1
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.

Re: Buzzer en CE 5.0

PostPosted: Fri Oct 25, 2013 7:29 am
by Antonio Linares
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

Re: Buzzer en CE 5.0

PostPosted: Fri Jul 24, 2015 5:22 pm
by gmart1
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.

Re: Buzzer en CE 5.0

PostPosted: Sat Jul 25, 2015 12:14 pm
by Antonio Linares
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
 

Re: Buzzer en CE 5.0

PostPosted: Tue Jul 28, 2015 8:53 am
by gmart1
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.

Re: Buzzer en CE 5.0

PostPosted: Tue Jul 28, 2015 9:17 am
by cnavarro
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))
 

Re: Buzzer en CE 5.0

PostPosted: Tue Jul 28, 2015 9:33 am
by gmart1
Muchas gracias, he usado la clausula #define y ha generado el EXE.
Voy a probarlo en el ordenador de mano.

Re: Buzzer en CE 5.0

PostPosted: Tue Jul 28, 2015 10:53 am
by Antonio Linares
Gabriel,

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

Re: Buzzer en CE 5.0

PostPosted: Tue Aug 11, 2015 1:00 pm
by gmart1
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;
} 

Re: Buzzer en CE 5.0

PostPosted: Tue Aug 11, 2015 1:56 pm
by Antonio Linares
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 );
}
 

Re: Buzzer en CE 5.0

PostPosted: Tue Aug 11, 2015 4:12 pm
by gmart1
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.