Buzzer en CE 5.0

Post Reply
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Buzzer en CE 5.0

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post by Antonio Linares »

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

Tone( 500, 2 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post by Antonio Linares »

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

Antonio Linares
www.fivetechsoft.com
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post by Antonio Linares »

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

http://msdn.microsoft.com/en-us/library ... s.85).aspx
regards, saludos

Antonio Linares
www.fivetechsoft.com
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post by Antonio Linares »

Gabriel,

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

Code: Select all

#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
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Buzzer en CE 5.0

Post by cnavarro »

Prueba asi

Code: Select all


#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

#define IF(x,y,z) ((x)?(y):(z))
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post by gmart1 »

Muchas gracias, he usado la clausula #define y ha generado el EXE.
Voy a probarlo en el ordenador de mano.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post by Antonio Linares »

Gabriel,

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

Antonio Linares
www.fivetechsoft.com
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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

 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;
} 
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Buzzer en CE 5.0

Post 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

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
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Buzzer en CE 5.0

Post 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.
Post Reply