C2C 를 키보드 콘트롤러로 사용하기 위한 펌웨어 소스입니다. 


소스코드의 원본은 GeekHack 에서 공제한 Phantom 키보드를 위한 소스코드입니다. 원본은 팬텀 프로젝트에 맞게 되어있어서 범용 키보드 컨트롤러로 사용하기엔 무리가 있기에 최소한의 소스 수정만으로 사용할 수 있도록 코드 수정을 했습니다. 

원본 소스코드는 GPLv2의 오픈소스이고, 제가 올린 소스 코드 역시 용도에 맞게 수정하고 배포하셔도 되겠습니다. 


1. 윈도우에서 소스코드를 컴파일 할 수 있는 환경을 만듭니다. WinAvr을 설치하시면 됩니다. http://www1.kbdmania.net/xe/data/6240715 리쿠님의 이 글을 참고 하세요. (리눅스 사용자는 알아서 잘 하시리라 믿습니다.)


2. tmk_keyboard_MOD_130908.zip  소스코드를 다운받으셔서 적당한 곳에 풉니다. 


3. 시작메뉴의 시작창에서 cmd 를 실행합니다. 커맨드 창을 여는 겁니다. 


4. 커맨드 창에서 소스코드 폴더 경로  ../keyboard/generic 으로 이동합니다. ([cd 경로...] 하는거 아시죠?)


5. generic 폴더에 있는 매트릭스코드표.txt 를 참조하셔서 메모장 등에서 keymap_ansi.h 를 열고 개조할 키보드에 맞는 매트릭스로 수정합니다. 매트릭스 지정을 위해 수정할 부분은 단지 이것 뿐입니다. 콤마를 빼먹던가 하는 오타가 나면 안됩니다. 정확히 입력해야합니다. 


6. 매트릭스 수정이 끝났으면 커맨드 창에서 firm을 입력하고 엔터. 그러면 코드를 컴파일하고 hex파일을 생성합니다. 매트릭스 수정에 오류가 없었다면  [generic_firm.hex]라는 파일이 생성되어 있을 것입니다. 


7. C2C에 생성된 펌웨어 generic_firm.hex를 로드합니다. 펌웨어 올리는 방법은 C2C매뉴얼을 참조해주세요. 


어때요. 참 쉽죠? 원본 코드로 마친가지로 쓸 수 있지만 전 좀 복잡하더라구요. 번거롭기는 하지만 최대한 직관적으로 사용 가능하도록 했습니다. 앞서 말씀드렸드시 오픈소스이므로, 좀 더 합리적인 방법으로 수정도 가능하겠습니다. 


추가로, C2C 핀맵은 아래와 같습니다. C2C를 보시면 기판 단자에 핀번호가 표시되어있어요. B0 이런식으로. 각 핀번호가 컬럼 로우  및 엘이디의 출력단이라고 보시면 되겠습니다. 


 Row pin configuration

 row: 0 1 2 3 4 5 6 7

 pin: B7 B6 B5 B4 B3 B2 B1 B0


 Column pin configuration

 col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

 pin: F0 F1 F4 F5 F6 F7 D7 D6 D5 D4 E6 D0 D1 D2 D3

 

 LED pin configuration

 scroll lock led : C7

 caps lock led : C6


+ 기존 매트릭스는 6 X 17 배열이었는데, 키보드는 대부분의 경우 8컬럼입니다. (8컬럼인 키보드기판을 6컬럼에 맞추기는 정말 어렵지요. 풀와이어링...) 그래서 범용성을 높이기 위해 8 X 15로 매트릭스를 변경하고, 핀맵도 약간 변경했습니다. 그러면서 살짝 버그수정도 했구요... 일단 실 키보드를 만들어서 지속적인 테스트를 해봐야겠지만... 위 핀맵은 새 소스코드를 적용한 것이고, 링크된 자료도 수정했습니다. 

+ 버그 수정. FN레이어가 동작하지 않는 문제가 있었는데 수정했습니다. 새 버전으로 업데이트 하세요. 2013.9.5.

+ 버그라고 하긴 어렵지만, 결과적으로 정상적인 동작을 안하는것과 마찬가지인 증상이라 수정하고 업데이트 했습니다. 경우에 따라 6키동시입력이 안되던 것을 수정했습니다. 오리지날 팬텀 키보드 역시 동일한 문제가 있을텐데 어떻게 대응했는지 모르겠군요. 대신 개조작업시 다이오드는 필히 적용해야합니다. 2013.9.8.


그럼, 참고하시기 바랍니다. 감사합니다. 


profile

(1) write down the problem;
(2) think very hard;
(3) write down the answer.

...... 참 쉽죠?