wangen11
驱动牛犊
驱动牛犊
  • 注册日期2007-10-20
  • 最后登录2008-10-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望16点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1297回复:4

如何让USB driver内让系统发声

楼主#
更多 发布于:2008-06-12 17:08
各位:请教一件事情,我在写一个USB摄像头的driver,我想在driver内让系统发出beep的声音,要怎么写?用哪个函数还是?
wangen11
驱动牛犊
驱动牛犊
  • 注册日期2007-10-20
  • 最后登录2008-10-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望16点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-13 12:57
有没有那位指导一下?
wangen11
驱动牛犊
驱动牛犊
  • 注册日期2007-10-20
  • 最后登录2008-10-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望16点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-18 00:06
自己顶一下
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-06-23 15:08
好像是 HalMakeBeep
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-06-23 15:16
;@echo off
;goto make

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;
;  beeper - Kernel Mode Driver
;  Makes beep thorough computer speaker
;
;  Written by Four-F (four-f@mail.ru)
;
;  WARNING: Tested W2000 & XP only!
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\w2k\ntstatus.inc
include \masm32\include\w2k\ntddk.inc

include \masm32\include\w2k\hal.inc

includelib \masm32\lib\w2k\hal.lib

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                           U S E R   D E F I N E D   E Q U A T E S                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

TIMER_FREQUENCY    equ 1193167            ; 1,193,167 Hz
OCTAVE            equ 2

;PITCH_A        equ 440                ;  440,00 Hz
;PITCH_As        equ 446                ;  466,16 Hz
;PITCH_H        equ 494                ;  493,88 Hz
PITCH_C            equ 523                ;  523,25 Hz
PITCH_Cs        equ 554                ;  554,37 Hz
PITCH_D            equ 587                ;  587,33 Hz
PITCH_Ds        equ 622                ;  622,25 Hz
PITCH_E            equ 659                ;  659,25 Hz
PITCH_F            equ 698                ;  698,46 Hz
PITCH_Fs        equ 740                ;  739,99 Hz
PITCH_G            equ 784                ;  783,99 Hz
PITCH_Gs        equ 831                ;  830,61 Hz
PITCH_A            equ 880                ;  880,00 Hz
PITCH_As        equ 988                ;  987,77 Hz
PITCH_H            equ 1047            ; 1046,50 Hz

; We are going to play c-major chord

TONE_1            equ TIMER_FREQUENCY/(PITCH_C*OCTAVE)
TONE_2            equ TIMER_FREQUENCY/(PITCH_E*OCTAVE)
TONE_3            equ (PITCH_G*OCTAVE); for HalMakeBeep

DELAY            equ 1800000h        ; for my ~800mHz machine

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                           U S E R   D E F I N E D   M A C R O S                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DO_DELAY MACRO
    ; Silly method, but it works ;-)
    mov eax, DELAY
    .while eax
        dec eax
    .endw
ENDM

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                          C O D E                                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.code

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                         MakeBeep1                                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MakeBeep1 proc dwPitch:DWORD

    ; Direct hardware access

    cli

    mov al, 10110110y
    out 43h, al         ; Timer 8253-5 (AT: 8254.2).

    mov eax, dwPitch
    out 42h, al

    mov al, ah
    out 42h, al

    ; speaker ON
    in al, 61h
    or  al, 11y
    out 61h, al

    sti

    DO_DELAY

    cli

    ; speaker OFF
    in al, 61h
    and al, 11111100y
    out 61h, al

    sti

    ret

MakeBeep1 endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                            MakeBeep2                                              
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MakeBeep2 proc dwPitch:DWORD

    ; Hardware access via HAL using *_PORT_UCHAR/*_PORT_UCHAR functions

    cli

    invoke WRITE_PORT_UCHAR, 43h, 10110110y

    mov eax, dwPitch
    invoke WRITE_PORT_UCHAR, 42h, al
    mov eax, dwPitch
    invoke WRITE_PORT_UCHAR, 42h, ah

    ; speaker ON
    invoke READ_PORT_UCHAR, 61h
    or  al, 11y
    invoke WRITE_PORT_UCHAR, 61h, al

    sti

    DO_DELAY    

    cli

    ; speaker OFF
    invoke READ_PORT_UCHAR, 61h
    and al, 11111100y
    invoke WRITE_PORT_UCHAR, 61h, al

    sti

    ret

MakeBeep2 endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                       DriverEntry                                                
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING

    invoke MakeBeep1, TONE_1
    invoke MakeBeep2, TONE_2

    ; Hardware access via hal.dll function HalMakeBeep
    invoke HalMakeBeep, TONE_3
    DO_DELAY
    invoke HalMakeBeep, 0

    mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
    ret

DriverEntry endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                                                                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

end DriverEntry

:make

set drv=beeper

\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj

del %drv%.obj

echo.
pause
游客

返回顶部