버튼이 없고 하나의 축(Z)만 있는 조이스틱(맞춤형 하드웨어)을 교정하고 싶습니다. 나는 evtest를 사용하여 이동 범위, 즉 최소/최대 값과 대략 범위의 중간에 있는 중심(조이스틱이 배치된 지점)을 읽습니다. [min, center, max] = [ 2028, 3228, 4225] .
그런 다음 evdev-joystick --e를 사용하여 테스트 목적으로 이러한 최소/최대 값과 fuzz = 100을 적용했습니다(불감대 값을 적용하는 방법을 잘 모르겠습니다. 이 지점이 값이 0을 반환해야 하는 지점인가요? 제 경우에는 3228이었습니다. evdev-joystick은 일부 백분율을 표시하지만 그것이 무엇을 의미하는지 이해하지 못합니다. 데드존 값 아래의 모든 것을 무시합니다. 하지만 그것은 내가 기대하는 것이 아닙니다... 데드존은 주변의 두 값으로 구성되어야 합니다. center , 중앙 주변의 백분율이 맞죠?
evtest를 다시 실행하면 evdev-joystick을 사용하여 설정한 새 값이 요약에 표시되지만 흐릿한 값만 효과가 있는 것 같습니다. 이동 범위 내에서 최소/최대 값을 설정하면 해당 새 범위 밖의 이벤트를 얻을 수 있습니다. 다양한 불감대 값(0, 3228, 거의 최대값...)을 시도했지만 아무것도 작동하지 않았습니다. 어느 정도 범위나 중심 보정이 있을 것으로 예상했는데, evtest가 처음에 보여주는데도 캘리브레이션을 무시하고 있는 것 같습니다(블러 외에도 블러 범위 내에서 연속 값이 나오지 않습니다).
evtest는 최소/최대/불감대 교정을 무시하고 원시 값을 제공해야 합니까? 교정을 테스트하려면 다른 도구를 사용해야 합니까? 그런데 명령줄 도구만 사용할 수 있습니다.
또한 이전 조이스틱 API를 사용하기 위해 jstest 및 jscal을 사용해 보았으며 jscal은 min/max/center/blur 값이 자동으로 저장되고 보정 jstest가 가능한 대화형 보정을 제공하므로 실제로 새로운 조이스틱 API보다 훨씬 좋아 보입니다. 다음 명령을 사용하여 테스트한 결과 원래 범위는 [-32767, 0, 32767]로 수정되었습니다. 불행하게도 이전 Joystick API가 가까운 시일 내에 완전히 제거될까 두렵기 때문에 evdev API만 사용할 수 있습니다.
편집하다:도구의 코드를 파헤쳐보니 다음 설명이 있는 input.h uapi에 있는 input_absinfo 구조를 사용합니다.
* Note that input core does not clamp reported values to the
* [minimum, maximum] limits, such task is left to userspace.
따라서 evtest 도구는 고정되지 않으므로 범위 수정이 없습니다. 하지만 이 파일의 평면 정의는 여전히 명확하지 않습니다.
* @flat: values that are within this value will be discarded by
* joydev interface and reported as 0 instead.
이 값 안에 값이 있나요? ? Joydev 인터페이스? 이것은 이전 API의 일부가 아닌가요?
편집 2:이전 jstest 도구는 보정 계수를 계산하고 이를 고정하는 Joydev 장치 드라이버에 의존하기 때문에 보정 값을 표시하는 것으로 보입니다. Evtest는 Joydev를 사용하지 않으므로 "원시" 값은 사용되지 않습니다. 그럼 캘리브레이션 후에는 어떻게 해야 할까요? SDL2 라이브러리를 사용하는 게임을 본 적이 있습니다. evdev-joystick으로 캘리브레이션한 후 Joydev에서 제공하는 기능(데드밴드, 클램핑)을 이 라이브러리를 통해 얻을 수 있나요? 또한 SDL에 몇 가지 테스트 도구가 있지만 그 중 어느 것도 내 임베디드 시스템에서 사용할 수 있는 명령줄 도구가 아닌 것 같아서 지금까지는 더 이상 살펴볼 수 없습니다.
답변1
참고로 저는 libevdev(저와 같은 간단한 애플리케이션의 경우 SDL2보다 훨씬 가벼움)와 Joydev가 기존 API에 대해 했던 것과 매우 유사한 방식으로 보정을 수행하는 systemd 서비스를 사용하여 자체 대화형 보정 도구를 작성하게 되었습니다.