xdb2usb – podłączenie klawiatury ADB do maca z USB

Translate original post with Google Translate

Dnia 8 listopada 2007 roku stworzyyłem mój pierwszy tak skomplikowany projekt. Zawsze wiedziałem (tak, tak, to się wie!), że jestem w stanie nie tylko coś zaprogramować, ale też coś skonstruować.

I oto jest!

Pierwszy wolny (od wolności) interfejs adb2usb pozwalający podłączyć stare klawiatury makowe adb do niemal dowolnego komputera wyposażonego w złącze usb*. Projekt zainspirowany przez projekt kbdbabel.

Jest zupełnie używalna ( jako że cały ten tekst napisałem właśnie na Apple Extended Keyboard II. Używam jej od tego czasu z powodzeniem do dziś.

Układ składa się z dwóch części:

jedna (attiny13) odpowiada za dekodowanie protokołu adb i przesyłanie danych przez złącze szeregowe bez żadnej interpretacji (typowy konwerter adb na serial);

druga (atmega8) czyta dane przesyłane szeregowo, przetwarza kody klawiszy ze standardu adb na standard usb, po czym przesyła dane przez usb do komputera.

Nie ma możliwości przepełnienia łącza szeregowego – zaimplementowane jest sterowanie przepływem typu “można przesyłać!” – jeśli strona usb (atmega8) jest gotowa do pobierania i przetwarzania danych.

Buforowanie klawiszy odbywa się wewnętrznie w klawiaturze. Nie ma potrzeby powtórnej implementacji buforowania.

Co działa:

Wszystkie zwykłe klawisze, klawiatura jest przełączana do trybu “3” co oznacza odróżnianie lewych i prawych klawiszy funkcyjnych w klawiaturach obsługujących ten tryb (w pozostałych powinno działać rozpoznawanie lewych klawiszy funkcyjnych); tryb “3” jest włączany po chwilowej nieaktywności (np. po powtórnym podłączeniu klawiatury).
Klawisze funkcyjne: f13 – mute, f14 – volume down, f15 – volume up

Nie działają:

Klawisz Power, caps lock – bo w klawiaturze nie działa standardowo, oraz NIE CIERPIĘ caps lock (w pracy mam wydłubany, w mini macu zablokowany w systemie), budzenie klawiaturą – jest wyłączone (ale zaimplementowane), bo system myśli że zmieniono klawiaturę i przestawia ją tak, że ~ (tylda) nie działa.

Do zrobienia:

  • programowe przełączanie pomiędzy makowym układem klawiszy a pecetowym (dotyczy f13-f15 oraz keypad)
  • być może uda się opanować budzenie przez klawiaturę
  • zamiana klawiszy alt i jabłko; tu jest szkopuł, bo klawiatura jest w stanie odróżnić lewy alt od prawego, ale lewe jabłko od prawego już nie … dotyczy układu w Windowsach, bo te odróżniają systemowo klawisze funkcyjne prawe od lewych, zwłaszcza alty.
  • zapalanie diodek odpowiednio do trybu pracy klawiatury (num lock, caps lock, scroll lock)

Oto:

Obrazki do druku są w rozdzielczości 300dpi.

Fuse bity dla attiny13: lfuse=0x7a, hfuse=0xff (domyślny)

Fuse bity dla atmega8: lfuse=0xdf, hfuse=0x99 (domyślny)

Schemat i płytkę zaprojektowałem tak, aby była kompatybilna z przyszłymi wersjami oprogramowania.

Jedyne co wydaje się niewykonalne na pierwszy rzut oka, to sterowanie diodami świecącymi w klawiaturze ze względu na brak połączenia zwrotnego do procesora attiny13. Jednak wydaje się, że jeśli to będzie konieczne, to jeden dodatkowy przewód do starej płytki załatwi sprawę, podczas, gdy w nowej będzie to uwzględnione.

Nie odpowiadam za jakiekolwiek uszkodzenia sprzętu wynikłe w wyniku montowania powyższego interfejsu! Ja swój zmontowałem i właśnie na nim piszę ten tekst – znaczy działa!

Na razie nie podaję kodów źródłowych; ukażą się wkrótce, po uporządkowaniu prototypowego kodu (który powstał na kolanie, “aby tylko działał”).

Czas tworzenia powyższego projektu od zera do momentu działania bez zarzutu – ok. 3 tygodni (etap pośredni – półdziałający prototyp zmontowany na jednym procesorze atmega8 gubiący bity ze względu na długą obsługę przerwań USB)

W projekcie użyłem doskonałej biblioteki avrusb do wyłącznie programowej obsługi usb. Ze względu na licencję jestem zobowiązany więc do umieszczenia kodu źródłowego.

Koszt części – ok. 15 zł – 5 piw!

  • attiny13 – 3-4 zł
  • atmega8 – 4-5 zł
  • rezystory, diody i rezonator- ok. 2 zł
  • płytka – tutaj różnie, można zmontować na uniwersalnej – ok 1 zł.
  • gniazdka – usb ok. 2 zł, ew. sam kabelek ok. 1 zł (do obcięcia), svideo ok 1 zł.

*) – nie działa z FreeBSD 5.4 i prawdopodobnie z innymi wersjami. Testowany na Debianie, MacOS X, Windows XP, działa bez zarzutu.


Top view

Widok z góry

Overview

Widok

PCB soldered

Zlutowana płytka

Fit in ISDN case

Umieszczony w obudowie od ISDN

Ready to work

Gotowy do pracy

Leave a Reply