Udostępnij przez


Automatyczna konfiguracja podczas instalacji urządzenia

Na poniższej ilustracji przedstawiono przepływ danych podczas automatycznej konfiguracji po zainstalowaniu urządzenia.

diagram ilustrujący przepływ danych w autokonfiguracji po zainstalowaniu urządzenia.

  1. Po zainstalowaniu drukarki bufor inicjuje sterownik, wywołując DrvPrinterEvent i przekazując PRINTER_EVENT_INITIALIZE w wywołaniu.

  2. Sterownik używa interfejsów komunikacyjnych bidi , aby uzyskać dane interesujące go, w tym wartości dla opcji możliwych do zainstalowania, takich jak \Printer.Configuration.DuplexUnit:Installed i \Printer.Configuration.HardDisk:Installed.

  3. Interfejs komunikacyjny bidi wysyła zapytanie do monitora portów pod kątem wartości tych atrybutów. Monitor portów może mieć niektóre dane żądane w pamięci podręcznej. W celach ilustracyjnych w poniższych krokach przyjęto założenie, że wartość \Printer.Configuration.HardDisk:Installed znajduje się w pamięci podręcznej monitora portów, ale wartość \Printer.Configuration.DuplexUnit:Installed nie jest.

  4. Jeśli monitor portów ma pamięć podręczną i zapisał w niej co najmniej jedną żądaną wartość, monitor portów zwraca te wartości do dwukierunkowego interfejsu komunikacyjnego. W przypadku wszystkich wartości, które nie są w pamięci podręcznej, monitor portów zwraca ERROR_NO_DATA. Należy pamiętać, że zapytanie bidi może zakończyć się niepowodzeniem, jeśli monitor portu implementuje pamięć podręczną, ale pamięć podręczna jest pusta. Aby zapobiec temu problemowi, monitor portów powinien powiadomić interfejs komunikacyjny bidi po wypełnieniu jego pamięci podręcznej.

  5. Interfejs komunikacyjny bidi przekazuje informacje odbierane z monitora portów do sterownika. Jeśli wywołanie interfejsu komunikacyjnego bidi do monitora portów powoduje niepowodzenie z jakiegokolwiek powodu, sterownik powinien ustawić wartości domyślne dla tych atrybutów. Gdy tylko monitor portów otrzymuje informacje o żądanych atrybutach, powinien wysłać powiadomienie zawierające te informacje do interfejsu dwukierunkowej komunikacji.

    Sterownik aktualizuje rejestr wartością \Printer.Configuration.HardDisk:Installed (uzyskaną z pamięci podręcznej monitora portów) i wartością domyślną \Printer.Configuration.DuplexUnit:Installed.

  6. Monitor portu wysyła zapytanie do urządzenia o obie wartości, w tym wartość buforowaną (\Printer.Configuration.HardDisk:Installed).

  7. Urządzenie wysyła swoje wartości dla atrybutów zapytanych do monitora portów. W przypadku każdego atrybutu, którego wartość nie była jeszcze obecna w pamięci podręcznej lub której wartość różni się od tego w pamięci podręcznej, monitor portu umieszcza nową wartość w pamięci podręcznej.

  8. Monitor portów wysyła do buforu powiadomienie zawierające wszystkie wartości, które wcześniej nie znajdowały się w pamięci podręcznej lub które uległy zmianie. W tym przykładzie monitor portu wysyła powiadomienie do spoolera dotyczące nowej wartości \Printer.Configuration.DuplexUnit:Installed. Należy pamiętać, że jeśli wartość buforowana jest taka sama jak nowa wartość odebrana z urządzenia, monitor portu nie wysyła powiadomienia do buforu.

  9. Bufor odpowiada na powiadomienie z monitora portów, wywołując metodę DrvPrinterEvent i przekazując PRINTER_EVENT_CONFIGURATION_UPDATE wraz z informacjami o wszystkich zmienionych wartościach w wywołaniu. Ta akcja służy dwóm celom: powiadamianie sterownika o wartości dowolnego atrybutu, którego wartość została umieszczona w pamięci podręcznej po raz pierwszy lub której wartość została zmieniona (\Printer.Configuration.DuplexUnit:Installed, w tym przykładzie); w celu zaktualizowania rejestru. Dla każdej drukarki bufor serializuje swoje wywołania do DrvPrinterEvent, aby nie było konieczne zabezpieczenie współbieżności sterownika.

    Ponieważ informacje o urządzeniu są przechowywane w rejestrze, sterownik może spełniać wywołania aktualizacji informacji o interfejsie użytkownika lub możliwościach urządzenia bez konieczności bezpośredniej komunikacji z urządzeniem fizycznym. Sterownik może być pewien, że informacje przechowywane w rejestrze są poprawne, ponieważ powiadomienia o zmianie wyzwalają sterownik w celu wykonywania zapytań dotyczących urządzenia i aktualizowania stanu konfiguracji urządzenia.

  10. Sterownik aktualizuje interfejs użytkownika zgodnie z najnowszą konfiguracją.

    Sterownik może określić, kiedy wystąpiła zmiana podczas instalacji urządzenia, ponieważ komunikat powiadomienia niesie ze sobą zmienioną wartość. Jeśli jednak powiadomienie jest zbyt duże, aby było wysyłane za pośrednictwem mechanizmu powiadomień, powiadomienie będzie miało co najmniej jedno wystąpienie ReducedSchema, z których każde wskazuje, że cecha urządzenia uległa zmianie, ale bez żadnych szczegółów nowej wartości.