Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1...

6
46 Embedded World 모바일 플랫폼은 컴퓨터 시장에서 나아갈 방향 을 넘어 대세가 되었다. 모바일 플랫폼 지원을 위해 많은 칩 제조사들은 저전력 플랫폼 위에 서 CPU 성능을 최대한 활용하는 방안을 제시하 고 있다. 또한 터치 인터페이스 및 NUI(Natural User Interface) 등의 모바일 환경에 맞는 인터 페이스들 역시 모바일 플랫폼에 적용되고 있다. 기존 컴퓨터 시대의 절대 강자인 마이크로소프 트도 대세에 따라 모바일 플랫폼을 위한 Win- dows 8을 2012년 10월에 출시하였고, 그로부 터 1년이 지난 2013년 10월 대규모 업데이트인 Windows 8.1 업데이트를 진행하였다. 마이크로소프트는 Windows 8부터 모바일 플랫 폼을 위한 새로운 API 셋인 WinRT를 소개하였 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토 어앱’이라고 불린다. 어플리케이션 개발자가 WinRT API를 이용하 여 어플리케이션을 만든다는 것, 즉 윈도우 스 Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 유정현 [email protected] MDS테크놀로지 / Microsoft Embedded MVP 이미지 출처: hdwallpaperstop.com O S / SOFTWARE

Transcript of Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1...

Page 1: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

46 Embedded World

모바일 플랫폼은 컴퓨터 시장에서 나아갈 방향

을 넘어 대세가 되었다. 모바일 플랫폼 지원을

위해 많은 칩 제조사들은 저전력 플랫폼 위에

서 CPU 성능을 최대한 활용하는 방안을 제시하

고 있다. 또한 터치 인터페이스 및 NUI(Natural

User Interface) 등의 모바일 환경에 맞는 인터

페이스들 역시 모바일 플랫폼에 적용되고 있다.

기존 컴퓨터 시대의 절대 강자인 마이크로소프

트도 대세에 따라 모바일 플랫폼을 위한 Win-

dows 8을 2012년 10월에 출시하였고, 그로부

터 1년이 지난 2013년 10월 대규모 업데이트인

Windows 8.1 업데이트를 진행하였다.

마이크로소프트는 Windows 8부터 모바일 플랫

폼을 위한 새로운 API 셋인 WinRT를 소개하였

고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

어앱’이라고 불린다.

어플리케이션 개발자가 WinRT API를 이용하

여 어플리케이션을 만든다는 것, 즉 윈도우 스

Windows Embedded 8.1 Industry의

디바이스 연결 API 활용하기

유정현 [email protected]테크놀로지 / Microsoft Embedded MVP

이미지 출처: hdwallpaperstop.com

O S / SOFTWARE

46-51_OS_soft_MDS_12�.indd 46 13. 12. 24. �� 7:07

Page 2: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

www.embeddedworld.co.kr 47

토어앱을 만든다는 것은 마이크로소프트가 개

발한 모바일 플랫폼을 사용하여 앱을 만든다

는 것이다.

Windows Embedded 플랫폼에서도 윈도우 스

토어앱을 제작하여 배포할 수 있다. 최근 윈도

우의 업데이트인 Windows 8.1의 업데이트가 적

용된 Windows Embedded 8.1 Industry를 이용

하여 Windows 8.1에서 추가된 기능들을 사용

할 수 있다.

임베디드 시장에서 디바이스들간 통신은 중요

한 이슈이다. 개인용 PC나 태블릿과 다르게 임

베디드 디바이스들은 여러 가지 주변 장치들

과 연결되어 동작되고 데이터를 교환하기 때

문이다.

주변 장치를 개발하는 제조사들은 그들이 원

하는 기능에 맞는 디바이스들을 제작하고 디

바이스들과 통신하기 위해 드라이버를 개발한

다. 마이크로소프트가 in-box로 제공하지 않고

디바이스 제조사가 개발하여 배포하는 디바이

스를 ‘커스텀’ 디바이스라고 부른다. 커스텀 디

바이스들은 주로 USB, 시리얼, 네트워크 그리

고 블루투스 등의 인터페이스를 이용하여 PC

들과 통신한다.

이런 커스텀 디바이스들을 윈도우 스토어앱에

서 접근하고 제어할 수 있을까? Windows 8.1뿐

만 아니라 Windows Embedded 8.1 Industry에

서는 커스텀 디바이스들과 통신하기 위해 다양

한 네임스페이스들이 추가되었다. 새롭게 추가

된 네임스페이스를 통하여 윈도우 스토어앱에

서 커스텀 디바이스들을 어떻게 접근하고 제어

하는지를 HID, 블루투스 RFCOMM 인터페이스

를 통해 알아보고자 한다.

USB 디바이스 지원

USB 통신을 지원하는 디바이스들은 헤아릴 수

없을 정도로 많다. USB 스토리지, 휴대폰, 블랙

박스, 내비게이션 등 다양한 기능의 디바이스

들로 존재한다.

또한 이런 디바이스들은 USB 인터페이스를 통

하여 PC와 통신하고 있다.

마이크로소프트는 여러 가지 다양한 USB 디바

이스들과 통신을 할 수 있도록 in-box 드라이

버를 윈도우에 포함시켜 지원하였으며 in-box

드라이버에 포함되지 않은 ‘커스텀’ USB 장치

는 각각의 하드웨어 제조사가 커스텀 드라이

버나 Winusb.sys 파일을 제공하여 지원하였다.

윈도우의 강점은 in-box 드라이버를 비롯하여

커스텀 디바이스 드라이버를 제공하는 USB 인

터페이스를 지원하는 기기들과 자유롭게 통신

할 수 있는 데에 있다.

그리고 기존 데스크탑앱에서는 WinUSB 함수들

을 통해 자유롭게 접근하여 단순 데이터 통신

을 비롯한 펌웨어 업데이트까지 다양한 행위들

이 수행될 수 있다.

그 동안 데스크탑앱에서 이런 커스텀 USB 장치

에 대한 접근이 자유로웠는데 윈도우 스토어앱

에서는 어떻게 접근이 가능할까?

Windows Embedded 8.1 Industry에서는 이런

커스텀 디바이스 드라이버 접근을 위해 Win-

dows.Device.Usb라는 네임스페이스가 추가되

었다.

윈도우 스토어앱에서는 이 네임스페이스를 통

하여 윈도우가 지원하는 in-box 디바이스 접근

및 커스텀 디바이스 접근을 할 수 있게 되었다.

HID 지원

HID(Human Interface Device)는 키보드, 마우

스, 조이스틱 등 컴퓨터와 사용자의 직접적인

상호작용을 위한 인터페이스를 개발하기 위해

사용되었다.

그리고 기본적인 HID 통신은 주로 USB를 통

하여 이루어졌다. 이런 USB를 통한 HID 통신

은 현재 기본적인 기능을 하는 디바이스들 외

에 많은 종류의 장치들을 지원하는 프로토콜로

발전되었다.

예를 들면, 산업용 컨트롤러, 의료용 측정기, 디

스플레이 컨트롤러 등이 있다.

Windows Embedded 8.1 Industry에서는 Win-

dows.Devices.HumanInterfaceDevice네임스페

이스를 제공한다. 윈도우 스토어앱에서 이 네임

스페이스를 이용하여 HID 프로토콜을 지원하는

장치를 검색하여 제어할 수 있다.

하드웨어 제조사들은 이미 HID 프로토콜에 대

해 잘 알고 있지만 통신을 하는 방법을 알기 위

해 윈도우 스토어앱의 네임스페이스 사용 방법

을 알아야 하며, 앱 개발자는 HID를 이용한 통신

을 하기 위한 프로토콜, 디바이스의 데이터 시

트 이해가 필요하다.

다음은 Windows.Devices.HumanInterfaceDe-

vice의 네임스페이스를 통하여 USB 통신을 지

원하는 HID 디바이스를 제어하는 모습이다. 코

드의 예는 XAML과 C# 으로 구성된 윈도우 스

토어앱이다.

그리고 HID 프로토콜을 지원하는 디바이스는

USB 장난감 액세서리인 ‘USB 미사일 런처’로

준비하였다.

Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기

46-51_OS_soft_MDS_12�.indd 47 13. 12. 24. �� 7:07

Page 3: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

48 Embedded World

윈도우 스토어앱에는 매니페스트 파일이 존재

한다. 이 매니페스트 파일 안에 로고의 모양,

앱의 이름 등을 정의할 수 있고 특정 장치 디

바이스 접근을 위한 권한을 지정할 수도 있다.

이번 앱에서는 HID 리소스를 접근할 것을 선

언하고 미사일 런처의 정보를 정의하여 접근

할 수 있다.

USB HID 미사일 런처를 PC에 연결하여 미사

일 런처 디바이스의 Function Type과 Device

ID(VID, PID)를 WDK 안에 툴인 HClient를 통해

알아낼 수 있다.

HClient를 통해 얻은 미사일 런처의 Function

Type 및 VID, PID를 클래스로 정의할 수 있

다. 미사일 런처의 VID와 PID는 각각 0x2123,

0x1010으로 확인되어 아래와 같이 선언하였다.

윈도우 스토어앱의 매니페스트에서 앱이 HID

디바이스를 접근할 수 있게 선언하고 VID, PID

를 사용하여 미사일 런처 클래스를 만들었다면

HID 디바이스를 검색하고, 초기화 할 수 있는 코

드를 사용할 수 있다.

HidDevice.GetDeviceSelector를 사용하여 미사

일 런처 클래스의 정보를 가지고 있는 selector

를 생성하고, 현재 PC 에 연결되어 있는 장비들

과 비교하여 selector와 정보가 맞는 HID 디바이

스를 생성한다. 그리고 FromIdAsync 함수를 통

하여 연결된 디바이스를 열수 있다.

윈도우 스토어앱에는 기존의 .NET 개발자에게

익숙하지 않은 몇몇의 함수가 존재하는데 그 중

에서 눈여겨봐야 할 부분이 비동기 함수이다.

O S / SOFTWARE

그림 1.

USB HID 미사일 런처의 모습

그림 4.

HID 디바이스 초기화 코드의 예

그림 3.

미사일 런처클래스 정의

그림 2.

윈도우 스토어앱의 매니페스트에 디바이스 접근 권한 및 Function Type 선언 모습

46-51_OS_soft_MDS_12�.indd 48 13. 12. 24. �� 7:07

Page 4: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

www.embeddedworld.co.kr 49

FindAllAsync, FromIdAsync 등 함수의 이름에

Async가 들어간 함수들은 비동기 함수이다. 비

동기 함수는 주변 장치들과 통신할 때 쓰레드의

낭비를 줄이고, CPU를 이용한 연산에 있어서는

태스크를 효율적으로 다룰 수 있는 기존의 동

기 방식과 비교했을 때 좀 더 유연한 프로그래

밍 방법이고 저전력 플랫폼에 적합한 모델이다.

Windows 8 이후로 많은 함수들이 이런 비동기

함수로 대체되었으므로 개발자들은 이 부분을

유의해서 살펴보아야 한다.

다음으로 HID 디바이스의 초기화가 끝났다면

직접 HID 디바이스의 버퍼에 접근하여 데이터

를 전달하여 미사일 런처를 조정할 수 있다. HID

디바이스로의 데이터 전송은 Windows. Stor-

age.Streams.DataWriter 클래스를 통해 전송할

수 있고 데이터 타입은 byte 타입의 9개의 배열

이 전달되어야 한다.(각각 HID 디바이스의 데이

터 배열의 크기나 키 조합은 다르므로 디바이스

들의 데이터 시트를 참고하도록 하자.) 데이터

시트에 따르면 데이터의 2번째 배열은 항상 2로

설정되어야 하며, 디바이스를 조정하는 값은 데

이터의 3번째 배열에 설정되어야 한다.

이 sendCommand 함수를 이용하여 미사일

런처에 미사일 발사 명령을 내리려면 sendCo

mmand(0x10);로 변수를 설정하여 호출하면 된

다. 매개변수인 0x10의 값은 buffer의 세 번째 배

열에 입력되어 HID 디바이스에 전송되면 미사

일 런처에서 미사일이 발사된다.

Bluetooth 디바이스 지원

Windows 8.1의 윈도우 스토어앱은 블루투스의

in-box 드라이버들(오디오, 헤드셋, 핸즈프리

등)외에 커스텀 블루투스 디바이스들과 통신을

위한 RFCOMM 통신 방식을 지원한다.

블루투스의 RFCOMM 통신은 RS-232 통신을

시뮬레이션 하거나 윈도우 소켓 통신을 사용할

수 있는 안정적인 데이터 통신 방법이다.

RS-232 통신 방법이나 소켓 통신 방법은 블루

투스를 통하여 통신할 수 있는 가장 간단한 방

법이기 때문에 커스텀 블루투스 디바이스 통

신에서 많이 쓰이는 방법이다. 다음 예제에서

Windows Embedded 8.1 Industry에서 지원되

는 Windows.Devices.Bluetooth.Rfcomm 네임

스페이스를 이용하여 윈도우 스토어앱이 RF-

COMM 통신을 이용하여 블루투스 디바이스를

그림 6.

HID 미사일 런처데모앱 실행 모습

Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기

그림 5.

HID 장비에 데이터를 보내는 소스

46-51_OS_soft_MDS_12�.indd 49 13. 12. 24. �� 7:07

Page 5: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

50 Embedded World

검색, 연결하고 제어하는 방법을 살펴보도록 한

다. 블루투스 RFCOMM 통신을 위하여 스페로

(Sphero)라는 디바이스를 사용하도록 한다.

윈도우 스토어앱이 블루투스 디바이스에 접근

하려면 최초에 Windows 8.1 PC 설정의 UI 에서

현재 연결 대기 중인 스페로와 페어링 작업이

이루어져야 한다.

페어링 후 HID 디바이스 앱과 마찬가지로 윈

도우 스토어앱에서 매니페스트에 블루투스RF-

COMM 디바이스 접근을 위한 권한을 선언해

야 한다.

매니페스트 수정 후 직접 소스를 통해 현재 PC

에 연결되어 있는 블루투스 RFCOMM 디바이

스들을 검색하고, 선택한 블루투스 RFCOMM

장치를 연결하는 소스를 아래에서 확인할 수

있다.

사용되는 API는 HID 디바이스 연결과 마찬가지

로 FindAllAsync, FromIdAsync 등의 비동기API

가 사용되었다.

그리고 블루투스 장치 연결 후 데이터 통신은

소켓통신을 이용하도록 한다.

블루투스 RFCOMM 디바이스의 연결이 성공했

다면 스페로는 기본 색상인 파란색으로 변하게

된다. 여기에 소켓통신을 통해 개발자는 스페로

를 움직이거나 색을 바꾸는 등 여러 가지 동작

을 명령할 수 있다. 스페로에 데이터를 전송할

때는 스페로의 데이터시트를 참고하여 명령할

수 있다. 다음은 스페로에 색을 바꾸기 위해 명

령하는 예이다.

우선 스페로의 데이터 시트를 참고하여 ‘Client

Command Packets’의 데이터 구성을 통해 스

페로에 명령하는 데이터 구조를 파악할 수 있

다. 색을 바꿀 수 있는 명령 데이터 구조는 DID,

CID, DLEN의 데이터가 각각 0x2, 0x20, 0x5

로 설정이 되어 있어야 하며 색 데이터 RGB

값을 <data>에 선언함으로써 실제의 색을 바꿀

수 있다.

그림 10.

블루투스 RFCOMM 디바이스 연결의 모습

그림 9.

윈도우 스토어앱의 매니페스트에 블루투스 RFCOMM 디바이스 접근 권한 선언 모습

O S / SOFTWARE

그림 7.

스페로의 모습

그림 8.

46-51_OS_soft_MDS_12�.indd 50 13. 12. 24. �� 7:07

Page 6: Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기 Embedded 8.1 Industry의... · 2014-01-15 · 고, 이런 API들로 만들어진 앱들은 ‘윈도우 스토

www.embeddedworld.co.kr 51

위에서 확인한 데이터 구조에 따라 실제 패킷

을 입력하는 부분을 C# 코드로 아래와 같이 사

용할 수 있다.

설정된 패킷을 블루투스 장비에 보낼 때 역시

Windows.Storage.Streams.DataWriter 클래스를

사용한다. 스페로의 데이터 시트를 잘 살펴보면

색 변경뿐만 아니라 스페로의 회전, 움직임, 가

속 등 여러가지 명령을 내릴 수 있는 데이터 구

조가 준비되어 있다. 개발자가 원하는 스페로의

행위를 명령하고자 할 때는 스페로의 데이터 시

트를 참고할 수 있다..

마치며

지금까지 Windows 8.1이 적용된 마이크로소

프트 임베디드OS인 Windows Embedded 8.1

Industry에서 USB, HID, 블루투스 RFCOMM 통

신이 윈도우 스토어앱에서 어떻게 사용되는지

살펴보았다. Windows Embedded 8.1 Industry

에서는 위에서 언급한 통신 외에도 블루투스 최

신 버전 블루투스4.0을 지원하는 GATT API를

이용하여 블루투스LE(low energy)장비들과 통

신할 수 있다.

또한 와이파이를 이용한 대용량 파일 전송 기술

인 와이파이다이렉트, 3D 프린터 지원 등 다양

한 인터페이스를 통해 다른 디바이스들과의 통

신을 지원한다.

Windows Embedded 8.1 Industry에서 제공하

는 API를 사용하면 임베디드 시장에서 중요한

이슈인 디바이스들간 통신을 지원하는 윈도우

스토어앱을 개발할 수 있을 것이다.

이제 Windows Embedded에 윈도우 스토어앱

을 사용하여 모바일 환경에 적합한 앱을 만들

어 보자.그림 12.

블루투스 디바이스에 색을 바꾸는 소스

그림 11.

스페로의 색상을 바꾸기 위한 데이터 구조

Windows Embedded 8.1 Industry의 디바이스 연결 API 활용하기

MDS테크놀로지 홈페이지: www.mdstec.com

윈도우임베디드 솔루션: www.embedsolution.com

윈도우임베디드 개발자 커뮤니티: www.iwecom.co.kr

참고

46-51_OS_soft_MDS_12�.indd 51 13. 12. 24. �� 7:07