콘텐츠로 바로가기

now0930 일지

이런저런 생각

  • 홈
  • 비공개
  • 강좌
  • 잔여 작업 조회
  • 위치

linux usb driver xbox360(5)

드디어 마지막이다. xbox 패드를 마우스처럼 사용하고 싶어 이렇게 동작하도록 수정했다. 처음 연결하면 조이스틱으로 동작하고, 가운데 버튼을 누르면 마우스로 동작하도록 했다. 리눅스에서 조이스틱 쓸 일이 있나?? 초기값을 마우스로 바꿨어야 했다.

input_device에 name을 설정하지 않고 등록하면 xserver로 이벤트를 전달할 수 없다. input_device에 name을 설정하지 않으면 evtest에 이름이 표시되지 않는다.

xbox 스틱으로 들어오는 값을 그대로 사용하면 값이 너무 커서 커서가 화면 끝에서 끝까지 점프한다. 대략 2,000으로 나눴다. 바꿔 말하면 큰 값을 짧은 시간에 한번에 전달하기 위해 조이스틱을 사용한다.

버튼을 누르면 rising edge, falling edge 두 번 동작한다. 비트 시프트로 특정 값을 만족하면 모드가 바뀌도록 했다. 인터럽트 등록할 때 rising, falling edge 필터링 할 수 있는데, urb로 등록하면 그런 게 없는 듯 하다. 짱구를 많이 굴렸다.

xpad.c 드라이버를 따라 한 수준이지만 커스터 마이징을 해 보면서 무엇을 모르고 무엇을 학습했는지 알 수 있었다. 책만 보고서는 절대 이해하지 못했을 지식이다. 사용되는 함수들은 소스 코드를 보지 않는 한 절대 사용하지 못할 함수 들이다. 이미 내가 고민했던 내용을 누군가 해결하여 코드로 구현했다. 소스코드 검색을 자주 해야 시간을 줄일 수 있다.

xpad.c에 보면 사용할 struct에 관심있는 주소를 모두 때려 넣었다. 구조가 복잡하고, 주소가 너무 많아 북마크처럼 주소를 관리해야 한다. 커널에서 내려오면 항상 메모리를 해제할 수 있도록 했다. 보면 볼수록 container_of 매크로로 위력을 실감한다. 부분을 알면 구조체 멤버에 무제한으로 접근할 수 있다. 와!! 이거 생각해낸 사람이 정말 대단하다.

나도 이제 usb, character device에서 하산해도 될 듯 하다.

https://github.com/now0930/xbox_driver

참조 자료

  • Accessing Keys from Linux Input Device
  • Input Event Code
  • bit operation
  • Input Handler
  • event handler
  • bash event handler
  • wrtt.in
  • Raspi input device
  • match id

이 글 공유하기:

  • Tweet
발행일 2022-01-24글쓴이 이대원
카테고리 생활코딩 태그 c, driver, LED, linux, skeleton, usb

댓글 남기기응답 취소

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.

글 내비게이션

이전 글

linux usb driver xbox360(4)

다음 글

linux cache memory

2025 5월
일 월 화 수 목 금 토
 123
45678910
11121314151617
18192021222324
25262728293031
4월    

최신 글

  • common mode, differential mode 2025-05-11
  • signal conditioner, 신호 처리기 2025-05-10
  • strain gage 2025-05-09
  • 칼만 필터 2025-05-01
  • positioner(I/P) 2025-04-26

카테고리

  • 산업계측제어기술사
  • 삶 자국
    • 책과 영화
    • 투자
  • 생활코딩
    • LEGO
    • ROS
    • tensorflow
  • 전기기사
  • 피아노 악보

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org

페이지

  • 소개
  • 잔여 작업 조회
    • 작업 추가
    • 작업의 사진 조회
    • 작업 수정 페이지
  • 사진
    • GPS 입력된 사진
    • 사진 조회
  • 위치
    • 하기 휴가 방문지
    • 해외 출장

태그

android bash c docker driver FSM gps java kernel LEGO linux mysql network program opcua open62541 plc programmers python raspberry reinforcementLearning ros state space system program tensorflow transfer function 경제 미국 민수 삼국지 세계사 실기 에너지 역사 유전자 일본 임베디드 리눅스 전기기사 조선 중국 채윤 코딩 테스트 통계 한국사 한국어

팔로우하세요

  • Facebook
now0930 일지
WordPress로 제작.