본문

DJ Hero Turntable for PS3 하드웨어적 분석


DJ Hero Turntable은 XBOX든 WII든 PS2/3 이든 모두 USB 연결을 사용한다. 사용한 턴테이블은 Playstation 시리즈를 위한 것이었으며, VID(Vendor ID)와 PID(Product ID)는 각각 0x12BA와 0x0140으로 나온다 (사용시에는 \VID_12BA&PID_0140)

그리고 다른것에 앞서서 각 입력단자에 대한 용어정리가 필요했다. 그래서 만든것이 위의 그림. 상품 설명 페이지에서 나온 용어들로 적어놓았는데 Effect Dial보다는 Effects Nob라고 표현하는게 좀 더 자연스러운거 같다. 아무튼 각 입력으로 USB에 28개의 byte array의 버퍼를 사용하여 데이터를 읽어오는데, 이를 보기 쉽게 hex단위로 끊어서 올린다. 예를들어 장치가 동기화가 되지 않았을 경우에는 00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-00-02-00-02-00-02-00-02를 받아온다.

우선 다른 입력값에 앞서, Crossfader입력과 Effects Nob입력에 대해 알아두어야 한다, 왜냐하면 이녀석들이 가만있지 못하고 계속 값이 조금씩 바뀌기 떄문이다. 이런 요동치는 부분은 밑줄을 그어놓았으니 기억해두는것이 좋다. 이 외에는 다행이도 값이 튀지 않아서 좋다. 우선 눈대중으로 변화를 확인한건데 혹시라도 빠진 값이 있을지도 모른다. 그래서 raw데이터를 올려놓은것. (이 게시물은 파워포인트에서 바로 복사한 것이기 떄문에 화면구성이 약간 달라질 수 있다)

* Crossfader
왼쪽 : 원래는 00이어야 하는데 값이 튐
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-3C-02-04-00-00-02-00-02
가운데 : 이것도 00정도 되어야 할거 같은데..
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-36-02-07-02-00-02-00-02
오른쪽 : 이건 잘 안튀는듯하다
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-3C-02-FF-03-00-02-00-02
=> 크로스 페이더는 가장 왼쪽부터 값이 시작하며, 데이터의 오른쪽 부분이 더 큰 자릿수이다. (범위 : 00-00 -> FF-03)

* Effects Nob(Effects Dial)
기본 :
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-06-00-00-00-00-02-00-02
오른쪽으로 돌렸을때:
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-FF-03-00-00-00-02-00-02
=> Effects Nob는 Crossfader와 마찬가지로 데이터의 오른쪽 부분이 더 큰 자릿수이다. 시계방향으로 돌리면 값이 증가하고, 반시계 방향으로 돌리면 값이 감소한다 (범위 : 00-00 -> FF-03)

* Euphoria Button
 00-08-00-0F-80-80-80-80-00-00-00-00-FF-00-00-00-00-00-00-00-36-02-0E-00-00-02-00-02
=> 액션버튼의 세모버튼과 충돌하는것을 시뮬레이션 하다가 발견했다. USB연결에 대역폭은 충분한것같은데 왜 이렇게 설정했는지는 모르겠다...

* Turn Table
턴테이블 기본 :
00-00-00-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-08-00-00-00-00-02-00-02
턴테이블 오른쪽으로 :
00-00-00-0F-80-80-80-AA-00-00-00-00-00-00-00-00-00-00-00-00-0D-00-00-00-00-02-00-02
왼쪽으로 :
00-00-00-0F-80-80-80-5B-00-00-00-00-00-00-00-00-00-00-00-00-0B-00-00-00-00-02-00-02
=> 턴테이블은 시계방향으로 돌리면 기준값(80)으로부터 값이 증가하고 왼쪽으로 돌리면 값이 감소한다. 이 값은 현재 회전하는 속도에 따라 달라지는데, 한계치가 얼마인지 잘 모르겠다. 그래도 128bit에서 ±64로 값이 변할것 같은 느낌이다. (추정범위 : 40 - 80 - C0)

* 3-Stream Buttons
파란색 버튼 :
00-01-00-0F-80-80-80-80-FF-00-00-00-00-00-00-00-00-00-00-00-07-00-00-00-04-02-00-02
초록색 버튼 :
00-02-00-0F-80-80-80-80-00-00-FF-00-00-00-00-00-00-00-00-00-0D-00-00-00-01-02-00-02
빨간색 버튼 :
00-04-00-0F-80-80-80-80-00-00-00-00-00-FF-00-00-00-00-00-00-0D-00-04-00-02-02-00-02
=> 화면상으로는 안쪽으로부터 파란색, 빨간색, 초록색으로 되어있지만 보기 편하게 위와같이 정렬하였다. 이따가도 위 코드를 보겠지만, 이 키는 각각 플레이스테이션의 네모, 세모, 동그라미 버튼과 동일한 키값을 가진다

* Playstation D-Pad
위로:
00-00-00-00-80-80-80-80-00-00-FF-00-00-00-00-00-00-00-00-00-07-00-12-00-00-02-00-02
우상단:
00-00-00-01-80-80-80-80-FF-00-FF-00-00-00-00-00-00-00-00-00-0B-00-38-00-00-02-00-02
오른쪽 :
00-00-00-02-80-80-80-80-FF-00-00-00-00-00-00-00-00-00-00-00-0A-00-39-00-00-02-00-02
우하단 :
00-00-00-03-80-80-80-80-FF-00-00-FF-00-00-00-00-00-00-00-00-0B-00-37-00-00-02-00-02
아래로 :
00-00-00-04-80-80-80-80-00-00-00-FF-00-00-00-00-00-00-00-00-0A-00-39-00-00-02-00-02
좌하단 :
00-00-00-05-80-80-80-80-00-FF-00-FF-00-00-00-00-00-00-00-00-06-00-33-00-00-02-00-02
좌상단 :
00-00-00-07-80-80-80-80-00-FF-FF-00-00-00-00-00-00-00-00-00-0A-00-39-00-00-02-00-02
=> 위 값들을 들여다보면 4번째 hex에서 방향에 대한 총체적인 값이 모이고, 9-12번째 hex에서 각 방향에 대한 on/off를 구분할 수 있다. 9번째는 오른쪽, 10번째는 왼쪽, 11번째는 위, 12번째는 아래를 의미한다. 그리고 4번째는 방향키가 눌러지지 않았을 경우 0F, 방향키가 눌러졌을때에는 윗 방향부터 시계방향으로 00에서 07까지 다다름을 알 수 있다. 그리고 다른 키에서 4번째를 사용하지 않으므로 그냥 4번째만 사용해도 무방하다. (범위 : 0F, 00-07)

* Playstation ActionButtons
네모버튼 :
00-01-00-0F-80-80-80-80-FF-00-00-00-00-00-00-00-00-00-00-00-09-00-68-00-00-02-00-02
엑스버튼 :
00-02-00-0F-80-80-80-80-00-00-FF-00-00-00-00-00-00-00-00-00-0E-00-69-00-00-02-00-02
세모버튼 :
00-08-00-0F-80-80-80-80-00-00-00-00-FF-00-00-00-00-00-00-00-0B-00-69-00-00-02-00-02
동그라미버튼 :
00-04-00-0F-80-80-80-80-00-00-00-00-00-FF-00-00-00-00-00-00-07-00-6C-00-00-02-00-02
=> 아까도 언급했듯, 턴테이블 위의 세개의 버튼과 충돌되는 부분이 있다. 동시에 충돌되는 버튼을 누르면 하나의 값만 입력이 된다. 그럼 완벽히 동일하지는 않지만 같은 대역이 겹치는 버튼을 동시에 누르면 어떻게 될까?? 그건 다음 시간에~~~

* Playstation Function Buttons
Select :
00-00-01-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-08-00-4F-00-00-02-00-02
Start :
00-00-02-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-07-00-50-00-00-02-00-02
플스버튼 :
00-00-10-0F-80-80-80-80-00-00-00-00-00-00-00-00-00-00-00-00-0B-00-69-00-00-02-00-02


처음에 이 값들을 조사하려고 프로그램들을 살펴봤지만 효과가 없어서(Windows 7 환경 하의 Snoppy시리즈와 SniffUSB등은 동작을 하지 않더라..) 어쩔수없이 USB 데이터를 읽어오는 프로그램을 만들었는데 만들고 나서 글쓰려고보니까 USBTrace라는 프로그램이 있었다. 실행 시키면 동일한 값이 나오긴 하지만 값 변경이 너무나 실시간이고 해서 프로그램 자체도 매우 느리고 어떤게 원하는 값인지 알 수 없었다, 결국 내가 만든 프로그램에 만족한다 그리고 어짜피 다음 과정을 위해서라도 USB 데이터 로딩 모듈을 만들 필요가 있었다.

아직 내가 원하는 프로젝트의 첫걸음을 뗀거지만 처음부터 꽤 도전적인 과제였던것 같다. 아직 아이디어도 구체화 되지 않은 상황에서 이 다음은 어떤 산이 나오려나.. 아래는 DJ Hero에 대해 간략하게 알 수 있는 동영상과, 각 입력단자에 대한 설명을 들려주는 동영상이다.



[동영상 1] DJ Hero: Setup, Tutorial, And Gameplay


[동영상 2] DJ Hero Turntable Controller First Look

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.