Доброго времени суток!Недавно озадачил себя проблемой программирования драйверов и начал с достаточно простого но к сожалению ничего толком не получилось( помогите пожалуйста, объясните почему буфер не пишется в спикер? Или пишется а я этого не понимаю, как можно в этом разобраться? Заранее спасибо.
Вопрос неправильный вы задаете, не получите помощи так. Надо действовать по другому, делаете приложение собираете его, пытаетесь, что-то сделать, не получается пишите сюда, что не получалось, в каком месте, какая ошибка, без конкретики никто серьезный вам не ответит даже исходник смотреть ну будут.
да в том то и де что не могу понять почему в порт не идёт сигнал всё компилица а ничего не происходит(
Где-то у меня был рабочий код, пищалки для спикера, щас найду. Я бы упростил пример до безобразия, чтобы было понятно, что происходит, сделайте код линейным, без всяких хитрых циклов. Возможно сигнал не правильно шлете.
Dj_Lemon А у вас спикер то физически присутствует? ))) А то последнее время его перестают в корпуса встраивать ...
Код (Text): #include "StdAfx.h" #include "drv_common.h" PDRIVER_OBJECT DriverObject; //constants int const TIMER_FREQUENCY = 1193167; int const OCTAVE = 2; //notes int const PITCH_C = 523; int const PITCH_Cs = 554; int const PITCH_D = 587; int const PITCH_Ds = 662; int const PITCH_E = 659; int const PITCH_F = 698; int const PITCH_Fs = 740; int const PITCH_G = 784; int const PITCH_Gs = 831; int const PITCH_A = 880; int const PITCH_As = 998; int const PITCH_H = 1047; //we need three sounds fo major arpedgio int const TONE_1 = TIMER_FREQUENCY/(PITCH_C * OCTAVE); int const TONE_2 = TIMER_FREQUENCY/(PITCH_E * OCTAVE); int const TONE_3 = (PITCH_G * OCTAVE); int const DELAY = 0x1800000; //time delay function void DO_DELAY () { int cycle = DELAY; for(int i = 0; i < cycle; i++) { } return; } //sound functions void MakeBeep1 (int dwPitch) { __asm { cli mov al, 10110110b out 0x43, al mov eax, dwPitch out 0x42,al mov al, ah out 0x42, al //switch on dynamic in al, 0x61 or al, 11b out 0x61, al sti } //make a pause DO_DELAY(); __asm { cli //switch of dynamic in al,0x61 and al, 11111100b out 0x61, al sti } return; } //next valid sound void MakeBeep2(int dwPitch) { UCHAR val= 0; int sound = 0; __asm { cli mov val,10110110b } WRITE_PORT_UCHAR((PUCHAR)0x43, (UCHAR)val); sound = dwPitch; sound &= 0xff; WRITE_PORT_UCHAR((PUCHAR)0x42,sound); sound = dwPitch; sound >> 8; sound &= 0xff; WRITE_PORT_UCHAR((PUCHAR)0x42,sound); //switch on dynamic val = READ_PORT_UCHAR((PUCHAR)0x42); val |= 3; val &= 0xff; WRITE_PORT_UCHAR((PUCHAR)0x61,val); __asm { sti } DO_DELAY(); __asm { cli } int temp; //switch off dynamic temp = READ_PORT_UCHAR((PUCHAR)0x61); __asm { mov eax, temp and al, 11111100b and eax, 0xff mov temp, eax } WRITE_PORT_UCHAR((PUCHAR)0x61,temp); __asm { sti } return; } NTSTATUS DriverEntry( IN PDRIVER_OBJECT driverObject, IN PUNICODE_STRING RegistryPath ) { DbgPrint("facko"); MakeBeep1(TONE_1); MakeBeep2(TONE_2); //Прямой доступ к оборудованию используя функцию HalMakeBeep из модуля hal.dll HalMakeBeep(TONE_3); DO_DELAY(); HalMakeBeep(0); //return STATUS_SUCCESS; return STATUS_DEVICE_CONFIGURATION_ERROR; ; } // end DriverEntry() Вот вам простой рабочий код. Если, что-то не получается упрощайте. Усложнять будете потом, когда принцип будет работать.
чтобы проверить работает ли спикер, вытащите всю память из компа и запустите его, спикер должен запищать.
нет у меня ХР, просто совсем не могу разобраться...может кто нь помоч просто оч нужно а времени сильно разбираться нету(спасибо большое..
друг мой, на мягких подушках не въедешь в вечность. В таком случае тебе нужно в этот разделhttp://wasm.ru/forum/viewforum.php?id=26