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

Browser-Addons: Nachrichten-Broadcast an alle Tabs

Browser: Chrome, Firefox, Opera

Situation

Meine Extension injiziert auf bestimmten Seiten ein Content Script. Man kann dann auf dieser veränderten Seite auch Einstellungen ändern, die im der Extension zugewiesenen Storage gespeichert wird. Dafür wird wie üblich eine Nachricht mit den Änderungen an den Hintergrundsprozess geschickt.

Problem

Angenommen, ich habe zwei oder mehr Tabs offen. Nun verändere ich die Einstellung A in einem dieser Tabs. Die Änderung wird gespeichert, aber alle anderen Tabs zeigen nach wie vor den alten Zustand an. Erst nach einem Neuladen der Seite wird die Änderung sichtbar.

Was wir wollen, ist eine Synchronisation der Tabs, was bedeutet, wir müssen alle im Hintergrund eintreffenden Änderungen allen anderen Tabs ebenfalls mitteilen. Und das geht so …

Read more

Add-ons für Chrome, Firefox und Opera selbst hosten

3 Browser

Ich habe eine Browser-Extension für Chrome, Firefox und Opera erstellt. Alle Dateien liegen bei mir lokal, ich habe also z.B. nicht Firefoxs Add-on Builder verwendet, sondern nur das SDK. Als die Extension fertig war, wollte ich sie auch selbst hosten. Ich meine, wie schwer kann das schon sein? Ja, nun …

In diesem Artikel gehen wir davon aus, dass sich die Browser-spezifischen Extension-Dateien in den Unterverzeichnissen Chrome/, Firefox/ und Opera/ befinden.

Read more

API: YouTube-Player (Part 2)

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


Referenzen

Read more

Klausurenphase – 1/6

Auch Fetthenne genannt. Als vorhin ein Vogel vorbeihüpfte, haben die Tentakel ihn sich gekrallt. Später muss ich noch die Knochenreste wegräumen.
Picture unrelated (Tentakel-Pflanze from Outer Space)

Letzte Woche Montag war der sogenannte Onlinetest in Proggen2 (die faule Abkürzung für „Programmieren 2“). Dabei hat jeder Teilnehmer 90 Minuten Zeit die gegebenen Aufgaben zu bearbeiten – will heißen: Am Rechner in Java zu coden. Wir sollten ein Programm mit grafischer Oberfläche schreiben, das ein bis zehn Kreise im Fenster hinundherdotzen lässt (Threads und AWT). Billardtisch von oben gesehen, zur besseren Vorstellung. War vorher sehr nervös mit leichtem Magendrücken, lief aber fast wie im Schnürchen.

Gestern ging dann die schriftliche Klausur in Proggen2 über die Bühne. Dicker Aufgabenkatalog, Fehler gemacht und zwei Aufgaben nicht beantworten können. A-B-E-R das macht ja nichts, weil es einen 10-Punkte-Puffer gibt und es so viele Aufgaben waren. Bestanden, behaupte ich.

Blog posts sind in nächster Zeit wohl eher eine Rarität. Obwohl ich noch mindestens drei Serien, einen Film und eine Software habe, zu denen ich etwas schreiben möchte. Dummerweise habe ich mir auch in den Kopf gesetzt, mein CMS endlich wieder in Angriff zu nehmen.