콘텐츠로 이동

USB 캡처에서 RGB 데이터 분리

이 튜토리얼에서는 SignalRGB에서 장치를 구현하기 위한 USB 데이터 해독 방법을 설명합니다.

USB 데이터 캡처를 해석하기 전에 특정 패킷을 찾기 위해 정렬해야 합니다.

Wireshark에서:

  1. USB 데이터 캡처 열기
  2. ‘Info’ 헤더를 클릭하여 패킷 유형별로 정렬
  3. URB_INTERRUPT OUT 또는 SET_REPORT Request 유형을 찾을 때까지 스크롤

위의 명령 중 하나도 찾지 못했다면 RAWUSB 장치로 작업 중이거나 캡처를 올바르게 하지 않은 것일 수 있습니다. RAWUSB 장치의 경우 URB_BULK_OUT 또는 URB_CONTROL OUT 명령이 표시됩니다. RAWUSB 장치가 있다면 개발 도움을 위한 디스코드 서버에 참여하십시오.

가장 먼저 찾아볼 패킷은 USB 패킷 캡처를 수행할 때 설정한 RGB 값이 포함된 것들입니다.

참고: 현재 장치 초기화 패킷은 의도적으로 무시하겠습니다. 이것들은 나중에 필요할 수 있습니다.

각 패킷에서 전송되는 데이터는 모든 USB 프로토콜 헤더 정보 뒤에 옵니다. 이것을 보려면 데이터 프래그먼트 섹션을 찾아야 합니다.

  1. 패킷 선택
  2. HID Data 필드를 선택하거나 Setup Data 섹션을 확장하여 Data Fragment 필드 선택
  3. 필드를 클릭하면 Wireshark 하단에서 데이터 섹션이 파란색으로 강조 표시됩니다
  4. 선택된 필드는 간격 없이 전송된 데이터를 표시합니다. 이 보기에서 2개의 문자마다 1바이트입니다.

참고: 보고 있는 값들은 16진수(기수 16)로 되어 있으며, 10진수의 0255를 0x000xFF 값으로 나타내는 데이터 형식입니다.

USB 데이터 캡처 가이드에서 빨간색, 녹색, 파란색을 최대값으로 설정했으므로, 패킷 캡처에서 0xFF 값을 찾게 됩니다. 다른 색상을 사용했다면 사용한 특정 16진수 색상을 알거나 알려진 색상으로 다시 캡처해야 합니다.

전통적으로 장치의 조명 패킷에는 패킷이 어떤 명령을 위한 것인지와 장치의 어떤 조명 구역을 처리하는지를 나타내는 헤더가 포함되며, 그 다음에 RGB 데이터와 간혹 CRC 체크섬 같은 푸터 데이터가 옵니다.

RGB 데이터는 일반적으로 캡처에서 설정한 색상을 찾아 확인할 수 있는 몇 가지 형식을 따릅니다:

  • R, G, B, R, G, B, R, G, B (빨간색 → 녹색 → 파란색 → 반복)
  • RRR, GGG, BBB (여러 빨간색 → 여러 녹색 → 여러 파란색 → 반복)
  • Br, R, G, B (밝기 → 빨간색 → 녹색 → 파란색 → 반복)

참고: 일부 장치는 다른 색상 순서를 사용합니다. 대부분이 RGB를 사용하지만 장치가 GBR, BGR 또는 다른 조합을 사용할 수도 있습니다.

이 경우 찾는 값은 다음과 같습니다:

  • 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (장치가 R,G,B 패킷 순서를 사용하는 경우)
  • 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (장치가 RRR,GGG,BBB 패킷 순서를 사용하는 경우)
  • 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (장치가 Br,R,G,B 패킷 순서를 사용하는 경우)

참고: 위의 예시들은 장치의 일반적인 패킷 구조 중 일부이며, 항상 적용되지는 않을 수 있습니다. 유사점을 찾기 위해 비교하고 살펴봐야 합니다.

패킷을 아래로 스크롤하다 보면 캡처에서 패킷 271에 R,G,B 패킷 구조와 유사한 바이트가 포함되어 있는 것을 찾을 수 있습니다.

참고: 일부 장치는 전체 장치의 색상을 설정하기 위해 여러 패킷을 사용할 수 있습니다. 다음 패킷도 살펴보고 초기 패킷이 반복되는 위치를 찾으십시오.

Wireshark에서 CTRL + M 키를 동시에 누르거나 패킷을 오른쪽 클릭하고 MARK/UNMARK Packet을 클릭하여 이 패킷을 MARK/UNMARK Packet 기능으로 표시합니다.

이 패킷이 실제로 색상 데이터 패킷 중 하나인지 확인하기 위해 계속 스크롤하여 R,G,B 구조에 맞는 더 많은 패킷을 찾습니다. 또한 이 패킷들이 원래 소프트웨어에서 색상을 설정한 순서를 따르는지 확인합니다. 이때 패킷의 헤더를 살펴보고 변경되는지 확인하십시오. 패턴으로 변경되고 있다면 장치의 모든 LED를 설정하기 위해 여러 패킷이 필요할 가능성이 높습니다.

패킷 271, 273, 275를 나란히 보면 패킷 271에는 RGB 데이터가 빨간색(0xFF, 0x00, 0x00)만, 패킷 273에는 녹색(0x00, 0xFF, 0x00)만, 패킷 275에는 파란색(0x00, 0x00, 0xFF)만 있음을 확인할 수 있습니다. RGB 섹션 위의 헤더 데이터를 보면 세 패킷 간에 변경되지 않는다는 것을 알 수 있습니다. 이것은 이 패킷들에서 같은 색상 구역을 변경하고 있다는 것을 의미할 가능성이 높습니다.

  • 또한 참고할 점으로, 색상 패킷을 사용하여 장치가 가진 구역 수를 결정할 수 있습니다. RGB 데이터 패킷에서 알려진 값이 몇 번 나타나는지 확인하면 됩니다. 아래 예시에서 장치에는 확실하게 제어할 수 있는 4개의 구역이 있음을 알 수 있습니다.

색상 데이터가 포함된 모든 패킷을 찾아 표시할 때까지 계속 스크롤합니다. 그 다음 플러그인 파일 생성으로 넘어갑니다.