ZITAT(MichaelJ @ 2009-01-09, 1:30) ZITAT(matthiaspaul @ 2009-01-09, 0:18) Das ist ja echt eine pfiffige Idee, die Blendenwahl an der Kamera als "Kommandos" an den Chip im Objektiv zu mißbrauchen, wenn sich dieser in einem "Programmiermodus" befindet, ...[/quote]
Ich habe das so verstanden, dass dieser "Programmiermodus" Teil der Canon-Kamera-Firmware ist - es musste sozusagen nur jemand rausfinden, dass es ihn gibt und wie man ihn einschaltet (so ähnlich wie die berühmten "Geheimcodes" zum Code-free-Schalten von DVD-Playern, die man über die ganz normale, mitgelieferte Fernbedienung eingeben kann).
[/quote]
Nein, ich habe das wie folgt verstanden:
Die Firmware in dem Adapter durchläuft jedesmal, wenn der Adapter unter Spannung gesetzt wird, eine bestimmte Initialisierungsprozedur, in der sie drei Sekunden lang auf ein bestimmtes Ereignis wartet, ehe sie in ihren "Programmiermodus" geht. Tritt das Ereignis nicht ein, geht sie in den normalen Betriebsmodus über.
Das Ereignis besteht nun (etwas vereinfacht - siehe unten) darin, daß die Kamera das vermeindtliche Objektiv in Form des Adapters anweist, die Blende 1,4 einzustellen. Wenn die Kamera das irgendwann später machen würde, würde nichts passieren, in diesen ersten drei Sekunden jedoch würde die Kamera dies als "Kommando" auffassen: "Geh in den Programmiermodus!" Die Kamera selbst bekommt davon nichts mit, denn sie geht davon aus, daß ein normales Objektiv angeschlossen ist, dem sie das Kommandos zum Einstellen der Blende (hier "1.4" geben muß, da der Fotograf ja gerade auf den Auslöser gedrückt hat - die Voraussetzungen dafür, daß die Kamera keinen Grund mehr findet, die Auslösung ggfs. zu verweigern, wurden ja im Vorfeld sichergestellt (das Bild ist scharf, die Schärfe wurde bestätigt, deshalb soll man auch den Fokusring nicht verdrehen).
Ist der Adapter nun im Programmiermodus, so werden auch folgende Anforderungen der Kamera, eine bestimmte Blende einzustellen, als Kommandos interpretiert. An der Kamera, die davon immer noch nichts mitbekommen hat, wählt man Zeitautomatik und stellt beliebige Blendenwerte (die alle bestimmten Kommandos entsprechen) ein und drückt dann auf den Auslöser, damit die Kamera das Objektiv anweist, die Blende einzustellen. Der Adapter interpretiert das jedoch als Kommandos, im folgenden bestimmte Werte (die auf die gleiche Weise übertragen werden) in seinem internen EEPROM-Speicher abzulegen.
Das oben angesprochene Ereignis ist in Wahrheit vermutlich noch etwas komplizierter: Bevor die Kamera das Objektiv anweist, Blende 1,4 einzustellen, also ihren Auslösevorgang einleitet, wird sie bereits in einer bestimmten Art und Weise mit dem Objektiv kommuniziert haben, damit das AF-System überhaupt erstmal alle Informationen bekommt, um die Schärfe bestätigen zu können. Diese Kommunikation wird einem bestimmten Muster oder Timing entsprechen, das die Firmware des Adapters in den ersten drei Sekunden überwacht und als "Schlüssel" interpretiert. Nur wenn sie das Muster erkannt hat und die drei Sekunden noch nicht verstrichen sind, wird sie das Kommandos "Stelle 1,4 ein" als Kommando zum Aktivieren des Programmiermodus auffassen, sonst nicht. Der Trick besteht einfach darin, ein Muster zu finden, das im normalen Betrieb nicht häufig vorkommt, so daß nur in den ersten drei Sekunden nach dem Start ein Restrisiko einer Fehlinterpretation besteht.
So jedenfalls würde ich das programmieren, wenn ich so einen Adapter entwickeln würde. Sowas ist durchaus üblich, z.B. um ein Gerät unmittelbar nach dem Einschalten in einen nicht dokumentierten speziellen Debug-, Service- oder Entwicklermodus zu bringen. Aber es gibt auch andere Beispiele: So gibt es z.B. in Betriebssystemen wie DOS, OS/2 und Windows viele Fälle, wo das Betriebssystem gerade gestartete Awendungen nach bestimmten Codesignaturen durchsucht oder deren dynamisches Verhalten überwacht, um darin bestimmte Muster zu erkennen. Wird ein bestimmtes Muster erkannt, so verhält sich das Betriebssystem für diese Anwendung anders als es das für Anwendungen tun würde, bei denen das Muster nicht erkannt wurde. Solche Quirks implementiert man häufig, um ältere Treiber oder Anwendungen unter neueren Betriebssystemversionen ans Laufen zu bekommen, obwohl die Anwendung eigentlich aufgrund von nicht mehr mit dem neuen System konformem Verhalten nicht mehr darunter arbeiten könnte. Das bleibt natürlich auf weit verbreitete Anwendungen beschränkt oder solche, für die es aus irgendwelchen Gründen keine neue Version mehr gibt oder dem Anwender ein Upgrade nicht zugemutet werden kann. Die Anwendung bekommt von der ganzen Masquerade gar nichts mit. In diesem Vergleich wäre die Kamera nun die Anwendung und der Adapter das Betriebssystem.
Viele Grüße,
Matthias