Skocz do zawartości

Numpad jako macro-pad


Pomocna odpowiedź

Po zakończeniu poprzedniego projektu - klawiatury makro - zacząłem się zastanawiać, czy zwykły, kupny numpad można przerobić w łatwy sposób na klawiaturę-makro. Założenia sa takie:

  • Minimalizacja kosztów
  • Zwykły, dowolny, tani numpad na USB
  • Maksymalizacja funkcjonalności (skróty klawiaturowe, wpisywanie tekstu, uruchamianie programów etc.)
  • Przełączanie ekranów a'la Stream Deck (w ten sposób można zdefiniować kilka funkcji dla klawisza)

Na początku rozważyłem rozwiązanie czysto programowe. Byłoby to dla mnie o tyle łatwiejsze, że w kwestiach programistycznych mam o kilka rzędów więcej doświadczenia niż w elektronice.

Zgłębiłem temat dosyć dokładnie. Ogólnie sprawa rozbija się o trzy zagadnienia:

  • Możliwość przechwycenia wciśnięcia klawisza na niskim poziomie, zanim dotrze on do aktywnej aplikacji;
  • Możliwość sprawdzenia, z którego (fizycznego) urządzenia przyszło wciśnięcie klawisza - wtedy można pominąć klawisze "zwykłej" klawiatury i przetwarzać tylko klawisze dodatkowego numpada;
  • Możliwość porzucenia wciśniętego klawisza (skoro działa jako makro, to nie powinien działać "normalnie").

No i tu sprawa się komplikuje. W dużym skrócie, istnieją dwa mechanizmy systemowe: Raw Input i Keyboard Hook. Oba spełniają pierwszy punkt, ale tylko Raw Input spełnia drugi oraz tylko Keyboard Hook spełnia trzeci. Teoretycznie można próbować je pożenić, ale okazuje się, że czasami pierwszy wygeneruje informację przed drugim, a czasem po drugim; czasami pierwszy nie wygeneruje informacji, a drugi wygeneruje; czasami pierwszy wygeneruje dwie informacje, a drugi tylko jedną - i tak dalej. W praktyce skonstruowanie niezawodnego, czysto software'owego rozwiązania wygląda na długą, żmudną i niepewną drogę.

Podszedłem więc do tematu w nieco inny sposób. Zdecydowałem się zbudować małą, elektroniczną przelotkę, która łapałaby wciśnięcia klawiszy z numpada, ale dalej puszczała je już po wirtualnym porcie szeregowym. Na komputerze działałaby natomiast aplikacja-satelita, która nasłuchiwałaby na porcie szeregowym i wykonywała odpowiednie operacje.

Na chwilę obecną część elektroniczna wygląda następująco:

20220404_003230.thumb.jpg.50200197929e2f84d97b15a8cb9aa027.jpg

20220404_003244.thumb.jpg.b609f532228f49c15f9b06cc82a82941.jpg

Za kontroler będzie robił Teensy 3.2, którego kiedyś kupiłem "na zapas" i wylądował w przysłowiowej szufladzie - przyda się. Obok znajduje się miejsce na USB Host Shield 2.0 , z którym Teensy będzie komunikował się po SPI.

Połączenia zrobiłem na bazie informacji zawartych w Internecie, bo modulik dopiero do mnie idzie. W razie czego będę przelutowywał. Karteczkę z ostrzeżeniem zostawiłem na wszelki wypadek, bo domyślnie modulik puszcza na szynę USB 3.3V, a to trochę za mało dla większości urządzeń. Żeby puścił 5V, trzeba podpiąć odpowiedni pin do VIN na Teensy, tylko wtedy trzeba przeciąć jedną ścieżkę, żeby nie zewrzeć 3.3V z 5V. Stąd ostrzeżenie, żebym przypadkiem niczego nie usmażył 😉

Do zrobienia: podłączenie hosta USB i przetestowanie. Oprócz tego muszę zaprojektować i wydrukować jakąś prostą obudowę, żeby jakoś to wyglądało 😉

Część programowa na razie wygląda tak:

Numpad.thumb.png.14a78d995d0a899b14c072714645fa89.png

Tym razem szarpnę się i zrobię porządny edytor akcji. Aplikacja będzie opensource, więc gdyby ktoś chciał zrobić własny numpad makro np. z innym sposobem komunikacji, będzie miał 95% roboty z głowy. Okienko widoczne powyżej na rysunku będzie pełniło rolę ściągi i będzie pokazywało się po przytrzymaniu któregokolwiek klawisza numpada przez dłużej niż ~300ms. Mechanizm ten spełnił zadanie w przypadku mojej klawiatury makro, więc go powielam.

Projekt jest w trakcie. Części przyjdą jakoś we wtorek, jutro jeśli czas pozwoli będę szlifował część programową.

Link do komentarza
Share on other sites

W jaki sposób niskopoziomowa obsługa HID (plus implementacja obsługi klawiatury jako konkretnego urządzenia HID, bo nie znalazłem w tej bibliotece takowej) jest przekombinowana w stosunku do przeczytania raptem kilku bajtów przez port szeregowy? Do tego ostatniego mam nawet gotową bibliotekę w C# - nie muszę pisać żadnych wrapperów z C++ do C#...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Mały postęp: napisałem już edytor ekranów i akcji dla klawiszy, wygląda mniej więcej tak:

Editor.thumb.png.343b83290222ee984c7cc09d7c77902f.png

Projekt niedługo zopensource'uję, co będzie dobrą wiadomością dla wszystkich, którzy chcieliby zrobić własny macro numpad, bo mój program będzie można dosyć łatwo zintegrować z takim projektem. Bez modyfikacji będzie działał, gdy z numpada będą przychodziły informacje przez port szeregowy: bajt akcji (wciśnięcie / puszczenie klawisza) i bajt kodu klawisza. Ale program jest też bardzo modularny, więc z pewną znajomością C# można po prostu podmienić mechanizm detekcji wciśnięć klawiszy na dowolny inny, a reszta będzie wciąż działała (edytor, wykonywanie akcji itp.)

Do zrobienia:

  • W programie - wykonywanie akcji, podgląd bieżącego ekranu
  • Sprzętowo - wycięcie ścieżki na Host USB Shield (o ile już dotarła do domu ;))
  • Embedded - napisanie aplikacji na Teensy do konwersji wciśnięć przycisków z USB na port szeregowy.

Podgląd ekranu będzie realizowany po przytrzymaniu dowolnego klawisza i wygląda tak (roboczo):

Preview.thumb.png.2b335dd068abac6ebf8f4044aba6fc81.png

Powoli, ale do przodu.

Link do komentarza
Share on other sites

No i napisane, oprogramowane i działa 🙂

20220406_230824.thumb.jpg.356335cdf0cfc265064c3cf203e0f1ca.jpg

Na chwilę obecną:

  • Każdy klawisz może mieć swoją ikonę i opis
  • Aplikacja obsługuje dowolną liczbę ekranów przełączanych w dowolny sposób
  • Każdy klawisz może wywołać jedną lub więcej spośród akcji:
    • Wciśnięcie sekwencji klawiszy
    • Uruchomienie zadanej aplikacji
    • Przywołanie zadanego procesu na pierwszy plan
    • Przełączenie aktywnego ekranu

Zainteresowanych źródłami zapraszam na https://gitlab.com/spook/MacroNumpad/

Pozdrawiam -- Spook.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.