Bluetooth-Remote Winamp WEM1 Projekt Anders Bilde (06740) Kim Thomsen (06768) Peter Bertelsen (05210) IHA d. 4. juni 2009 0
Indholdsfortegnelse Figuroversigt... 2 Indledning... 3 System introduktion... 4 Systemets grænseflader... 6 Arkitekturisk design... 7 Bluetooth over Firefly... 8 Konfiguration af switches... 8 LED er... 9 Jumper konfiguration... 9 Interne kommandoer... 10 Server / klient protokol... 11 Software design... 12 Klient... 12 GUI... 12 BLL... 14 Server... 15 Resultater... 16 Systemets fremtid... 16 Konklusion... 17 1
Figuroversigt Figur 1 - Oversigtsdiagram over systemet... 3 Figur 2 - Skærmbillede af skanning og tilslutning... 4 Figur 3 - Skærmbillede af Winamp fjernstyringen... 5 Figur 4 - Skift til forrige nummer... 6 Figur 5 - Skift til næste nummer... 6 Figur 6 - Skru ned for volumen... 6 Figur 7 - Skru op for volumen... 6 Figur 8 - Arkitekturisk opdeling af systemet... 7 Figur 9 - Firefly konfigureringsswitch... 8 Figur 10 - Switch 4 konfigureres til: ON (9600 baudrate) (hvid betyder ON)... 8 Figur 11 - Klient med Firefly... 9 Figur 12 - Konfigurering til: DCE female med CTS (Clear To Send)... 9 Figur 13 - Liste over server/klient protokol... 11 Figur 15 - Lagdelt klassediagram over klient programmet... 12 Figur 16 - Skærmbillede af en fejlbesked... 13 Figur 17 - Root/Child window... 14 Figur 18 - Klassediagram over server programmet... 15 Figur 19 - Server GUI, som læser fra en given COM port... 15 2
Indledning Til eksamensprojektet i faget Windows Embedded 1 (WEM1), fik vi til opgave, at udarbejde et projekt, som skulle basere sig på enten Windows.NET Micro Frameworket eller Windows CE. Vi valgte at lave en fjernstyring af musikafspilningsprogrammet Winamp over Bluetooth. Idéen med projektet er, at man kan styre Winamp, som er installeret på en PC med indbygget Bluetooth, direkte fra et Tahoe-II kort med et tilsluttet Bluetooth device. Systemet består af følgende hardware: Tahoe-II kort. Firefly Bluetooth device. Klient PC, der er forbundet til Tahoe kortet (udelukkende til deployment af programmet). Server PC, med indbygget Bluetooth. Systemets software består af følgende dele: Et klient program (BT-RemoteWinamp), som kører på Tahoe kortet. Et server program, som bl.a. læser på Bluetooth COM-porten samt håndtering af Winamp kommandoer. Nedenfor ses opsætningen af systemet. Klient PC en (til venstre) er tilsluttet Tahoe kortet gennem et USB kabel. Firefly en er tilsluttet Tahoe kortet s COM port (i midten), og kommunikerer med server PC en (til højre) over Bluetooth. Winamp, som er installeret på server PC en, startes og styres så via bl.a. Tahoe kortets trykfølsomme skærm. Figur 1 - Oversigtsdiagram over systemet 3
System introduktion Systemets hovedfunktionaliter er som følger: Når programmet startes op på Tahoe kortet, kan brugeren skanne efter tilgængelige Bluetooth enheder, for derefter at tilslutte til den ønskede enhed. Figur 2 - Skærmbillede af skanning og tilslutning Brugeren kan styre Winamp ved tryk på Tahoe kortets skærm. Dette indebærer: o Play, stop, pause, næste/forrige nummer, volume op/ned, slå repeat (gentag) til/fra, slå shuffle (bland) til/fra, samt springe til en bestemt position i nummeret. meret. Vise brugeren informationer omkring det aktuelle nummer, hvilket indebærer: o Afspillet tid, kunstner + titel samt en progress-bar til visning af nummerets aktuelle position. 4
Figur 3 - Skærmbillede af Winamp fjernstyringen Den orange linje i midten af skærmbilledet, under sangtitlen, repræsenterer progressebaren - den sorte firkant viser positionen. 5
WEM1 Projekt Bluetooth Bluetooth-Remote Winamp Systemets grænseflader Brugergrænsefladen er designet på en sådan måde, så brugeren har flere forskellige måder at fjernstyre Winamp på. Den primære styringsmetode metode er gennem den trykfølsomme skærm. Derudover kan brugeren navigere rundt i Winamp ved at trykke på de 5 hardware-knapper på Tahoe kortet (SW5-9). (SW5 I det første skærmbillede, hvor man vælger hvilken Bluetooth enhed man vil tilslutte, virker SW5 som pil-op, pil SW9 som pil-ned ned og SW7 som enter. Til sidst kan brugeren, når denne er kommet ind til Winamp skærmbilledet, anvende Tahoe kortets accelerometer til at skifte nummer hhv. frem og tilbage, samt skrue op og ned for volumen. Der skiftes til forrige rige nummer ved at vippe kortet ind i mod sig selv. Tiltes kortet væk fra sig selv, skiftes til næste nummer. Der skrues ned for volumen ved at tilte kortet til venstre, og tiltes til højre, hvis man ønsker at skrue op. Figur 4 - Skift til forrige nummer Figur 5 - Skift til næste nummer Figur 6 - Skru ned for volumen Figur 7 - Skru op for volumen 6
Arkitekturisk design Figur 8 - Arkitekturisk opdeling af systemet Vi har anvendt er et Tahoe-II kort fra firmaet Device Solutions. Dette var nærliggende, da vi igennem undervisningen, har lært om kortets funktionaliteter. Samtidig har kortet alle de funktionaliteter, vi havde brug for til vores Winamp projekt nemlig en trykfølsom skærm, knapper, accelerometer, samt COM-port for tilslutning af en Bluetooth device, i vores tilfælde en Firefly Bluetooth Serial Adapter. Se Figur 1 for systemets opsætning. De hardwaremæsssige tilslutninger er som følger: - Tahoe-II kort, som er tilsluttet en PC gennem USB-kabel. - Firefly Bluetooth Serial Adapter, som er tilsluttet Tahoe kortet gennem DB9 serial port (COM port). - Firefly, som er tilsluttet en PC gennem Bluetooth. Denne PC skal have Winamp installeret. Det første punkt ovenfor, er udelukkende til brug for overførsel (deployment) af klient-programmet til Tahoe kortet. I den færdige opsætning, er det derfor ikke nødvendigt med denne tilslutning, da programmet da vil ligge i hukommelsen på Tahoe kortet. 7
Bluetooth over Firefly For at kunne kommunikere trådløst fra Tahoe kortet, har vi valgt at anvende Bluetooth. Da USB-porten allerede anvendes til debugging og strømforsyning til kortet, valgte vi at anvende en Bluetooth Firefly Adapter, der tilsluttes serielporten på kortet. Fordelen ved Bluetooth er, at vi kan sende og modtage direkte over serielporten, efter 2 Bluetooth enheder er blevet paired. Konfiguration af switches På undersiden af Firefly en sidder nogle switches, som gør det muligt at ændre visse indstillinger og f.eks. nulstille til standard indstillingerne. Da vi ikke anvender 2 forskellige Firefly s i dette projekt, er det ikke relevant at anvende auto master eller auto discover, der gør det muligt, nemt at lade 2 enheder forbinde til hinanden. Firefly en skal dog anvende en baudrate på 9600 for at kunne kommunikere korrekt, dvs. switch 4 skal indstilles til ON=9600. Figur 10 - Firefly konfigureringsswitchingsswitch Figur 9 - Switch 4 konfigureres til: ON (9600 baudrate) (hvid betyder ON) 8
LED er Firefly en en er udstyret med 3 forskelligt farvede LED er, der gør det nemt at se hvilken kommunikation der foregår og hvilken state den pt. befinder sig i. Status LED Lokal transmit LED Remote transmit LED Den grønne LED (status) angiver hvilken state Firefly en befinder sig i, og er defineret ud fra følgende tabel: State Status LED blinkehastighed Konfigurering 10 gange i sekundet Startup, fjern-konfigurering 2 gange i sekundet Idle 1 gang i sekundet Forbundet Konstant Både den gule og den røde LED er direkte hardware forbundet, og blinker når der er kommunikation, henholdsvis lokalt (over serielporten) eller remote (over Bluetooth). Jumper konfiguration For at Firefly en skal kunne tilsluttes serielporten på en anden enhed, er det vigtigt at jumperne er konfigureret korrekt. Da Firefly en skal tilsluttes Tahoe kortet (female DTE), jumpes 1+3 og 2+4 og for at data flow et bliver kontrolleret korrekt, jumpes 9+10 (CTS til RTS). Figur 11 - Klient med Firefly Figur 12 - Konfigurering til: DCE female med CTS (Clear To Send) 9
Interne kommandoer Firefly en kontrolleres vha. kommandoer sendt over serielporten. Følgende kommandoer er anvendt i vores protokol, for at kunne anvende og forbinde Firefly en korrekt: Kommando Alias Kommando CMD mode krævet* Firefly respons / action Enter CMD mode $$$ Nej CMD, ellers intet. Exit CMD mode --- Ja END, ellers ERR. Connection status GK Ja 1, hvis forbundet, ellers 0. Kill connection K Ja Kill, hvis forbindelse afbrudt korrekt, ellers ERR. Inquiry scan I,<time> Ja Retunerer alle fundne Bluetooth enheder, med navn og adresse. Store address SR,<adresse> Ja AOK, ellers ERR. Connect C Ja TRYING og forbinder til den gemte adresse. Ellers intet. Pass through P,<text> Ja Sender tekst uden at eksekvere kommandoer. *For at kunne eksekvere kommandoer, kræves det at CMD mode aktiveres. 10
Server / klient protokol Da Firefly en ikke automatisk sender svar tilbage om den er forbundet korrekt over Bluetooth, har vi valgt at implementere vores egen connection handshake. Klienten sender kommandoen CONNECTED? for at forespørge om den er forbundet, og anvender P, foran, for ikke at blive ignoreret i CMD mode. Derudover har vi implementeret en disconnected kommando, til at fortælle serveren, at klienten ikke længere er forbundet og en lang række kommandoer, til at kontrollere Winamp. Disse er enten envejs (ingen server respons), eller kræver en respons fra server: Client Request Server Response P,CONNECTED? CONNECTOK disconnected - nexttrack - prevtrack - play - stop - pause - volumeup - volumedown - shuffle - repeat - getcurrentsongtitle <sangtitel> openwinamp - getshufflestatus 1 ved ON, 0 ellers. getrepeatstatus 1 ved ON, 0 ellers. gettracklenght <Længde i hh:mm:ss> gettrackposition <nuværende position i hh:mm:ss> gettimeleftoftrack <Tid tilbagei hh:mm:ss> setvolume - closewinamp - gettracklenghtinseconds <Længde i sekunder> gettrackpositioninseconds <Nuværende position i sekunder> getplaybackstatus 1, hvis aktiv, 2 hvis stoppet. settrackposition - Figur 13 - Liste over server/klient protokol 11
Software design Klient Figur 14 - Lagdelt klassediagram over klient programmet Vi har delt systemet op i 2 lag: GUI og BLL. GUI I Micro Frameworket findes der stort set ingen GUI komponenter, og da vi skulle udvikle en brugergrænseflade til en touchscreen, var vi nødt til at lave næsten alle komponenterne selv. På alle elementer tjekker vi, om der er trykket på knappen, inden vi sender et event tilbage. Dette gør vi, for bedre at kunne kontrollere hvilke events der skal trigges. Når elementer skal tilføjes til panelet, er det vigtigt, at de bliver tilføjet fra toppen og ned (i vores system). Hvis de ikke tilføjes korrekt, er der nemlig mulighed for, enten at det forkerte event bliver triggered, eller at der slet ikke bliver triggered nogle events. 12
WEM1 Projekt Bluetooth Bluetooth-Remote Winamp Exception håndtering ering har vi udbygget til GUI en, så når de kastes,, vises som en knap på skærmen, med teksten på den aktuelle exception. På figuren nedenfor har vi prøvet at tilslutte til enheden peter, peter men der opstod en fejl under tilslutningen ( peter havde ikke aktiveret akti Bluetooth). Derfor udskrives fejlbeskeden på knappen. Figur 15 - Skærmbillede af en fejlbesked GUI en indeholder to vinduer. Ett vindue hvor man ma kan oprette forbindelse til et Bluetooth luetooth device (ConnectionWindow), og et vindue til at styre Winamp (WinampControl). 13
Vores første udgave af GUI en kørte i en fil, hvor panelet blev clearet, hver gang der blev skiftet side. Dette var uhensigtsmæssigt, da det nærmest vil være umuligt at videreudvikle på. Derfor delte vi det op i flere filer, nemlig ConnectionWindow og WinampControl. ConnectionWindow ligger i samme fil som main en og fungerer som root vinduet. Når der skal vises et nyt vindue, sættes root element s visability til hidden og fokus sættes til det nye vindue, hvorefter det vil fungere ligesom et root element. Når vinduet så lukkes, vil fokus sættes tilbage til root elementet. Denne opbygning gør det nemt at lave flere vinduer til systemet, da man bare sætter sin nye klasse til at nedarve fra childwindow'. Figur 16 - Root/Child window BLL Validate klassen er statisk, forbi der ikke er nogen grund til at oprette et objekt af en funktion, der kun skal validere én inputstreng. serialext klassen er en extension af.net Micro Frameworkets egen SerialPort klasse og er udarbejdet af Pavel Bansky. Den udbygger klassen med normale.net funktioner såsom ReadLine() og ReadTo(). Dog er den udarbejdet til version 2 af frameworket, så vi har modificeret og tilføjet funktioner, for at gøre den mere brugbar. 14
Server BTRemoteServer SerialPortHandler WinampControl WinampFront EndLib Winamp.exe Figur 17 - Klassediagram over server programmet BTRemoteServer indeholder udelukkende GUI til server siden. SerialPortHandler varetager kommunikationen over serielporten. Derudover eksekverer den de forskellige Winamp kommandoer gennem WinampControl klassen, som modtages på Bluetooth serielporten fra klienten. WinampFrontEndLib er et C# API der er baseret på Win32 Message API. Denne indeholder logikken til selve kontrollen af Winamp, vha. diverse konstanter og funktioner til at udføre de forskellige Winamp kommandoer. Figur 18 - Server GUI, som læser fra en given COM port 15
Resultater Vores Winamp fjernstyring virker som tiltænkt. Vi kan styre de grundlæggende Winamp funktionaliteter via Tahoe kortets skærm, knapper og accelerometer. Vi kan starte Winamp på server PC en, starte/stoppe/pause numre, gå frem og tilbage i playlisten, slå bland og gentag funktioner til og fra, samt skrue op og ned for volumen. Derudover kan vi springe til en bestemt tidsposition i numrene. Den trådløse kommunikation over Bluetooth virkede som den skulle. Firefly en, som vi har anvendt, har også været stabil. Vi har på intet tidspunkt oplevet, at have mistet Bluetooth forbindelsen, når vi har været forbundet til den. Systemets fremtid I en fremtidig version af systemet, vil det være nærliggende, at implementere en funktion, der muliggør, at brugeren kan lede efter et bestemt nummer på Winamp playlisten. Hvis dette skal kunne lade sig gøre, bliver brugeren nødt til, at få vist et tastatur på skærmen, så han/hun kan indtaste navnet på det ønskede nummer. En anden mulighed er, at få vist hele playlisten på skærmen, så brugeren vil kunne bladre igennem listen. En kombination af de to ovenstående udvidelsesmuligheder vil dog være at foretrække. Dvs. mulighed for at få vist playlisten, for herefter at få vist et skærmtastatur, så der kan søges efter et bestemt nummer. Som systemet er pt., kræves det, at man sidder med Tahoe kortet i hånden, når man skal fjernstyre sit Winamp. Tahoe kortet kræver strømtilslutning, og det er derfor noget upraktisk. Vores oprindelige idé var derfor også, at systemet skulle kunne køre på en mobiltelefon med.net Compact Framework. På denne måde, vil der blive tale om en decideret Winamp fjernbetjening. I fremtiden skulle systemet derfor udvikles til.net Compact Frameworket. 16
Konklusion Vi kan konstatere at vores system virker efter hensigten. De krav vi satte fra start af, er stort set alle blevet opfyldt. Vi kan fjernstyre Winamp over Bluetooth gennem Tahoekortets trykfølsomme skærm. Vi nåede dog ikke at få porteret systemet til.net Compact Frameworket. Mht. opbygning af en grafisk brugergrænseflade i Micro Frameworket, har vi erfaret, at det ikke er helt så ligetil. De fleste af komponenterne skal nemlig bygges fra bunden. Sammenlignet med GUI opbygning i f.eks. et WPF-projekt, har dette dermed været mere tidskrævende. Generelt synes vi, at projektet har gives os en del erfaring indenfor Micro Frameworket. Vi synes også det har været en spændende arbejdsproces, da vi selv måtte bestemme emnet for projektet. Samtidig har vi fået kendskab til, hvordan kommunikationen over Bluetooth fungerer. Anders Bilde (06740) Kim Thomsen (06768) Peter Bertelsen (05210) 17