Windows - Az Universal Plug and Play technológia bemutatása

Az 1992-ben megszületett Plug and Play továbbfejlesztéseként a Microsoft létrehozta az Universal Plug and Play (UPnP) technológiát. Azóta számos nagy cég csatlakozott a programhoz és vett részt a fejlesztésben, melynek célja, hogy a könnyen konfigurálható intelligens eszközök (kamkorderek, manager kalkulátorok, digitális fényképezőgépek, palmtopok és minden, ami támogatja az UPnP-t, még akár a hűtőszekrény vagy a klímaberendezés is) minél egyszerűbben legyenek csatlakoztathatók a számítógépes hálózatokhoz. Cikkünkben röviden bemutatjuk a technológia lényegét, Windows-beli megvalósítását és használatának néhány mozzanatát VBScript példákon keresztül.
A technológia egyik legfontosabb feladata az eszközfüggetlenség, aminek egyenes következménye lett a rendkívül széleskörű alkalmazhatóság. Ma már természetesnek mondható, ami néhány évvel ezelőtt még csak álom volt, hogy például egy digitális fényképezőgépet USB kábelen keresztül összeköthetünk a PC-vel. Azonnal megtörténik az új eszköz detektálása és használatba vétele, ha az operációs rendszer nem tartalmaz hozzá beépített támogatást – eszközmeghajtó formában – akkor egy behelyezett, automatikusan induló CD-ről, néhány egérkattintással telepíthető a gyártó által adott program és ezt követően bármikor csatlakoztatható egymáshoz a két eszköz. A PC képes letölteni a fényképezőgépben tárolt képeket és a monitoron keresztül kényelmes, jól használható programokkal módosíthatók a fényképezőgép beállításai, nincs szükség a saját menüjének használatára sem. Mindehhez nem szükséges a PC újraindítása vagy méregdrága kártyák vásárlása sem. Ez ugye egy kicsit messze van attól az állapottól, amikor a DOS korszakban egy hangkártya telepítéséhez egzakt módon tudni kell és meg kellett adni a hardver I/O címét, használandó megszakításának számát, valamint a DMA csatornák számát, amit előzőleg jumperek segítségével állítottunk be? Ha valamiben tévedtünk legjobb esetben nem szólt a hang, de az is előfordult, hogy nem működött a floppy vagy egyszerűen nem indult el a gép.
A kevésbé műszaki beállítottságú felhasználók számára áttörést jelentett a PnP technológia megjelenése, melyet a kezdeti időszakban sok támadás ért a megbízhatatlansága miatt. Ahogy telt az idő egyre jobban letisztultak a funkciók és igazi szabvánnyá vált. Ma már el sem lehetne képzelni nélküle az életet, de a PC-s világból való kitörésre szükség volt némi továbbfejlesztésre. Ez lett az Universal Plug and Play.
A (közel) jövő
Az UPnP elsősorban otthoni felhasználásra készült és csak másodsorban vállalati, ipari alkalmazásra. Mivel gyakorlatilag minden elektronikus eszközbe elhelyezhető – példát már láttunk a fényképezőgép esetében – ezeket hálózatba kötve egy lakás teljes automatizálása megoldható, kezdve a bejárati ajtó kinyitásától. Semmi akadálya annak (és ezt Japánban már meg is valósították), hogy a hűtőszekrény az Interneten keresztül pótolja a fogyásnak indult fagylalt készletet. A fizetés megoldható banki átutalással, már csak azt kell összehangolni, hogy akkor legyünk otthon, amikor a szállítás történik vagy éppen fordítva: akkorra kérjük a szállítást, amikor otthon vagyunk - ez kiolvasható az Outlook határidőnaplójából…
A minél szélesebb körű elterjedésnek nincs semmilyen elvi akadálya, mert a teljes UPnP már létező szabványokon alapulva létező technológiákat alkalmaz! Nincs szükség további fejlesztésekre ezzel kapcsolatban, de ez nem jelenti azt, hogy megálltak volna a tökéletesítésben, sőt…
Támogatás Windows részről
A Windows Me volt az első operációs rendszer, mely támogatta az UPnP technológiát – miután bekapcsoltuk ezt a funkciót. Windows 98 alá külön telepíteni kell, az XP pedig bekapcsolás nélkül is automatikusan tartalmazza és használja. Maga az UPnP azonban nem operációs rendszerfüggő, még akkor sem, ha Microsoft kezdeményezésről van szó.
UPnP-vel az eszközök tulajdonképpen egy Peer-to-Peer hálózatot alkotnak, ahol minden tag egyenlő elbánásban részesül, nincsenek hagyományos értelemben vett szerverek és munkaállomások. Az adatok szolgáltatására és vételére mindegyik eszköz alkalmas, a szoftverek gondoskodnak arról, hogy a megfelelő információ a megfelelő helyre jusson el. Fent említettük az Internetre való csatlakoztatás lehetőségét is, talán nem is kell említenünk, hogy az UPnP kommunikáció alapprotokollja a TCP/IP, de támogatja még az UDP-t, HTTP-t és a szintén platform független XML-t.
Gyakorlatilag nem igényel karbantartást az Internetnek köszönhetően a Föld két ellentétes pontja között ugyanúgy használható, mint egy lakáson belül. Független az átviteli közegtől és a sávszélességtől, használható telefonvonalon analóg modemmel, ADSL-el, vezeték nélküli hálózaton (wireless networking), stb.
A Windows-ban az API-k két csoportját különböztetjük meg:
  • Control Point API – COM interfészek gyűjteménye segítségükkel detektálhatók és vezérelhetők az UPnP eszközök
  • Device Host API – szintén COM interfészeket tartalmaz, de a programfejlesztők számára, hogy alkalmazásokat fejleszthessenek UPnP-s eszközökhöz.
Control Point API
Elérhető minden nagyobb fejlesztői környezetből (C#, C++, Delphi, Visual Basic) és szkriptekből is (pl.: VBScript). Utóbbiból egyenesen következik, hogy HTML oldalakba is ágyazható és ettől kezdve az Intranetes vagy Internetes használat már csak egy apró lépés. (Képzeljük el, hogy az otthoni lakás hőmérsékletét az Interneten keresztül a munkahelyünkről szabályozzuk és egy energiatakarékosabb, de hűvösebb állapotból egy magasabb hőfokra kapcsolunk. Mire hazaérünk már kellemes meleg vár.)
Milyen műveleteket hajt végre a Control Point API?
  • Megkeresi az UPnP eszközöket a hálózaton.
  • Meghatározza, hogy milyen eszközmeghajtók tartoznak hozzájuk.
  • Kapcsolatot kezdeményez velük.
Elsőként egy keresést kell futtatni a hálózaton, hogy felismerjük a csatlakozó eszközöket. A keresés szűrőfeltételek segítségével is használható, hogy csak a ténylegesen szükségeseket kapjuk eredményül. Nézzünk egy példát, hogy zajlik ez VBScriptekben:
Dim deviceFinder
Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )
Kétféle keresési módszer létezik: szinkron és aszinkron.
Szinkron keresés:
Az alkalmazás végrehajt egy keresést a hálózaton és a pillanatnyilag csatlakoztatott eszközöket fogja megtalálni:
Dim deviceFinder
Set deviceFinder = CreateObject( "UPnP.UPnPDeviceFinder" )
Dim devices
Set devices = deviceFinder.FindByType( "urn:schemas-upnp-org:device:multidisk-dvd", 0 )
Aszinkron keresés:
A kereső alkalmazás folyamatosan figyel és amint becsatlakozik egy UPnP eszköz megjelenik egy üzenetablak, amiben megtalálhatók az alapvető paraméterei:
Sub DeviceFinderCallback (device, UDN, calltype)
  select case calltype
    Case 0
      output = "Found: " & vbCrLf
      output = output & "DisplayName: " & device.FriendlyName & vbCrLf
      output = output & "Type: " & device.Type & vbCrLf
      output = output & "UDN: " & device.UniqueDeviceName & vbCrLf
      MsgBox output
    Case 1
      MsgBox "device removed: " & UDN
    Case 2
      MsgBox "search complete"
    end select
End Sub
Dim devicefinder
Dim findData
Set devicefinder = CreateObject("UPnP.UPnPDeviceFinder")
Sub StartFind()
  findData = devicefinder.CreateAsyncFind("upnp:rootdevice", 0, _
   GetRef("DeviceFinderCallback"))
  devicefinder.StartAsyncFind(findData)
End Sub
Sub StopFind()
  deviceFinder.CancelAsyncFind(findData)
End Sub
A kapott eredmény – amit az eszközök listája alkot – egy tömbben helyezkedik el (device collection). Feldolgozása igen egyszerű:
for each deviceObj in devices
    MsgBox(deviceObj.FriendlyName)
Next
Az UPnP eszközök vezérlése különböző szolgáltatások segítségével lehetséges. Legkisebb egységet az UPnP szolgáltatás (UPnP Service) képviseli az architektúrában. Az alábbi VBScript kód példa arra, hogy lehet az eszköz által használható két szolgáltatásra kiterjeszteni a kezelési hatókört:
services = device.Services
Set appService = services( "urn:upnp-org:serviceId:DVDVideo" )
Set xportService = services( "urn:upnp-org:serviceId:AVTransport" )
Device Host API
A Device Host API egy UPnP keretrendszert (framework) szolgáltat a programozók számára, alkalmazásaik fejlesztéséhez. Minden eszközhöz tartozik egy általános leírás, ami egy tulajdonsághalmaz az alábbi összetevőkkel:
  • deviceType – 64 byte
  • friendlyName – 64 byte
  • manufacturer – 64 byte
  • modelDescription – 128 byte
  • modelName – 32 byte
  • modelNumber – 32 byte
  • serialNumber – 64 byte
  • UPC – 12 byte
  • serviceType – 64 byte
  • serviceId – 64 byte
Ezek megtalálhatók a PC kártyákban, légkondicionálókban, mobiltelefonokban, fényképezőgépekben és minden más UPnP-t támogató eszközben.
A csoporthoz tartozó Windows API gyűjtemény az alábbi interfészeket alkotja:
  • IUPnPDeviceControl – központi kezelést valósít meg az eszközök és a szolgáltatás objektumok felé.
  • IUPnPDeviceProvider – az eszközök és a programok között található interfészek indítását és leállítását teszi lehetővé.
  • IUPnPEventSink – a program és az eszköz közötti eseményküldést valósítja meg.
  • IUPnPEventSource – itt az esemény forrása maga az eszköz.
  • IUPnPRegistrar – az eszközök regisztrálását végzi el.
  • IUPnPReregistrar - az eszközök újraregisztrálását végzi el.
Minden csoport további függvényeket tartalmaz lefedve a teljes UPnP eszközkezelést.
További információk
További információkért érdemes ellátogatni a következő webhelyre:
www.upnp.org
A témával kapcsolatos hírcsoport címe a Microsoftnál:
Microsoft.public.upnp