안녕하세요? Wiimote Library v1.7분석 그 두번째 시간입니다. 이번시간부터는 지난 시간에 살펴본 구조와 흐름을 바탕으로 라이브러리의 실제 코드에서는 어떻게 구현이 되어있는지에 대해서 살펴보도록 하겠습니다. 처음 총 3번의 포스팅으로 시스템에 연결된 Wiimote Controller를 검색하고, 통신하는 방법에 대해 소개하려고했었는데 생각보다 분량이 많아 엄청난 스크롤의 압박이 예상되기 때문에 원래 2회정도로 나누어 포스팅을 하도록 하겠습니다. (총 5회가 되겟네요.)
#시스템에 연결된 Wiimote Controller를 검색해보자!
라이브러리를 설치하면 테스트용 샘플 코드를 확인 하실 수 있습니다. Wiimote를 컴퓨터에 연결된 Bluetooth와 연결한 뒤 샘플 코드를 실행하면 아래그림과 같은 결과 화면을 확인 하실 수 있습니다.

저같은 경우에는 Wii Controller로 Wii Fit을 연결했기 때문에 오른쪽 상단에 Balance Board의 데이터가 상황에 따라 변화되는것을 확인 할 수 있습니다. 그리고 화면 중앙에 잔여 배터리양도 표시가 되네요. 만약 Wiimote를 연결했다면 왼쪽 상단에 Wiimote의 데이터가 움직이게 됩니다. (만약 한번에 2개 이상의 Wii Controller를 연결했다면 새로운 탭이 추가되어 각각의 탭에서 장치에 대한 정보를 살펴 볼 수 있습니다.)
그럼 본격적인 코드를 살펴보도록 하겠습니다. 아래는 샘플코드를 실행했을때 바로 실행되는 MultipleWiimoteForm가 로드될때 발생하는 Load 이벤트의 코드 일부입니다. 소스코드에 대한 설명은 주석에 대체 했으며, 코드 설명에 불필요한 부분 (예를들어 MessageBox등..)은 분량을 줄이기 위해서 임의로 삭제 했으니, 착오없으시길바랍니다.
이번 분석에서의 주요 중점인 HID장치로 인식되는 Wiimote Controller와 통신에 대한 부분은 FindAllWiimotes()을 호출 하는 부분 부터 시작된다고 할 수 있습니다. 중간 부분에 검색된 Wiimote 장치들에 맞는 WiimoteInfo Control 생성부분은 사용자가 라이브러리를 개발할때 필요한 방식대로 적절하게 변경하여 사용하면 되는 부분이기 때문에 이번 분석의 범위에서 벗어나므로 추가 설명은 생략하도록 하겠습니다.
FindAllWiimotes() 메서드가 정의된 WiimoteCollection Class로 이동하면 아래와 같이 썰렁한 한줄짜리와 두줄짜리 메서드를 확인 할 수 있습니다. 첫번째 FindAllWiimotes()는 우리가 찾아온 메서드로 시스템에 연결된 모든 Wiimote Controller를 찾는 메서드고, 두번째 WiimoteFound메서드는 Wiimote Controller를 찾았을때 호출되는 메서드입니다.
FindAllWiimotes 메서드의 코드를 살펴 보면 Wiimote Class에 Static 메서드로 정의된 FindWiimote 메서드를 호출하는것을 알 수 있습니다. Wiimote Class의 FindWiimote메서드는 파라미터로 Wiimote Controller를 찾았을때 호출할 Delegate를 입력받고, Wiimote Controller가 검색되면 해당대리자를 호출 해주게됩니다. Delegate는 파라미터로 검색된 Deivce의 DevicePath를 입력받고 처리 여부를 bool형태로 반환하는 형식으로 WiimoteCollection에 정의된 WiimoteFound와 동일합니다.
따라서 WiimoteCollection에 정의된 FindWiimote를 호출하면 Wiimote Class의 FindWiimote를 호출하면서 대리자로 WiimoteCollection에 정의된 WiimoteFound 메서드를 전달하게 되고, WiimoteFound 메서드는 파라미터로 입력받은 DevicePath를 통해 Wiimote객체를 생성한뒤 Collection에 추가하게 됩니다.
자그럼 본격적인 Controller를 검색하는 부분입니다. Wiimote Class의 Findow Window메서드에 대해서 살펴보겠습니다.
위 코드를 보면 HID 관련 API를 사용하여 시스템에 연결된 HID를 순차적으로 검색한 뒤 Product ID와 Vender ID를 검사하여 Wiimote Controller인지 여부를 판단하는걸 알 수 있습니다. 그리고 파라미터로 전달받은 Delegate를 호출할때 Delegate에서 False를 리턴하면 검색을 중지 함으로서 하나의 Wiimote를 검색하는데 활용할 수 있다는것을 알 수 있습니다.
이렇게 해서 오늘은 시스템에 연결된 wiimote Controller 장치를 검색하고 Wiimote 객체를 생성하는 부분까지 알아보았습니다. 다음시간에는 이렇게 생성한 객를 가지고 실제 wiimote와 통신하는 부분에 대해서 살펴보도록 하겠습니다. 오늘 설명한 내용중에 궁금하신 점이나 질문은 이메일이나 리플로 남겨주시면 답변드리도록 하겠습니다.
#시스템에 연결된 Wiimote Controller를 검색해보자!
라이브러리를 설치하면 테스트용 샘플 코드를 확인 하실 수 있습니다. Wiimote를 컴퓨터에 연결된 Bluetooth와 연결한 뒤 샘플 코드를 실행하면 아래그림과 같은 결과 화면을 확인 하실 수 있습니다.
저같은 경우에는 Wii Controller로 Wii Fit을 연결했기 때문에 오른쪽 상단에 Balance Board의 데이터가 상황에 따라 변화되는것을 확인 할 수 있습니다. 그리고 화면 중앙에 잔여 배터리양도 표시가 되네요. 만약 Wiimote를 연결했다면 왼쪽 상단에 Wiimote의 데이터가 움직이게 됩니다. (만약 한번에 2개 이상의 Wii Controller를 연결했다면 새로운 탭이 추가되어 각각의 탭에서 장치에 대한 정보를 살펴 볼 수 있습니다.)
그럼 본격적인 코드를 살펴보도록 하겠습니다. 아래는 샘플코드를 실행했을때 바로 실행되는 MultipleWiimoteForm가 로드될때 발생하는 Load 이벤트의 코드 일부입니다. 소스코드에 대한 설명은 주석에 대체 했으며, 코드 설명에 불필요한 부분 (예를들어 MessageBox등..)은 분량을 줄이기 위해서 임의로 삭제 했으니, 착오없으시길바랍니다.
이번 분석에서의 주요 중점인 HID장치로 인식되는 Wiimote Controller와 통신에 대한 부분은 FindAllWiimotes()을 호출 하는 부분 부터 시작된다고 할 수 있습니다. 중간 부분에 검색된 Wiimote 장치들에 맞는 WiimoteInfo Control 생성부분은 사용자가 라이브러리를 개발할때 필요한 방식대로 적절하게 변경하여 사용하면 되는 부분이기 때문에 이번 분석의 범위에서 벗어나므로 추가 설명은 생략하도록 하겠습니다.
FindAllWiimotes 메서드의 코드를 살펴 보면 Wiimote Class에 Static 메서드로 정의된 FindWiimote 메서드를 호출하는것을 알 수 있습니다. Wiimote Class의 FindWiimote메서드는 파라미터로 Wiimote Controller를 찾았을때 호출할 Delegate를 입력받고, Wiimote Controller가 검색되면 해당대리자를 호출 해주게됩니다. Delegate는 파라미터로 검색된 Deivce의 DevicePath를 입력받고 처리 여부를 bool형태로 반환하는 형식으로 WiimoteCollection에 정의된 WiimoteFound와 동일합니다.
따라서 WiimoteCollection에 정의된 FindWiimote를 호출하면 Wiimote Class의 FindWiimote를 호출하면서 대리자로 WiimoteCollection에 정의된 WiimoteFound 메서드를 전달하게 되고, WiimoteFound 메서드는 파라미터로 입력받은 DevicePath를 통해 Wiimote객체를 생성한뒤 Collection에 추가하게 됩니다.
자그럼 본격적인 Controller를 검색하는 부분입니다. Wiimote Class의 Findow Window메서드에 대해서 살펴보겠습니다.
위 코드를 보면 HID 관련 API를 사용하여 시스템에 연결된 HID를 순차적으로 검색한 뒤 Product ID와 Vender ID를 검사하여 Wiimote Controller인지 여부를 판단하는걸 알 수 있습니다. 그리고 파라미터로 전달받은 Delegate를 호출할때 Delegate에서 False를 리턴하면 검색을 중지 함으로서 하나의 Wiimote를 검색하는데 활용할 수 있다는것을 알 수 있습니다.
이렇게 해서 오늘은 시스템에 연결된 wiimote Controller 장치를 검색하고 Wiimote 객체를 생성하는 부분까지 알아보았습니다. 다음시간에는 이렇게 생성한 객를 가지고 실제 wiimote와 통신하는 부분에 대해서 살펴보도록 하겠습니다. 오늘 설명한 내용중에 궁금하신 점이나 질문은 이메일이나 리플로 남겨주시면 답변드리도록 하겠습니다.

