Buzzer en CE 5.0
Buzzer en CE 5.0
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
Prueba a usar la función Tone(), por ejemplo:
Tone( 500, 2 )
Tone( 500, 2 )
Re: Buzzer en CE 5.0
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.
La he probado ahora directamente en el Scanpal 5100 y tampoco se oye.
Gracias por la ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
Igual tendras que usar un aviso visual tipo MsgInfo() en vez de un sonido
Re: Buzzer en CE 5.0
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
Prueba a usar la función PlaySound() que parece que puede servirte:
http://msdn.microsoft.com/en-us/library ... s.85).aspx
http://msdn.microsoft.com/en-us/library ... s.85).aspx
Re: Buzzer en CE 5.0
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
Gabriel,
Añade este código a tu PRG principal:
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
Re: Buzzer en CE 5.0
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.
%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
Prueba asi
O tambien
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
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.
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.
Re: Buzzer en CE 5.0
Muchas gracias, he usado la clausula #define y ha generado el EXE.
Voy a probarlo en el ordenador de mano.
Voy a probarlo en el ordenador de mano.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
Gabriel,
Se me pasó el quitar el IF() como muy bien ha hecho Cristobal
Se me pasó el quitar el IF() como muy bien ha hecho Cristobal
Re: Buzzer en CE 5.0
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.
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;
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Buzzer en CE 5.0
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:
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 );
}
Re: Buzzer en CE 5.0
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.
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.