12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- (* Aos, Copyright 2001, Pieter Muller, ETH Zurich *)
- MODULE Beep; (** AUTHOR "pjm"; PURPOSE "PC speaker driver"; *)
- IMPORT Kernel32, Kernel(* , KernelLog*) ;
- CONST
- (** Sound the PC speaker continuously at the specified frequency. Use 0 to switch off the sound. Not sharable. *)
- TYPE
- Beeper = OBJECT
- VAR hz: WORD;
- beep: BOOLEAN;
- PROCEDURE & Init*;
- BEGIN
- (*KernelLog.String("Beep:Beeper.Init"); KernelLog.Ln;*)
- beep := FALSE;
- END Init;
- PROCEDURE On( hz: WORD );
- BEGIN {EXCLUSIVE}
- SELF.hz := hz; beep := TRUE;
- END On;
- PROCEDURE Off;
- BEGIN {EXCLUSIVE}
- beep := FALSE;
- END Off;
- PROCEDURE Beep;
- VAR retBOOL: Kernel32.BOOL; (* Dan 09.11.05 *)
- BEGIN
- (*KernelLog.String("Beeper.Beep"); KernelLog.Ln; *)
- LOOP
- WHILE (beep) DO retBOOL :=Kernel32.Beep( hz, 50 ); END;
- BEGIN {EXCLUSIVE}
- AWAIT( beep );
- END;
- END;
- END Beep;
- BEGIN {ACTIVE}
- (*KernelLog.String("Beep:Beeper.Active"); KernelLog.Ln; *) Beep();
- END Beeper;
- VAR
- beep: Beeper;
- PROCEDURE Beep*( hz: WORD );
- VAR s: SET;
- BEGIN
- IF (hz # 0) THEN
- IF beep = NIL THEN NEW( beep ) END;
- beep.On( hz )
- ELSE
- IF beep # NIL THEN beep.Off(); END;
- END;
- END Beep;
- PROCEDURE Test*;
- VAR timer: Kernel.Timer;
- BEGIN
- NEW(timer);
- Beep( 2000 ); timer.Sleep(1000); Beep(0);
- END Test;
- PROCEDURE TestOn*;
- BEGIN
- Beep( 2000 );
- END TestOn;
- PROCEDURE TestOff*;
- BEGIN
- Beep( 0 );
- END TestOff;
- END Beep.
- System.Free Beep ~
- Beep.TimerTest
- Beep.Test
- Beep.TestOn
- Beep.TestOff
- ~
|