*.wav PC speaker

Тема в разделе "WASM.NT.KERNEL", создана пользователем Dj_Lemon, 18 мар 2011.

  1. Dj_Lemon

    Dj_Lemon New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    4
    Доброго времени суток!Недавно озадачил себя проблемой программирования драйверов и начал с достаточно простого но к сожалению ничего толком не получилось( помогите пожалуйста, объясните почему буфер не пишется в спикер? Или пишется а я этого не понимаю, как можно в этом разобраться? Заранее спасибо.
     
  2. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Вопрос неправильный вы задаете, не получите помощи так. Надо действовать по другому, делаете приложение собираете его, пытаетесь, что-то сделать, не получается пишите сюда, что не получалось, в каком месте, какая ошибка, без конкретики никто серьезный вам не ответит даже исходник смотреть ну будут.
     
  3. Dj_Lemon

    Dj_Lemon New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    4
    да в том то и де что не могу понять почему в порт не идёт сигнал всё компилица а ничего не происходит(
     
  4. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Где-то у меня был рабочий код, пищалки для спикера, щас найду. Я бы упростил пример до безобразия, чтобы было понятно, что происходит, сделайте код линейным, без всяких хитрых циклов. Возможно сигнал не правильно шлете.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Dj_Lemon
    А у вас спикер то физически присутствует? ))) А то последнее время его перестают в корпуса встраивать ...
     
  6. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Код (Text):
    1. #include "StdAfx.h"
    2. #include "drv_common.h"
    3.  
    4. PDRIVER_OBJECT DriverObject;
    5.  
    6. //constants
    7. int const TIMER_FREQUENCY = 1193167;
    8. int const OCTAVE = 2;
    9.  
    10. //notes
    11. int const PITCH_C = 523;
    12. int const PITCH_Cs = 554;
    13. int const PITCH_D = 587;
    14. int const PITCH_Ds = 662;
    15. int const PITCH_E = 659;
    16. int const PITCH_F = 698;
    17. int const PITCH_Fs = 740;
    18. int const PITCH_G = 784;
    19. int const PITCH_Gs = 831;
    20. int const PITCH_A = 880;
    21. int const PITCH_As = 998;
    22. int const PITCH_H = 1047;
    23.  
    24. //we need three sounds fo major arpedgio
    25. int const TONE_1 = TIMER_FREQUENCY/(PITCH_C * OCTAVE);
    26. int const TONE_2 = TIMER_FREQUENCY/(PITCH_E * OCTAVE);
    27. int const TONE_3 = (PITCH_G * OCTAVE);
    28.  
    29. int const DELAY = 0x1800000;
    30.  
    31. //time delay function
    32. void DO_DELAY ()
    33. {
    34.     int cycle = DELAY;
    35.     for(int i = 0; i < cycle; i++)
    36.     {
    37.        
    38.     }
    39.     return;
    40. }
    41.  
    42.  
    43. //sound functions
    44. void MakeBeep1 (int dwPitch)
    45. {
    46.     __asm
    47.     {
    48.         cli
    49.         mov al, 10110110b
    50.         out 0x43, al
    51.  
    52.         mov eax, dwPitch
    53.         out 0x42,al
    54.  
    55.         mov al, ah
    56.         out 0x42, al
    57.  
    58.         //switch on dynamic
    59.         in al, 0x61
    60.         or al, 11b
    61.         out 0x61, al
    62.  
    63.         sti
    64.     }
    65.  
    66.     //make a pause
    67.     DO_DELAY();
    68.  
    69.     __asm
    70.     {
    71.         cli
    72.         //switch of dynamic
    73.         in al,0x61
    74.         and al, 11111100b
    75.         out 0x61, al
    76.         sti
    77.     }
    78.     return;
    79. }
    80.  
    81. //next valid sound
    82. void MakeBeep2(int dwPitch)
    83. {
    84.     UCHAR val= 0;
    85.     int sound = 0;
    86.    
    87.     __asm
    88.     {
    89.         cli
    90.         mov val,10110110b
    91.     }
    92.     WRITE_PORT_UCHAR((PUCHAR)0x43,
    93.         (UCHAR)val);
    94.  
    95.     sound = dwPitch;
    96.     sound &= 0xff;
    97.  
    98.     WRITE_PORT_UCHAR((PUCHAR)0x42,sound);
    99.  
    100.     sound = dwPitch;
    101.     sound >> 8;
    102.     sound &= 0xff;
    103.  
    104.     WRITE_PORT_UCHAR((PUCHAR)0x42,sound);
    105.  
    106.     //switch on dynamic
    107.     val = READ_PORT_UCHAR((PUCHAR)0x42);
    108.     val |= 3;
    109.     val &= 0xff;
    110.     WRITE_PORT_UCHAR((PUCHAR)0x61,val);
    111.  
    112.     __asm
    113.     {
    114.         sti
    115.     }
    116.     DO_DELAY();
    117.  
    118.     __asm
    119.     {
    120.         cli
    121.     }
    122.  
    123.     int temp;
    124.     //switch off dynamic
    125.     temp = READ_PORT_UCHAR((PUCHAR)0x61);
    126.     __asm
    127.     {
    128.         mov eax, temp
    129.         and al, 11111100b
    130.         and eax, 0xff
    131.         mov temp, eax
    132.     }
    133.  
    134.     WRITE_PORT_UCHAR((PUCHAR)0x61,temp);
    135.  
    136.     __asm
    137.     {
    138.         sti
    139.     }
    140.  
    141.     return;
    142. }
    143.  
    144.  
    145. NTSTATUS
    146. DriverEntry(
    147.     IN PDRIVER_OBJECT driverObject,
    148.     IN PUNICODE_STRING RegistryPath
    149.     )
    150. {
    151.  
    152.     DbgPrint("facko");
    153.    
    154.     MakeBeep1(TONE_1);
    155.     MakeBeep2(TONE_2);
    156.  
    157.     //Прямой доступ к оборудованию используя функцию HalMakeBeep из модуля hal.dll
    158.     HalMakeBeep(TONE_3);
    159.     DO_DELAY();
    160.     HalMakeBeep(0);
    161.  
    162.     //return STATUS_SUCCESS;
    163.     return STATUS_DEVICE_CONFIGURATION_ERROR;
    164. ;
    165.  
    166. } // end DriverEntry()
    Вот вам простой рабочий код. Если, что-то не получается упрощайте. Усложнять будете потом, когда принцип будет работать.
     
  7. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    чтобы проверить работает ли спикер, вытащите всю память из компа и запустите его, спикер должен запищать.
     
  8. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Или просто вызвать Beep из kernel32.dll.
     
  9. Dj_Lemon

    Dj_Lemon New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    4
    да спикер есть...точно)а вот надо разбираться...
     
  10. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    можно пропищать так:
    printf("%c",0x7);
     
  11. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    В 7-ке например дрова beep.sys нет, поэтому эта ф-ция бесполезна.
     
  12. Dj_Lemon

    Dj_Lemon New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2011
    Сообщения:
    4
    нет у меня ХР, просто совсем не могу разобраться...может кто нь помоч просто оч нужно а времени сильно разбираться нету(спасибо большое..
     
  13. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    друг мой, на мягких подушках не въедешь в вечность. В таком случае тебе нужно в этот разделhttp://wasm.ru/forum/viewforum.php?id=26