Loetkolben Posted May 11, 2012 at 03:58 AM Share Posted May 11, 2012 at 03:58 AM 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 Quote Link to comment Share on other sites More sharing options...
borg Posted May 11, 2012 at 07:07 AM Share Posted May 11, 2012 at 07:07 AM 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. Quote Link to comment Share on other sites More sharing options...
Loetkolben Posted May 11, 2012 at 01:15 PM Author Share Posted May 11, 2012 at 01:15 PM 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 Quote Link to comment Share on other sites More sharing options...
borg Posted May 11, 2012 at 01:31 PM Share Posted May 11, 2012 at 01:31 PM 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. Quote Link to comment Share on other sites More sharing options...
Loetkolben Posted May 11, 2012 at 01:52 PM Author Share Posted May 11, 2012 at 01:52 PM 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. Quote Link to comment Share on other sites More sharing options...
borg Posted May 11, 2012 at 02:08 PM Share Posted May 11, 2012 at 02:08 PM 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.