spook Napisano Kwiecień 3, 2022 Udostępnij Napisano Kwiecień 3, 2022 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: 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: 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 More sharing options...
etet100 Kwiecień 4, 2022 Udostępnij Kwiecień 4, 2022 Rozwiązanie wygląda na strasznie przekombinowane. Może lepiej spróbować tego https://github.com/libusb/hidapi ? Link do komentarza Share on other sites More sharing options...
spook Kwiecień 4, 2022 Autor tematu Udostępnij Kwiecień 4, 2022 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 More sharing options...
etet100 Kwiecień 4, 2022 Udostępnij Kwiecień 4, 2022 Chodziło mi o całość czyli głównie sprzęt. Ale jeśli nie widzisz, że tam jest coś nie tak, to nie będę przekonywał. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
spook Kwiecień 6, 2022 Autor tematu Udostępnij Kwiecień 6, 2022 Mały postęp: napisałem już edytor ekranów i akcji dla klawiszy, wygląda mniej więcej tak: 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): Powoli, ale do przodu. Link do komentarza Share on other sites More sharing options...
spook Kwiecień 6, 2022 Autor tematu Udostępnij Kwiecień 6, 2022 No i napisane, oprogramowane i działa 🙂 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 More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »