Jump to content

[TCP] Wozu "Resolve UID to Stack ID" und "is-new set to true (0x01)"?


Recommended Posts

Warum brauche ich die Funktion "Resolve UID to Stack ID"? Ausser der Abfrage der Firmwareversion sehe ich darin keinen Vorteil gegenueber "Enumeration"? Auch dort bekomme ich die Stack ID um die Devices ansprechen zu koennen.

 

Wozu ist das Byte "is-new set to true (0x01)"? Wann ist es "new"?

Muss ich etwa ein "Enumerate" zuerst machen, damit alle Devices auf "true" gehen? Wenn ja wozu?

 

Zusatzfrage: Koennen eigentlich 2 oder mehr Stacks am einem brickd haengen und wenn ja wie wird dann gezaehlt?

 

 

Der Loetkolben

 

 

 

Link to comment
Share on other sites

Warum brauche ich die Funktion "Resolve UID to Stack ID"? Ausser der Abfrage der Firmwareversion sehe ich darin keinen Vorteil gegenueber "Enumeration"? Auch dort bekomme ich die Stack ID um die Devices ansprechen zu koennen.

Für gewöhnlich ist die Vorgehensweise das man dem Benutzer eine Funktion wie "AddDevice(UID)" zur Verfügung stellt, an der stelle brauchen wir für die UID eine Stack ID, dafür ist die Funktion. Das Enumerate ist eine Broadcast Funktion die an alle geht und auch alle antworten, das will man ja eigentlich nicht bei jedem AddDevice.

 

Wozu ist das Byte "is-new set to true (0x01)"? Wann ist es "new"?

Muss ich etwa ein "Enumerate" zuerst machen, damit alle Devices auf "true" gehen? Wenn ja wozu?

wenn is_new "true" ist wurde das Device hinzugefügt, wenn es "false" ist wurde es entfernt. Enumerate muss du nicht aufrufen. Die Idee ist in gewisser weise, dass Enumerate eine Funktion ist die der Benutzer von Bindings aufrufen kann und Resolve UID eine die Intern benutzt wurd.

 

Zusatzfrage: Koennen eigentlich 2 oder mehr Stacks am einem brickd haengen und wenn ja wie wird dann gezaehlt?

Klar! Dann erstellt der brickd eine passende Routing Tabelle und setzt die IDs um.

Link to comment
Share on other sites

Hallo borg,

 

das bedeutet, dass man fuer die TCP Programmierung die Funktion "Resolve UID to Stack ID" nicht benoetigt, da man bei der TCP Programmierung sowieso kein "add device" macht?

 

wenn is_new "true" ist wurde das Device hinzugefügt, wenn es "false" ist wurde es entfernt.

Von wo wurde es hinzugefuegt, bzw. entfernt? Ich dachte das binden eines Bicklets ist eine Sache innerhalb der HighLevel APIs?

 

Klar! Dann erstellt der brickd eine passende Routing Tabelle und setzt die IDs um.

Da es keine Physichen und Logischen Stack IDs gibt gehen ich davon aus, dass ich nicht sehen kann an welchem physischen Stack mein Bricklet haengt. Anders ausgedrueckt: Wenn ich ein Bricklet von einem physischen Stack an den anderen Physischen Stack umstecke andert sich meine Software nicht. Stimmt das?

 

Der Loetkolben

 

Link to comment
Share on other sites

das bedeutet, dass man fuer die TCP Programmierung die Funktion "Resolve UID to Stack ID" nicht benoetigt, da man bei der TCP Programmierung sowieso kein "add device" macht?

 

Naja die korrekte Vorgehensweise wäre ja schon das du dir am Anfang des Programms immer zuerst zu jeder UID die Stack ID holst, da kannst du dann die "Resolve UID to Stack ID" Funktionalität nehmen

 

wenn is_new "true" ist wurde das Device hinzugefügt, wenn es "false" ist wurde es entfernt.

Von wo wurde es hinzugefuegt, bzw. entfernt? Ich dachte das binden eines Bicklets ist eine Sache innerhalb der HighLevel APIs?

Nein, Wenn du einen Stack per USB anschließt werden die neuen Bricks und Bricklets an diesem Stack per Enumerate bekannt gemacht (mit is_new=true) und wenn du den USB Stecker rausziehst wird für die Bricks und Bricklets in dem Stack wieder Enumerate aufgerufen (mit is_new=false).

 

Klar! Dann erstellt der brickd eine passende Routing Tabelle und setzt die IDs um.

Da es keine Physichen und Logischen Stack IDs gibt gehen ich davon aus, dass ich nicht sehen kann an welchem physischen Stack mein Bricklet haengt. Anders ausgedrueckt: Wenn ich ein Bricklet von einem physischen Stack an den anderen Physischen Stack umstecke andert sich meine Software nicht. Stimmt das?

Wenn du dir beim starten des Programms zu jeder UID die dazugehörende Stack ID holst ist das korrekt, ja!

 

Die Stack IDs ändern sich natürlich wenn du im System umsteckst.

Link to comment
Share on other sites

Nein, Wenn du einen Stack per USB anschließt werden die neuen Bricks und Bricklets an diesem Stack per Enumerate bekannt gemacht (mit is_new=true) und wenn du den USB Stecker rausziehst wird für die Bricks und Bricklets in dem Stack wieder Enumerate aufgerufen (mit is_new=false).

 

D.h., wenn ich an einem betriebsbereiten Stack, wo alle Bricklets "is_new=true" sind, ein weiteres Bricklet anstecke ist diese Bricket auf "is_new=false"? (Was ich aber nicht abfragen kann). Sobald ich ein "Enumarate" aufrufe wird das Bricklet auf "is_new=true" gesetzt und mir dann mit der entsprechenden Stack ID angezeigt?!

 

Anders gesagt: Wenn ich Enumerate aufrufe wird immer "is_new=true" angezeigt, weil gerade durch diesen "Enumerate" Aufruf das TRUE gesetzt wird, oder gibt es einen Fall wo "is_new=false" zurueckgeliefert wird?

 

 

Der Loetkolben.

Link to comment
Share on other sites

Nein, Wenn du einen Stack per USB anschließt werden die neuen Bricks und Bricklets an diesem Stack per Enumerate bekannt gemacht (mit is_new=true) und wenn du den USB Stecker rausziehst wird für die Bricks und Bricklets in dem Stack wieder Enumerate aufgerufen (mit is_new=false).

 

D.h., wenn ich an einem betriebsbereiten Stack, wo alle Bricklets "is_new=true" sind, ein weiteres Bricklet anstecke ist diese Bricket auf "is_new=false"? (Was ich aber nicht abfragen kann). Sobald ich ein "Enumarate" aufrufe wird das Bricklet auf "is_new=true" gesetzt und mir dann mit der entsprechenden Stack ID angezeigt?!

 

Anders gesagt: Wenn ich Enumerate aufrufe wird immer "is_new=true" angezeigt, weil gerade durch diesen "Enumerate" Aufruf das TRUE gesetzt wird, oder gibt es einen Fall wo "is_new=false" zurueckgeliefert wird?

Nein :).

 

Es gibt 3 Fälle in denen du einen Enumerate Callback bekommst:

 

1. Fall: Du hast Enumerate aufgerufen. Dann bekommst du alle Devices die gerade im System sind mit is_new=true

2. Fall: Du steckst einen neuen Stack per USB an (für die Bricklets gibt es kein Hotplug). Dann bekommst du alle Devices die in dem neuen Stack sind mit is_new=true

3. Fall: Du entfernst die USB Verbindung von einem Stack. Dann bekommst du alle Devices die in dem Stack waren mit is_new=false

 

is_new=true == Device hinzugefügt zum System

is_new=false == Device entfernt aus dem System

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...