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

Google Chrome ohne Anwender-ID

Jeder Chrome-Browser erstellt bei der Installation eine eindeutige Anweder-ID, die beim Surfen übermittelt wird. So ließen sich z.B. Suchanfragen einem bestimmten Benutzer zuordnen. Doch mit einem kleinen Trick, lässt sich die ID entfernen und der Aufbau solcher Beziehungen behindern.

Dafür bearbeitet man (unter Windows Vista) die Datei
X:\Users\NAME\AppData\Local\Google\Chrome\User Data\Local State

Unter dem Punkt "user_experience_metrics" entfernt man die Werte für "client_id" und "client_id_timestamp". Das sollte dann so aussehen:

  "user_experience_metrics": {
      "client_id": "",
      "client_id_timestamp": "",

Datei speichern und zum Abschluss noch schreibgeschützt setzen (Rechtsklick → unter dem Reiter Allgemein → Haken bei "Schreibgeschützt" setzen).

Chrome starten und wieder beenden. Nun wurde eine neue Datei angelegt namens Local State.tmp. Wieder bearbeiten und schreibgeschützt setzen. Das war es! Nun sollte keine ID mehr übermittelt werden und Chrome sich dennoch uneingeschränkt nutzen lassen.


gefunden auf: http://www.golem.de/0809/62216.html