1P by GN⁺ 12시간전 | ★ favorite | 댓글 1개
  • Rotary Phone Dial Linux Kernel Driver는 오래된 다이얼식 전화기를 리눅스의 evdev 입력 장치로 변환해주는 커널 모듈임
  • 해당 프로젝트는 단순한 예제 드라이버와 가상머신 기반 개발 환경을 제공해 교육 및 테스트 목적으로도 매우 유용함
  • 실제 하드웨어 없이도 개발 및 테스트가 가능하며, GPIO 시뮬레이션을 지원함
  • 거의 모든 키매핑 설정을 지원하며, 각국의 다양한 펄스 부호화 방식에도 대응 가능함
  • 표준 커널 모듈이기 때문에 손쉽게 리눅스 시스템에 확장 및 통합 가능함

Rotary Phone Dial Linux Kernel Driver 개요

  • 이 프로젝트는 오래된 회전식(로터리) 전화기의 다이얼을 리눅스 시스템의 표준 입력장치(예: 숫자패드)로 변환하는 커널 모듈
  • 다음과 같은 사람이 사용을 고려할 만함
    • 느린 속도의 다이얼링을 통해 숫자를 입력하고 싶은 경우
    • 예전 아날로그 전화기를 디지털 시대로 가져오고자 하는 사용자
    • 실제 하드웨어 없이 예제 커널 드라이버와 가상 개발/테스트 환경이 필요한 교육자
    • 기타 창의적 실험 목적 등

회로 연결법

  • 회전 다이얼은 기본적으로 BUSY(열림 상태)PULSE(닫힘 상태) 두 개의 스위치로 구성됨
    • 이 두 스위치는 임베디드 리눅스가 가능한 시스템의 GPIO 핀에 풀업저항과 함께 연결됨
  • 다이얼을 돌리면 BUSY 스위치가 닫힘 상태로 바뀌며, 다이얼이 원위치로 돌아오는 동안 PULSE 스위치가 반복적으로 열림/닫힘을 반복함
  • 연결 및 핀 배치는 국가나 제작사에 따라 다르므로, 멀티미터로 스위치 반응을 테스트하는 것이 권장됨
  • 펄스 신호의 듀티 싸이클(열림/닫힘 시간)디코딩 방식도 각 국가 및 제조사별로 상이함
    • 예: 독일은 펄스당 열림 62ms, 닫힘 38ms
    • 보통 한 번~아홉 번 펄스는 1~9, 열 번 펄스는 0 (스웨덴 등 예외 있음)
  • 불확실 시, 다이얼의 레이블을 확인하거나 테스트 필요함

사용법

  • 이 드라이버는 표준 커널 외부 모듈(out-of-tree kernel module)
  • 단계를 요약하면
    • 장치 트리에 rotary-dial 노드 추가, pulse-gpiosbusy-gpios를 실제 핀에 맵핑
    • 필요 시 linux,keycodes 속성으로 키코드 맵 변경
    • 커널 소스 경로(KDIR)를 환경 변수로 지정 후 빌드 및 설치, 모듈 적재
  • 커널 모듈이 로드되면 입력장치가 생성되어 숫자패드 동작을 하게 됨
  • evemu 도구로 입력 장치 속성 및 다이얼 이벤트 모니터링 가능

개발 및 테스트용 가상머신(VM)

  • 드라이버 개발 및 엔드 투 엔드 테스트를 위한 가상머신 환경을 제공함
    • 이 VM은 gpio-sim으로 시뮬레이션되는 busy/pulse GPIO를 devicetree에 패치하여 제공함
    • 사용자 공간에서 GPIO를 제어해 테스트 시나리오 구현 가능
  • Nix 패키지 매니저와 flakes 기능 활성화 후 VM 빌드 및 실행 가능
  • VM 내부에서는 바로 개발 셸에 로그인됨
  • 드라이버를 빌드한 후 모듈 로딩/언로딩도 지원됨
  • rotary_dialer 도구로 특정 펄스 수를 시뮬레이션해 다이얼 입력 테스트 가능
    • (스웨덴식 코딩 환경에서 3 펄스는 숫자 2로 인식됨 등)

테스트

  • 드라이버는 포괄적 테스트 수트를 함께 제공함
  • VM 환경에서 make test로 자동화된 케이스 실행 가능
    • 입력장치 동작 검증, 다이얼 숫자 입력 시 올바른 키코드 방출 확인, 잘못된 입력 처리 등 다양한 상황 점검 가능

메인라인 등록 여부

  • 개발자는 로터리 다이얼의 미래를 긍정적으로 보고 있지만, Linus Torvalds는 동의하지 않을 수 있음을 유머러스하게 언급함
Hacker News 의견
  • 70년대 후반에 HP41C 계산기로 회전식 전화 다이얼러를 직접 만들었던 기억 공유함, 비접점 리드 릴레이를 피에조 부저와 전화선에 연결했고, “synthetic programming”(문서화되지 않은 명령어)를 활용해 단시간 비프음을 내서 다이얼 펄스를 완성했단 경험담, 이름(알파벳 지원) 입력하면 번호를 찾고 바로 걸어주는 방식 사용했고, 10년 전 회사에서 Keith Jarrett을 만났을 때 사람들이 뮤지션인지 자주 헷갈렸던 일화와 자신은 오히려 HP-41C Synthetic Programming Manual 저자 맞냐고 물었더니 그가 놀라움과 기쁨을 표현했던 추억, 관련 링크로 책 정보synthetic programming 정보 첨부
    • 혹시 계산기에서 직접 그런 프로그램을 만들었는지 궁금함, 자신도 hp49g에서 직접 짰던 일 자랑, 1라인 디스플레이인 41c는 훨씬 대단한 도전이었을 것 같다는 의견
  • 회전식 전화기를 완전한 블루투스 헤드셋으로 개조한 경험 공유, 다이얼로도 번호를 누를 수 있게 만들었음, HN에서는 반응이 별로었지만 hackaday에 소개되어 뿌듯했고, 관련 프로젝트 링크개인 블로그 포스트 첨부, 블루투스 회전식 넘버패드 모드도 만들기 쉬울 것이라 생각하지만 시간이 부족한 상황
    • 요즘은 ESP32가 훨씬 경제적인 선택이지만 리눅스 커널 드라이버를 꼭 만들고 싶어서 직접 구현했던 경험담
  • 아이폰이 루머만 돌던 시절, 아이팟의 터치휠을 활용해 회전식 다이얼을 재현하면 재미있겠다고 제안했지만 모두에게 거절당했던 경험, 클래식 회전 감성을 위해 리눅스 박스를 세팅하고 싶다는 생각
    • 혼자가 아니었음을 밝힘, 실제로 Apple이 터치휠 회전식 다이얼 특허 등록했고, Steve Jobs도 발명자 명단에 포함됨, 본인과 Apple 동료도 거의 동일한 특허를 냈으나 결국 본인 특허는 만료되고 Steve의 특허만 남음, SF에서 술자리 중이었던 자신이 터치휠로 다이얼을 만드는 아이디어를 냈을 때 핀볼 게임의 물리엔진이 중요한 영감을 줬고, 그 아이디어가 특허위원회에서 인정받았던 경험, Steve의 특허와 차이가 있었지만 아이폰 특허 숫자 늘리기 전략도 있었을 것이라는 해석
    • 만약 ipod에 셀룰러 네트워킹만 붙여서 출시했다면 재미있는 대안 역사가 만들어졌을 것이라는 상상, 효율적인 타이핑 영상 링크도 소개
    • 터치 스크린에서 회전식 다이얼로 전화를 거는 앱이 분명 존재할 거라 추측
  • 드디어 누군가 회전식 전화기로 Dark Souls를 클리어하는 걸 시도한 것 같아 신남
    • Dreamcast의 낚싯대 컨트롤러로 Soul Calibur 플레이했던 추억이 떠오름
  • 시애틀 Connections Museum의 Sarah가 Asterisk 소프트 PBX와 연결해 구형 전화교환기에서 pulse signaling을 가능하게 한 드라이버를 만든 것이 연상됨, 설명 영상 링크도 소개
  • 이런 미니멀 드라이버 구현 보면서 실제 드라이버 코드는 아주 적어도 충분하지만, 커널 플래그나 메서드는 알아야 할 게 정말 많다는 점 인상적임, Rust로 재구현하고 싶었으나 필요한 바인딩이 준비되지 않아 아쉬웠다는 경험, 접근 방식과 겪은 어려움을 블로그 포스팅으로 남기는 것도 흥미로울 것이란 의견
    • 현재 Rust 바인딩이 지원되는 서브시스템 API가 소수라 충분히 진행하지 못했다고 고백, 내년에 지원이 더 성숙되면 다시 시도해서 경험을 공유하고 싶다는 바람
  • Hayes 호환 모뎀에서는 ATDT 대신 ATDP 명령어를 사용해 회전식 펄스 다이얼링이 가능했다는 추억
  • 재미있는 역사적 사실로 뉴질랜드 회전식 전화기의 숫자와 펄스 수가 반대로 매핑되었던 점 소개, 실제로 10-디짓 펄스 방식 사용
    • 기술적인 이유 설명, 초창기 기계식 전화 교환 설비인 rotary exchange에서 클러치 패드 마모 문제로 인해 전체 마모를 줄이기 위해 1번 다이얼시 9펄스 등 반대로 설계한 아이디어가 뉴질랜드에서 시작됨, 같은 방식을 노르웨이도 채택한 것으로 알고 있음, rotary system에 관한 위키백과 링크 첨부
  • DTMF(터치톤) 변환 버전 필요성 언급, 호주에서는 회전펄스를 터치톤으로 변환하는 작은 라인파워 박스 제작 사례가 있음, 이 덕에 일반 전화선을 사용할 때는 오래 쓸 수 있었으나 최근 건물은 전화선 자체가 없어져 아쉬움 표시
    • FXS/ATA에 연결해 voip 전화기로 활용은 여전히 가능, 1920년대 캔들스틱 전화기도 여전히 이 방식 덕분에 사용 중임
  • 이 글을 보는 시점에 마침 회전식 전화기를 책상에서 분해해두고 태엽을 감고 있는 중이어서 우연이 신기하게 느껴짐
    • 실제로 전화기가 분해된 채로 얼마나 오래 책상 위에 있었는지 궁금, 본인도 비슷한데 아마 2년 정도 된 것 같다는 공감