Brise

키보드 자료구조 본문

DIY/자작 키보드

키보드 자료구조

naudhizb 2017. 5. 22. 14:05
반응형


키보드에서 다양한 종류의 키맵을 구성하기 위하여 자료구조를 만들어야 한다.

기존 텍스트 에디터들은 충실하게 이와같은 기능을 구현하고 있는데 그 중 대표적인 예로 emacs를 들 수 있다.

Emacs에서는 여러개의 키맵을 구현하기 위하여 리스트형의 (모든 것을 리스트로 다루기 때문에) 키맵을 구성 한 뒤에 어떠한 키가 입력되면, 그 키에 맞는 키맵을 우선순위가 높은 순서대로 찾는다.

검색하는 키맵의 순서는 minor mode, major mode, 디폴트 키맵의 순서이며, 이를 통하여 다양한 기능들을 구현한다.

이러한 구조를 응용하여 임베디드 시스템에서 다양한 레이어를 사용할 수 있도록 해보자.


각 키보드 레이어는 2 가지의 배열로 구성될 수 있다.
1. 마스킹 배열: 이 레이어에서 지원하는 키를 마스킹 하여 이 레이어가 어떤 물리적 키를 지원하는지 표시한 배열
2. 키 배열 : 이 레이어에서 지원하는 키를 표시하여, 눌린 물리적 키와 마스킹 레이어를 비교하여 키가 눌렸을 때 이 레이어의 키 배열로부터 결과 배열로 값을 복사한다.

그리고 위의 각 키보드 레이어는 우선순위별로 나누어져 구현된다.


우선순위가 낮은 순서대로 배열하면

- 디폴트 키맵(qwerty)
- 쉬프트 키맵(QWERTY)
- 펑션 키맵(화살표 동작 등...)
- 커스텀 모드 키맵(?? 미정.)

와 같이 배열 할 수 있다.

** 캡스락의 동작에 대하여 알아 볼 것. 키보드의 캡스락이 어떤 구조로 동작하는지, 넘락과 스ㅡ롤 락 등의 스테이트는 어떻게 관리되는지에 대하여.


위의 레이어들을 구성하였을 때 키를 읽는 과정은 다음의 수도코드와 같이 실행 할 수 있다.

GPIO매트릭스를 스캔하여 물리적인 매트릭스의 값을 얻어낸다.
-> 물리적인 매트릭스 값을 논리값으로 변환한다.
-> 각 키보드 레이어를 우선순위가 높은 순으로 순회하며 마스킹 레이어와 비교, 값을 채워 넣는다.
-> * 주의 : 각 키에 대하여 눌린 값은 마스킹에 의하여 설정 된 후에는 0으로 내려가게 되므로 한 키에 대하여 2개의 동작을 동시에 하지 않는다.
-> 키를 모두 채워 넣은 후에 채워 넣어진 키에 대한 처리를 수행한다.

이 중에서 하드웨어에 의존적인 부분은 맨 처음 물리적인 매트릭스를 채우는 과정과, 키를 모두 채워 넣은 후 USB로 키값을 보내는 부분이 하드웨어에 의존적이다.

반응형
Comments