sebadorn.de

Using NW.js to communicate with a DS4 controller

DS4 green light

NW.js still provides the Chrome Apps API which has been removed from Chrome, but not ChromeOS. This will allow us to access in a platform-independant manner devices which are connected with the PC per USB.

Without this API, a 3rd party Node.js module like node-hid could be used. This will however come with platform-dependant libraries and will have to be updated or rebuild each time the Node.js version changes.

This article concentrates on sending data to the controller. However it is also possible to retrieve data like pressed buttons using the established connection. Aside from using chrome.hid there is also the Gamepad API for read-only access.

Identifying the controller

First we need a way to identify the DS4. Devices come with a vendor Id and product Id. According to the Gentoo Wiki they are as follows:

Device Vendor Id Product Id
DS4 (1st gen) hex 054C / dec 1356 hex 05C4 / dec 1476
DS4 (2nd gen) hex 054C / dec 1356 hex 09CC / dec 2508

Having tested with both devices, I can also confirm the Ids.

Get the device

For all communication with the device, we will use the chrome.hid API. First we define a filter using the vendor and product Id, and then query the available devices:

var filter = {
    filter: [
        { vendorId: 1356, productId: 1476 },
        { vendorId: 1356, productId: 2508 }
    ]
};

chrome.hid.getDevices( filter, ( devices ) => {
    // Error handling.
    if( chrome.runtime.lastError ) {
        console.error( chrome.runtime.lastError );
        return;
    }
    if( !devices ) {
        return;
    }

    var device = devices[0];
    // Next: Connect to the device.
};
Read more

API: YouTube-Player (Part 2)

Da ging etwas daneben beim Einbinden. :(
0:00


Referenzen

Read more

API: YouTube-Player (Part 1)

Den Anfang der API-Reihe macht der YouTube-Player. Der Artikel wird ein wenig länger, weshalb ich ihn in zwei Teile aufgespalten habe. In Part 1 kommt der weniger geekige code­lastige Teil mit den Parametern. In zwei Wochen kommt in Part 2 dann der eigentliche API-Inhalt mit selbstgebastelten Bedienelementen für ein Video.

Die Code-Beispiele mit eingebundenen Videos sind eine valide und gekürzte Form dessen, was YouTube zum Rauskopieren anbietet. embed und param name="movie" entfallen, dafür steht der Verweis zum Video in object data="…". Sieht man gleich.

Parameter für das Video

fs (default 0)
Wenn auf 1 gesetzt, lassen sich Videos in den Fullscreen-Modus umschalten. Kopiert man den YouTube-Code, steht es bereits mit drin.
hd (default 0)
Wenn auf 1 gesetzt, wird das Video in HD abgespielt, insofern vor­handen. Es wird nicht automatisch die höchste Auflösung genommen! Ein Video mit 360p und 480p wählt dann nicht die höheren 480p.
iv_load_policy (default 1)

Setzt man den Wert auf 3, werden video annotations nicht angezeigt.

<object width="400" height="250"
	type="application/x-shockwave-flash"
	data="http://www.youtube-nocookie.com/v/
	jBmP7xTI_TA&amp;fs=1&amp;iv_load_policy=3">
	<param name="allowFullScreen" value="true" />
	<param name="allowscriptaccess" value="always" />
</object>

Zum Vergleich: youtube.com/watch?v=jBmP7xTI_TA

loop (default 0)
Wenn auf 1 gesetzt, startet das Video am Ende neu.
rel (default 1)
Wenn auf 0 gesetzt, werden keine verwandten Videos geladen, die u.a. nach Ende des Videos angezeigt würden.
showinfo (default 1)
Wenn auf 0 gesetzt, wird der Titel und mögliche andere Informationen (früher mal die Bewertung) nicht mehr angezeigt.
start

Dieses Video hat ein schlechtes 21 Sekunden-Intro. Mit start lässt sich der Startpunkt um die gegebene Sekundenzahl versetzen.

<object width="400" height="250"
	type="application/x-shockwave-flash"
	data="http://www.youtube-nocookie.com/v/
	Xo3Tpw-zLkM&amp;fs=1&amp;start=22">
	<param name="allowFullScreen" value="true" />
	<param name="allowscriptaccess" value="always" />
</object>


Noch ein paar mehr Parameter stehen unter YouTube Embedded Player Parameters.


Präludium zu einer kleinen Artikelreihe: APIs

Da müsst ihr API lesen. Schaut in die API. Steht alles in der API.

Als Erstsemester im Informatikbereich hört man das sehr häufig von seinen Professoren. Das Ding ist, sie haben auch noch recht. So eine ausführlich dokumentierte API macht vieles ein­facher, reinigt Flüsse und lässt Blumen aus dem Monitor sprießen. Ja okay, da habe ich jetzt vielleicht etwas übertrieben, aber ist schon schnieke. Deswegen gibt es ab sofort eine kleine Artikelserie zu verschiedenen APIs, hauptsächlich solche, die auch für Nicht-Programmierer von Interesse sein können. Aber das seht ihr dann.

Nun kommt die Erklärung, was zum Henker eine „API“ ist. Fangen wir damit an, dass die Ab­kürzung für application programming interface steht. Dabei handelt es sich um eine Schnittstelle um mit Software zu interagieren – dazu zählt zum Beispiel auch, eine Programmier­sprache wie Java nutzen zu können.

Ein paar Beispiele zum flüchtigen Anschauen (denn Durchlesen wäre wahnsinnig):

Die API-Dokumentation listet alle Methoden auf, die von der Software zur Verfügung gestellt werden, und liefert eine Beschreibung zur Wirkungsweise und Nutzung.


Abistreich 2008 an der AES

Zur 2. Stunde sollen wir uns vor der Cafta treffen. Die geringe Teilnehmerzahl macht nicht gerade Mut. Aber die meisten sind nur ein wenig spät. An der Treppe zum Schulgarten und den Tischtennisplatten bauen wir auf. Tische und Stühle mopsen wir uns aus einem unbesetzten Fünferklassenraum.

Ein Trupp geht hoch ins Lehrerzimmer. Ein Teil sucht sich Opfer zusammen und stylt diese in einem Nebenraum mit den Resten des got2be-Gewinnes um und der andere Teil der Gruppe passt auf, dass die Lehrer nicht so einfach flüchten. Die gutgläubige Annahme einer recht jungen Lehrerin
„Ich dachte ihr lasst mich in Ruhe, weil ihr mich nicht kennt.“
müssen wir enttäuschen.

Auf dem Schulhof wird Musik aufgelegt und Hot Dogs und Getränke verkauft. Außerdem geht auf dem Schulhof das Styling weiter – nicht mehr mit Lehrern, sondern mit Schülern.

Programm wird auch noch geboten. Zuerst ein Sackhüpfen unter Lehrern, später auch mit Gewinnen für Schüler. Zudem ein Lehrerwettbewerb mit zwei Teams, wer zuerst den Kollegen/die Kollegin komplett in Toilettenpapier eingewickelt hat.

Das Ganze dauert die 3., 4. und 5. Stunde über. Danach geht es für die Schüler normal mit Unterricht weiter und für uns mit Aufräumen.

Im fotoblog gibt es ein paar Bilder.