Konkuk University, Computer Science & Engineering Android 기반의 USB 통신을이용한 Smart Phone Mouse ANDROID 기반의 USB 통신을 이용한 SMART PHONE MOUSE PROJECT INTERIM REPORT. Jin, Hyun-wook Professor System Software Lab, Konkuk Univesity Lim, Min-woo (200910793) Park, Mi-Gwan(200911388) Lee, Young-jun (200911412)
목차 (CONTENTS) 내용 개요 (Introduction) 1 프로젝트환경 (Project Environment) 2 요구사항 (Requirement) 3 개발방법 (Development Process) 4 진행상황 (Progress) 10 개발일정 (Development Schedule) 11 참고문헌 (References) 12
개요 (INTRODUCTION) 개요 (Introduction) 개발배경 노트북터치패드사용이불편한사람들은따로마우스를구매하여소지하고다녀야한다. 이런불편함을해소하기위해대부분의사람들이들고다니는스마트폰의센서를이용하여마우스로구현한다. 개발목적 노트북의터치패드사용에한계를느끼는사용자는마우스를별도로구매하여야하며, 이동시에항상노트북과함께마우스를들고다녀야한다. 대부분의사람들이항상소지하고다니는스마트폰이마우스로사용될수있다면, 이와같은불편함을해소시켜줄것이다. 기존의스마트폰마우스서비스는노트북터치패드사용방식의불편함을해소하는것이아닌, 스마트폰의무선통신을이용한노트북원거리제어에초점이맞춰져있다. 또한모두추가적인어플리케이션의설치를요구한다. 본프로젝트는어플리케이션설치가아닌 Kernel과 Framework에새로운메커니즘을추가함으로서안드로이드스마트폰의기본탑재기능과같이동작하도록하며, 터치패드가아닌실제마우스와같은사용방식을제공한다. 그리고기존의 USB 케이블연결을통한 USB 통신을사용함으로서데이터통신이되지않는환경에서도작동한다. < 그림 > 별도의마우산 App 이필요없는스마트폰의기본기능 1
프로젝트환경 (PROJECT ENVIRONMENT) 프로젝트환경 (Project Environment) 대상환경 (TARGET ENVIRONMENT) Windows 7 Professional 32bit Android 4.4.2 KitKat (Nexus 5) Linux Kernel 3.4.0 < 그림 > Android 시스템구조 개발환경 (HOST ENVIRONMENT) Windows 7 Professional 32bit Android 4.4.2 KitKat (Nexus 5) Linux Kernel 3.4.0 Visual Studio Professional 2013 Vi(m) Editor ADT 22.3.0 WDK 8.1 2
요구사항 (REQUIREMENT) 요구사항 (Requirement) 기술적요구사항 (FUNCTIONAL REQUIREMENTS) 1. Windows Device Driver 를개발하여스마트폰연결시자동실행한다. 2. Windows 와 Android 간의통신은 USB 통신을한다. 3. Android Kernel 에마우스통신을위한별도의파이프를생성한다. 4. 스마트폰에서마우스기능을 On/Off 할수있다. 5. 스마트폰화면이꺼져도마우스기능이켜져있으면마우스가동작한다. 비기술적요구사항 (NON-FUNCTIONAL REQUIREMENTS) 1. 사용자는어떠한안드로이드어플리케이션을설치하지않는다. 2. 사용자는어떠한윈도우어플리케이션을설치하지않는다. 3. 스마트폰사용에는어떠한영향도미치지않는다. 3
개발방법 (DEVELOPMENT PROCESS) 개발방법 (Development Process) 개발은크게 Windows 와 Android 로나누어서진행한다. Windows 에서는 Device Driver 를만들어스마트폰연결시마우스기능이자동실행되게한다. Android 는가속도와자이로스코프센서를이용하여마우스값을축출및필터링하고, USB 파이프를이용하여 Windows 로마우스값을전송한다. 시스템구성도 < 그림 > 시스템구성도 4
개발방법 (DEVELOPMENT PROCESS) 마우스동작구현 센서값축출대부분의스마트폰에기본적으로탑재되어있는자이로스코프센서와가속도센서그리고터치패널을이용해서마우스의동작을구현한다. 자이로스코프센서와가속도센서를이용해서는마우스포인터의움직임을구현하며터치패널을이용해서좌우버튼과휠의동작을구현한다. < 그림 > 안드로이드스마트폰에서발생하는각종센서값의흐름 안드로이드스마트폰의모든센서장치들은최하단리눅스커널에서관리되며, 디바이스들로부터발생되는값들은최상단사용자어플리케이션계층까지한단계씩상승한다. 본프로젝트에서는사용자입장에서의기존스마트폰사용성에어떠한영향도없이, 그리고사용자의어떠한부가적인어플리케이션설치요구도없이마우스기능이동작하는것을목표로한다. 그러므로마우스동작에필요한센서값들은최하단계층에서바로추출하는것을기본으로하며, 각종보호기법으로인하여해당계층에서추출이불가능한상황이발생하면한계층씩올라가며추출한다. 센서값필터링가속도와자이로스코프와같은센서를사용할때, 단순히전달된센서값을그대로사용할경우급격한변화에의해마우스포인터의움직임이불안정할수있다는것이다. 이같은경우변화를완충하기위해데이터에저역통과필터 (Low-Pass Filter:LPF) 를적용한다. 저역통과필터를사용할때에는결과데이터를추출하기위해사용되는알파값이필요한데이것은아래와같은연산결과로산출된다. 5
개발방법 (DEVELOPMENT PROCESS) Alpha = t / (t + dt) t : 저속통과필터의시정수 dt : 이벤트전송율혹은이벤트전송속도여기서시정수란센서가가속도의 63% 를인지하는데걸리는시간을말한다. 위와같은알파값은 0.8로산출되며알파에직전센서값을곱하고, (1 - Alpha) 에현재센서값을곱하여더해주면필터링된움직임값을얻을수있다. < 그림 > 센서의좌표체계 자이로스코프센서는 x, y, z 축의변화를추적하여안드로이드스마트폰의회전률을정확하게알아낼수있다. 그리고가속도센서는특정지점에서특정지점으로이동하는벡터형태를인지할수있지만, 곡선이나트위스트형태의움직임은인지할수없다. 정리해보자면가속도센서는직선방향의움직임을, 자이로스코프센서는곡선 ( 회전 ) 을인식할수있다. 그러므로두센서를적절하게섞어서사용할경우회전을인지하지못하는실제광센서마우스보다더나은동작을구현할수있다. 센서값가공가속도센서는사물의움직임을측정하는데이움직임을이용하여다른성질을가지는데이터로가공할수있기때문에여러방법으로연산을하여사용하곤한다. 본프로젝트에서와같이순수한움직임만을측정하는경우에는중력의영향을받고있는축의데이터에서 9.81을빼주어야하고, 가속도를측정하려면 2개이상의데이터를모아서연산을해주어야한다. 실제마우스포인터의움직임은가속도가반영되어같은거리로마우스를움직이더라도느리게움직일때와빠르게움직일때마우스포인터의이동거리는다르다. 이와같은부분은반복적으로테스트하며가공알고리즘을작성하여실제마우스와동일한움직임을보이도록한다. 이와같은특징은휠의움직임에서도동일하게적용된다. 휠의회전량과회전속도를함께고려하여실제 6
개발방법 (DEVELOPMENT PROCESS) 마우스와동일한움직임을보이도록한다. < 그림 > 터치패널의분할 사용자는터치패널을실제마우스를사용할때와같은느낌으로사용한다. 여러사용자들의사용습관을테스트하여적절한좌우버튼및휠그리고비사용범위를지정한다. 위와같은과정을거쳐, PC-스마트폰통신모듈에게실제마우스와같이좌우버튼의눌림여부, 휠의움직임그리고마우스포인터의움직임에대한완전히가공된값을미리정해진규약에맞게제공한다. 마우스 ON/OFF 기능 안드로이드토글버튼안드로이드스마트폰사용자는본프로젝트로인해스마트폰에기본으로탑재된듯한마우스기능을상단바의토글버튼중하나로끄거나켤수있다. 어떠한어플리케이션의설치도요구되지않는다. < 그림 > 토글버튼구현예시 7
개발방법 (DEVELOPMENT PROCESS) 센서 Sleep 방지기본적으로안드로이드스마트폰은일정시간사용이되지안으면 Sleep 모드에돌입한다. 이상태에서는화면은물론모든센서들이동작하지않는최대절전모드가된다. 본프로젝트의마우스동작의실제구현은어플리케이션보다하단계층에서모두이루어지므로마우스기능이 On 상태라하더라도터치이벤트만발생하지않으면 Sleep 모드에돌입가능하다. 또한원래 Sleep 모드에머물고있었더라도 PC와케이블이연결되면마우스기능은곧바로동작해야한다. 이와같이동작하기위해서는스마트폰이 Sleep 모드에돌입하더라도본프로젝트의마우스기능에사용되는터치패널과자이로스코프및가속도센서는계속해서동작해야한다. 이와같은문제는 Sensor Keep Awake 이슈라불리며, 해결하기위한어플리케이션계층의 API 함수가존재한다. 본프로젝트에서어플리케이션계층의이용은지양하므로토글버튼의 On/Off와곧바로연동되도록 Framework 계층에서의해법을찾는다. WINDOWS DEVICE DRIVER KMDF (Kernel Mode Driver Framework) Windows Driver 개발을위해서는 WDM(Windows Driver Model) 이후버전으로나온 WDF(Windows Driver Foundation) 를사용하였다. WDF는윈도우 2000 이후의윈도우를위한고품질의믿을수있는드라이버를만드는데도움을주는마이크로소프트도구이다. WDF는 KMDF(Kernel Mode Driver Framework) 와 UMDF(User Mode Driver Framework) 두가지종류로나뉜다. KMDF는표준커널모드장치드라이버작성용이고, UMDF는사용자모드에서실행할수있는특정한클래스의드라이버작성용이다. 우리프로젝트에서는마우스제어를하기위해커널모드에서작동하는 KMDF를채택하였다. INF INF파일혹은 Setup Information file은윈도우의소프트웨어나드라이버를설치하기위해서마이크로소프트에서제공하는텍스트파일이다. 드라이버설치를위해서 inf파일에드라이버경로및설치에필요한작업등을나열해놓는다. 8
개발방법 (DEVELOPMENT PROCESS) < 그림 > INF 파일구조 HID Midi Driver 본프로젝트에서는스마트폰을마우스로인식하여야한다. 그리고실제마우스값이아닌패킷을통해마우스를움직여야하므로실제마우스드라이버를만들면데이터를받을수가없어서제대로된동작을하지않게된다. 그리하여 KMDF를기반의 HID Mini Driver를개발하였다. HID Mini Driver는 Filter Driver로서 HID 디바이스의드라이버스택에연결된다. 그리하여 USB 통신을사용가능하고, HID Class Driver와통신가능하다. < 그림 > 드라이버스택구조 9
진행상황 (PROGRESS) 진행상황 (Progress) < 그림 > 현재진행상황 10
개발일정 (DEVELOPMENT SCHEDULE) 개발일정 (Development Schedule) < 그림 > 개발일정 11
참고문헌 (REFERENCES) 참고문헌 (References) 윈도우 USB 디바이스드라이버 (2011), 하마다켄이치로, 에이콘출판사 IT EXPERT 리눅스디바이스드라이버 (2005), 유영창, 한빛미디어 리눅스커널심층분석 (2012), 로버트로브, 에이콘출판사 안드로이드의모든것분석과포팅 (2011), 고현철, 유형목, 한빛미디어 12