BBKing: OOP: Event an Member-Variable hängen?

Beitrag lesen

Hi,

Ich vermute jedoch, die Antwort ist nein.

Javascript ist nicht darauf ausgelegt, auf Bit-Ebene zu adressieren und zu operieren.

Nun, das macht sowieso meine PHP-Klasse und nicht JS, wenn Du den Zugriff auf die Hardware meinst.

ich möchte aber den HTTP-Request nicht 16x ausführen um zu erfahren, ob die einzelnen Kanäle gesetzt sind

Das wäre ja auch Unfug - hole alle 16bit auf einmal und vergleiche sie mit dem vorherigen Stand.

Ist ja mein Plan, sonst hätte ich den Thread nicht gestartet. Allerdings möchte ich diesen Vorgang vor dem Anwender verstecken, das Projekt soll dann irgenwann auf SourceForge wandern und Leuten Freude bedeuten, die  nicht so tief in die Materie tauchen möchten.

Ist das gesamte 16bit-Wort unverändert, ist zwangsläufig auch jedes Bit unverändert.
Ist das gesamte Wort jedoch verändert, kannst du daraus alle 16bit neu extrahieren, ohne dafür noch einen HTTP-Request loszutreten.

( ( _inCurrVal & Math.pow(2, (this.inChannel)-1) ) > 0) ? this.inCurrentValue = 1 : this.inCurrentValue = 0;

Schön, dass du den ternären Operator kennst - diese Anweisung ist dennoch maximal umständlich geschrieben. Wenn du schon den ternären Operator benutzt, ziehe die Teilausdrücke vor, die in beiden Fällen gleich sind; in deinem Fall ist das die linke Seite der Zuweisung. Außerdem ist es mit Elefanten auf Mücken geschossen, wenn du das Math-Objekt und die Potenzierung bemühst, nur um eine Bitmaske zu berechnen, die man ebensogut durch eine primitive Bitshift-Operation haben kann.

this.inCurrentValue = ( ( _inCurrVal & Math.pow(2, (this.inChannel)-1) ) > 0)

wollte er nicht haben und auf die bei uC's ständig verwendete Lösung habe ich nicht gedacht.

Effizienter und übersichtlicher:

this.inCurrentValue = ((_inCurrVal & (1<<this.inChannel))!=0);

Gut, so hast du nicht 1 und 0, sondern true und false - aber das ist ja letztendlich dasselbe.

Hoffe, jetzt ist es verständlicher...?

Mir war schon vorher klar, was du willst - aber das ist so nicht vorgesehen.

Jetzt bin ich nur gespannt, ob jemanden doch eine Lösung einfällt oder ob ich ein Workaround bauen muss...:)