0
로지텍 마우스에 2바이트 데이터를 저장해봤다
general
요약
기사 전체 정리
- 로지텍 MX Vertical 마우스가 컴퓨터 사이를 물리적으로 오가니까, 이걸 초소형 USB 드라이브처럼 쓸 수 있지 않을까 하는 아이디어에서 시작된 삽질기임
- Logitech 마우스는 표준 USB HID 위에 자체 구축한 HID++ 2.0 프로토콜로 통신하는데, Rust로 직접 도구를 만들어서 마우스가 노출하는 피처를 열거해보니 총 33개가 나옴.
EnableHiddenFeatures나TemplateBytesNVS같은 흥미로운 이름들이 있었지만 대부분 문서화가 안 되어 있음 - 처음에 노린 건
PersistentRemappableAction(0x1c00) 피처였는데, macOS의 IOHIDManager가 긴 HID++ 리포트 포맷을 조용히 드롭해버림. 에러도 없고 설명도 없어서, 프로브 코드 잔뜩 짜놓고 빈 응답만 한참 쳐다본 끝에야 원인을 알게 됨 - 디바이스 이름 레지스터도 시도해봤는데, write 콜은 받아주면서 실제로는 완전히 무시하고 계속 "MX Vertical"만 반환함. 공감 가는 리액션이라는 원작자의 코멘트가 웃김
- 결국 유일하게 동작한 건 DPI 레지스터(0x2201)였음. 임의의 u16 값을 쓸 수 있고, 마우스 전원이 켜져 있는 동안에는 리시버를 다른 컴퓨터로 옮겨도 값이 유지됨
- 다만 이건 active DPI만 변경하는 거라 전원이 꺼지면 fallback 값으로 복원됨. 즉 진정한 persistent storage가 아니라 크로스 컴퓨터 세션 스코프 2바이트 저장소인 셈임
- 기본 DPI 값은 HID++로 노출되지 않는 펌웨어 영역에 저장되어 있거나, 벤더 전용 도구 혹은 서명된 커맨드로만 쓸 수 있는 것으로 추정됨
- 결과물은 객관적으로 쓸모없지만, HID++ 프로토콜 구조, macOS의 HID 디바이스 커널 레벨 관리 방식, 피처 테이블과 피처 인덱스의 차이 등을 직접 삽질하면서 배운 과정 자체가 핵심이었음
댓글
댓글
댓글을 불러오는 중...