Phân tích dữ liệu RGB từ bản ghi USB
Hướng dẫn này cho thấy cách giải mã dữ liệu USB để triển khai thiết bị trong SignalRGB.
Sắp xếp dữ liệu
Phần tiêu đề “Sắp xếp dữ liệu”Trước khi cố gắng giải thích bản ghi USB, chúng ta cần sắp xếp nó để tìm các packet cụ thể.
Trong Wireshark:
- Mở bản ghi USB
- Nhấp vào tiêu đề “Info” để sắp xếp theo loại packet
- Cuộn qua danh sách cho đến khi bạn tìm thấy loại URB_INTERRUPT OUT hoặc SET_REPORT Request
Nếu bạn không tìm thấy bất kỳ lệnh nào ở trên, bạn có thể đang làm việc với thiết bị RAWUSB hoặc bản ghi không được thực hiện đúng cách. Đối với thiết bị RAWUSB, bạn sẽ thấy các lệnh URBBULK_OUT hoặc URB_CONTROL OUT. Nếu bạn có thiết bị RAWUSB, hãy tham gia máy chủ Discord hỗ trợ phát triển này.
Tìm packet RGB
Phần tiêu đề “Tìm packet RGB”Các packet chúng ta tìm kiếm đầu tiên là những packet chứa các giá trị RGB mà chúng ta đã đặt trong quá trình ghi USB.
Lưu ý: Chúng ta sẽ cố tình bỏ qua các packet khởi tạo thiết bị cho bây giờ. Các packet này có thể sẽ cần thiết sau này.
Dữ liệu được gửi trong mỗi packet đến sau tất cả thông tin header giao thức USB. Để xem chúng, chúng ta cần tìm phần “Data Fragment”.
- Chọn một packet
- Chọn trường HID Data, hoặc mở rộng phần Setup Data và chọn trường Data Fragment
- Nhấp vào trường sẽ tô sáng màu xanh vùng dữ liệu ở phần dưới của Wireshark
- Trường được chọn hiển thị dữ liệu được gửi không có khoảng cách. Trong chế độ xem này, mỗi 2 ký tự tương ứng với một byte.

Lưu ý: Các giá trị đang được xem xét ở định dạng HEX (cơ số 16), định dạng dữ liệu biểu thị các giá trị thập phân từ 0 đến 255 dưới dạng các giá trị từ 0x00 đến 0xFF.
Cấu trúc packet
Phần tiêu đề “Cấu trúc packet”Vì chúng ta đã đặt Đỏ, Xanh lá và Xanh lam ở giá trị tối đa trong hướng dẫn ghi USB, chúng ta đang tìm kiếm các giá trị 0xFF trong bản ghi. Nếu bạn đã sử dụng các màu khác trong bản ghi, bạn phải biết màu HEX cụ thể đã sử dụng hoặc lặp lại việc ghi với các màu đã biết.
Các packet ánh sáng thiết bị thường chứa một header cho biết packet dành cho lệnh nào và địa chỉ vùng ánh sáng nào của thiết bị, tiếp theo là dữ liệu RGB và hiếm khi có một số dữ liệu ở cuối như tổng kiểm tra CRC.
Dữ liệu RGB thường tuân theo một số định dạng phổ biến mà chúng ta có thể kiểm tra bằng cách tìm kiếm các màu được đặt trong bản ghi:
- R, G, B, R, G, B, R, G, B (Đỏ -> Xanh lá -> Xanh lam -> Lặp lại)
- RRR, GGG, BBB (Nhiều Đỏ -> Nhiều Xanh lá -> Nhiều Xanh lam -> Lặp lại)
- Br, R, G, B (Độ sáng -> Đỏ -> Xanh lá -> Xanh lam -> Lặp lại)
Lưu ý: Một số thiết bị sử dụng thứ tự màu khác. Mặc dù hầu hết sử dụng RGB, thiết bị của bạn có thể sử dụng GBR, BGR hoặc một số tổ hợp khác.
Trong trường hợp của chúng ta, các giá trị cần tìm là:
- 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (nếu thiết bị sử dụng thứ tự packet R,G,B).
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (nếu thiết bị sử dụng thứ tự packet RRR,GGG,BBB).
- 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (nếu thiết bị sử dụng thứ tự packet Br,R,G,B)
Lưu ý: Các ví dụ trên chỉ là một số cấu trúc packet phổ biến cho thiết bị và có thể không luôn áp dụng. Bạn phải so sánh và tìm kiếm điểm tương đồng.
Xem xét packet
Phần tiêu đề “Xem xét packet”Khi cuộn qua các packet, chúng ta sẽ nhận thấy rằng packet 271 trong bản ghi của chúng ta chứa các byte trông giống cấu trúc packet R,G,B.
Lưu ý: Một số thiết bị có thể sử dụng nhiều packet để đặt màu cho toàn bộ thiết bị. Chú ý đến các packet tiếp theo và đảm bảo bạn tìm ra nơi packet đầu tiên lặp lại.

Chúng ta đánh dấu packet này bằng chức năng MARK/UNMARK Packet trong Wireshark. Điều này có thể được thực hiện bằng cách nhấn CTRL + M đồng thời hoặc nhấp chuột phải vào packet và nhấp MARK/UNMARK Packet.
Để xác nhận rằng packet này thực sự là một trong những packet dữ liệu màu của chúng ta, chúng ta tiếp tục cuộn xuống tìm thêm các packet phù hợp với cấu trúc R,G,B của chúng ta. Chúng ta cũng kiểm tra xem các packet này có tuân theo thứ tự mà chúng ta đã đặt màu trong phần mềm gốc hay không. Đây là thời điểm tốt để xem xét header của packet và xem nó có thay đổi không. Nếu nó thay đổi theo một mẫu, rất có thể cần nhiều packet để đặt tất cả LED của thiết bị.
Khi nhìn vào các packet 271, 273 và 275 cạnh nhau, chúng ta thấy rằng dữ liệu RGB trong packet 271 chỉ chứa Đỏ (0xFF, 0x00, 0x00), trong packet 273 chỉ chứa Xanh lá (0x00, 0xFF, 0x00), và trong packet 275 chỉ chứa Xanh lam (0x00, 0x00, 0xFF). Khi nhìn vào header ở trên phần RGB, chúng ta sẽ nhận thấy rằng dữ liệu này không thay đổi giữa ba packet. Điều này rất có thể có nghĩa là chúng ta đang thay đổi các vùng màu giống nhau trong các packet này.
- Cũng đáng lưu ý rằng dựa trên các packet màu, chúng ta có thể xác định thiết bị chứa bao nhiêu vùng. Để làm điều này, chúng ta kiểm tra xem các giá trị đã biết của chúng ta xuất hiện bao nhiêu lần trong các packet dữ liệu RGB. Trong ví dụ tiếp theo, chúng ta thấy rằng thiết bị có 4 vùng mà chúng ta chắc chắn có thể địa chỉ hóa.


Chúng ta tiếp tục qua các packet của mình cho đến khi tìm và đánh dấu tất cả các packet có dữ liệu màu. Sau đó chúng ta chuyển sang tạo tệp plugin của mình.