ich möchte hiermit mein neues Skript "CanoRemo.lua" für die IR-FB "CanoRemote" von Dirk Eichel (siehe hier) vorstellen, welches eine Weiterentwicklung des von f_m_b entwickelten Skriptes "Remote.lua" ist (siehe diesen Thread).
Was hat sich mit diesem neuen Skript geändert:
1) Nicht geändert hat sich die grundlegende Funktionsweise der bisherigen Skript-Vorgängerversion von f_m_b.
2) Meine neue Skriptversion beseitigt aber die bisherigen Blitzprobleme bei Verwendung eines integrierten Blitzes.
3) Desweiteren wird nun falls möglich (ab CHDK 1.3 v3442) automatisch der neu eingeführte "USB High Speed Mode" verwendet, welcher insbesondere bei älteren Kameras wie etwa meiner S3 mit noch DIGIC-2 Prozessor eine ausreichend genaue Erkennung der vom USB-Receiver gesendeten USB-Impulslängen ermöglichen sollte.
4) Über neu eingeführte Skript-Vorgabeparameter können alle Zeitlimits zu USB-Impulszeiten nun individuell angepasst werden, was insbesondere für Kameras mit einem älteren Prozessor wie etwa noch einem Digic-2 wichtig ist, damit immer die richtigen Funktionen ausgeführt werden.
5) Bei Start des Skriptes über den neuen möglichen "USB Test-Mode" können auch nur die real gemessen USB-Impulszeiten angezeigt werden, um so anschließend die Skript-Vorgabeparameter zu den USB-Impulszeiten für die jeweils verwendete Kamera optimieren zu können.
6) Die Taste MENU der IR-FB zeigt nun zusätzlich den vollständigen Skriptstatus an und kann übrigens zudem auch rein zum "Aufwecken" des USB-Empfängers eingesetzt werden, falls dieser zwischenzeitlich nach längeren Pausen bzgl. gesendeter IR-Impulsen in den Sleepmode gefallen sein sollte.
7) Die Taste DOWN kann über einen neuen Vorgabeparameter nun alternativ zu HALFSHOOT auch nur einen AF-LOCK machen.
8) Über den neuen Vorgabeparameter "Wait for Flash" kann das neue Skript bei Bedarf vor einer neuen Aufnahme immer erst eine volle Blitzbereitschaft abwarten. Das Skript fragt dabei ständig von der Kamera den Blitzstatus ab. Bei Kameras mit ausklappbarem Blitz wird auch dessen Stellung permanent abgefragt, wobei eine aktivierte Vorgabe "Wait for Flash" in eingeklappter Stellung automatisch skriptintern deaktiviert wird.
Hier alle Funktionen des Skriptes im Überblick:
1) "Einzelklicks" an der FB auf LEFT oder RIGHT führen zu einzelnen Zoomschritten Zoom-Out oder Zoom-In, welche zeitlich über den Vorgabeparameter "Zoom Step Time" an die jeweilige Kamera individuell angepasst werden können, um die optischen Schrittweiten dieser Einzel-Zoomschritte an eigene Vorlieben anzupassen.
2) Sogenannte "Doppelklicks" an der FB auf LEFT oder RIGHT führen zu einem kontinuierlichen Zoom-Out bzw. Zoom-In.
Über den neuen Vorgabeparameter "Timeout Cont. Zoom" kann die Zeitgrenze, was noch als "Doppelklick" interpretiert werden soll, individuell an eigene Vorlieben angepasst werden.
Ein laufender "kontinuierlicher Zoom" kann dabei durch Drücken einer jeglichen Taste der USB-FB sofort gestoppt werden.
3) Die Taste UP startet bzw. stoppt eine Video-Aufnahme.
Wichtige Hinweise dazu:
a) Der mögliche Modus "Wait for Flash" wird während Video-Aufnahmen automatisch deaktiviert.
b) Während einer Videoaufnahme aktiviert/deaktiviert die Taste DOWN an der FB immer nur einen AF-Lock unabhängig davon, was in den Skriptvoreinstellungen zu Parameter "AFL-Mode for Key Down" voreingestellt wurde.
Während einer Videoaufnahme ist ein "Halfshoot" also generell nicht möglich!
4) Die Taste DOWN macht normalerweise einen "Halfshoot", welcher sowohl einen AF ausführt als auch eine Belichtungsmessung, wobei beide Werte gespeichert bleiben.
Ein nachfolgender Druck auf die FB-Taste PLAY/PAUSE verwendet dann diese sozusagen "eingefrorenen" Einstellungen, sodaß die Auslösung sofort erfolgen kann. Nach einer Aufnahme gibt das Skript die Fokus- und Belichtungseinstellungen wieder frei.
Eine alternative Funktionsweise der Taste DOWN kann durch Aktivierung der Skript-Vorgabeoption "AFL-Mode for Key Down" erreicht werden:
Dann macht Taste DOWN nur einen AF mit anschließendem AF-Lock, sodaß nur der Fokus dauerhaft gespeichert wird.
Nachfolgende Aufnahmen via FB-Taste Play/Pause müssen dann nur noch die Belichtung neu ermitteln, was normalerweise sehr schnell geht und so schnelle Auslösezeiten ermöglichen sollte.
Ein erneuter Druck auf Taste DOWN deaktiviert dabei einen gemachten AF-Lock wieder.
5) Die Taste PLAY/PAUSE ermöglicht die Auslösung eines Bildes.
Normalerweiser wird dabei ein AF und eine Belichtungsmessung durchgeführt und erst danach ausgelöst.
Bei vorher via Taste DOWN erfolgtem "Halfshoot" wird dagegen sofort ausgelöst.
Bei vorher via Taste DOWN erfolgtem "AF-Lock" wird nur die Belichtung gemessen und danach sofort ausgelöst.
6) Die Taste MENU zeigt nach kurzem Druck (!) den aktuellen Skriptstatus mit sämtlichen Details für ~ 6 sec an.
Hinweise zu dieser Taste:
a) Diese Taste kann immer erst nach 2 sec Verzögerungszeit vom Skript ausgewertet werden! Das ist technisch bedingt und somit keine Fehlfunktion.
b) Die Taste MENU kann auch dazu verwendet werden, einfach nur einen eingeschlafenen CanoRemo USB-Empfänger wieder aufzuwecken :-)
c) Ein langer Druck auf Taste MENU aktiviert das Menü des USB-Empfängers. Im Skriptbetrieb ist das normalerweise völlig unerwünscht!
7) Der per Default aktivierte Vorgabeparameter "Wait for Flash" sorgt dafür, daß vor einer Aufnahme immer erst eine volle Blitzbereitschaft abgewartet wird, bevor die Auslösung erfolgt. Diese Voreinstellung sollte darum m.E. normalerweise auch nicht geändert werden.
Hinweis: Diese Funktion kann nur bei der Verwendung des internen Blitzes der jeweiligen Kamera verwendet werden!
Bei auf den Zubehörschuh aufgesetzten externen Blitzen wird diese Funktion automatisch deaktiviert, da CHDK deren Blitzbereitschaft nicht abfragen kann.
8) Die vom Skript vorgegebenen Zeitgrenzen bzgl. "High Limit" für diverse USB-Impulslängen sind so gewählt, daß man da bei einer aktuellen CHDK-Version 1.3 normalerweise nichts ändern sollte. Die Vorgabewerte habe ich für meine ältere S3 mit nur DIGIC-2-Prozessor optimiert, und bei meiner neueren SX20 mit bereits DIGIC-4-Prozessor sind da erst recht keinerlei Änderungen nötig.
Wichtige Info Nummer 1:
Normalerweise sollte für dieses Skript CHDK 1.3 ab mindestenst Version 3585 verwendet werden!
Nur so sind akzeptabel genaue Messungen der gesendeten USB-Impulszeiten über den neuen USB-Highspeed-Modus möglich!
Bei Verwendung von CHDK 1.3 ab v3585 sollte es dabei normalerweise auch nicht nötig sein, die Skript-Voreinstellungen zu den USB Time-Limits zu den Tasten der USB-FB zu ändern!
Wichtige Info Nummer 2:
Dieses Skript ist für den sogenannten "CHDK Standard Mode" des IR-Empfängers der "CanoRemote" ausgelegt (siehe hier).
Dieser Modus verwendet für die Tasten LEFT, RIGHT, UP, DOWN, PLAY/PAUSE und MENU die USB-Impulslängen 80, 160, 240, 320, 400 bzw. 480 ms.
Dieser "USB-Delay" ist dabei nicht zu umgehen. Ein SHOOT kann also bspw. nach Druck auf die FB-Taste "Play/Pause" immer erst nach 400ms Delay ausgeführt werden. Am schlimmsten trifft es die Taste MENU mit 480ms Impulslänge, welche immer erst nach 2 sec Pause den USB-Impuls schickt.
Wichtige Info Nummer 3:
Im nachfolgendem Posting gibt es eine alternative Skriptvariante von mir für Kameras mit mindestens DIGIC-3-Prozessor und zwangsweise nötigem CHDK 1.3.
Diese Variante verwendet den sogenannten "CHDK Fast Mode" des IR-Empfängers der "CanoRemote" mit kürzen USB-Impulslängen:
30, 60, 90, 120, 150 und 180 ms für die Tasten LEFT, RIGHT, UP, DOWN, PLAY/PAUSE und MENU.
Eine Auslösung kann so mit nur 150ms Delay ausgeführt werden.
Weitere Infos:
Aus Gründen der "Abwärtskompatibilität" läuft dieses Skript auch noch unter CHDK 1.2, unter welchem es es dann aber generell noch keinen "USB-Highspeed-Modus" gibt!
Die diversen "High Limits" für die USB-FB-Tasten in den Skriptvoreinstellungen müssen dann aber ggfs. angepasst werden, damit dieses Skript überhaupt ordnungsgemäß funktionieren kann.
Als Hilfe dazu kann dieses Skript darum auch im "USB Test Mode" gestartet werden mit voreinstellbarer Anzeigedauer ("Sleep Time Test-Mode (sec)"). Die Skriptvoreinstellungen für die "High Limits" je FB-Taste könnten dann entsprechend angepasst werden.
Übersicht der möglichen Skript-Voreinstellungen:

Interna zu diesem Skript für interessierte User:
Das Urprungskonzept von f_m_b nach dem sehr aufwändigen und komplizierten Programmierkonzept "State machine" habe ich übernommen, weil es bei diesem Skript unverzichtbar ist.
Das Konzept "State machine" bedeutet dabei eine Endlosschleife, welche aber nicht bereits vorher eindeutig festgelegt ist, sondern sich "chamäleonartig" automatisch ändert/anpasst und abhängig von den Skriptvorgaben, gemachten Tastendrücken an der FB, ständigen Abfragen im Skriptbetrieb zum Blitzstatus und den Zoompositionen, Zeitmessungen zu gedrückten Tasten uvam. zu sich ständig ändernden "Skript States" führt (siehe u.a. die sich ständig ändernde Variable "state" im Skript).
Neu sind dabei die von mir wesentlich erweiterten Skriptabfragen an die Kamera, welche das Konzept "State machine" optimieren sollen. Im Ursprungsskript "Remote.lua" von f_m_b können bspw. Kameratasten via Skript ja dauerhaft gedrückt bleiben, obwohl es gar nicht mehr sinnvoll ist.
Als erstes Beispiel dazu möchte ich hier mal die Funktion "Zoom In Continous" erwähnen:
Mein neues Skript fragt bereits bei Skriptstart nach den möglichen Zoomschritten nach und beendet zudem automatisch eine gedrückte Taste Zoom-In wenn das Objektiv bereits die max. Zoomposition erreicht hat.
Als zweites Beispiel möchte ich die ausklappbaren Blitze meiner S3 und SX20 erwähnen:
Auch die werden vom Skript ständig überwacht und führen bei Ein-/Ausklappen automatisch zu Änderungen im Skriptablauf.
Auf ähnliche Weise werden auch diverse andere Parameter ständig vom Skript überwacht uvam.
Hier noch ein Bild von der von mir verwendeten neueren Apple Fernbedienung, wobei aber auch die älteren Apple Fernbedienungen mit PLAY/PAUSE als Centertaste mit diesem Skript funktionieren sollten:

History:
13.07. 2014 - Skriptversion 1.00 ist verfügbar
20.07.2014 - Skriptversion 1.01 ist verfügbar
Dieses unbedingt notwendige Update korrigiert dabei vor allem die Konsolen-Ausgaben, welche bisher noch fehlerhaft waren.
Bei aktiviertem "Video-Record" macht die USB-FB-Taste DOWN zudem nun automatisch nur noch einen "Enable/Disable AF-Lock" aber keinen "Halfshoot" mehr unabhängig davon, was in den Skriptvoreinstellungen bzgl. Parameter "AFL-Mode for Key Down" vorher eingestellt wurde.
Desweiteren wurde der Skriptcode allgemein optimiert und ist nun für andere CHDK-Programmierer einfacher nachvollziehbar, auch wenn das von f_m_b eingeführte und von mir übernommene Programmierprinzip "State machine" für weniger erfahrene Programmierer kaum noch nachvollziehbar ist, weil zusätzlich auch noch die Funktionen zu den FB-Tasten in Lua-Unterfunktionen definiert wurden. Bezüglich "Übersichtlichkeit" zu den programmierten Abläufen der "State machine" ist dieses Skript deshalb eine "mittlere Katastrophe", wo ich selber nur noch mit Mühe durchblicke.
Die vielen eingefügten Kommentarzeilen im Skript sollten es anderen Programmierern aber erleichtern, dieses komplizierte Skript noch nachvollziehen zu können.
21.07.2014 - Skriptversion 1.02 ist verfügbar
Diese neue Version verbessert das zeitliche Handling zum Vorgabeparameter "Timeout Cont. Zoom" durch genauere Zeitmessungen.
Geänderte Vorgabe-Bereichsgrenzen für "Zoom Step Time" und "Timeout Cont. Zoom" sorgen zudem für einen stabileren Skriptablauf.
23.07.2014 - Skriptversion 1.03 ist verfügbar
Diese Version beseitigt zwei Fehler bei aktiviertem Video-Recording:
Die FB-Taste "Play/Pause" kann jetzt keine Bildaufnahme mehr machen, weil das bisher zu einem Skriptabsturz führte, und die Taste "Down" macht in diesem Modus nun immer nur einen Enable oder Disable AF-Lock, unabhängig von den Skript-Voreinstellungen zu dieser Taste (Halfshoot oder AFL).
21.08.2014 - Skriptversion 1.04 ist verfügbar
Diese Version berücksichtigt die seit CHDK-Version 1.3 v3585 vorgenommen Änderungen für die Verwendung des sogenannten "USB High Speed Modus".
Dazu kommen kommen einige kleinere Änderungen in den Skript-Details.
13.12.2014 - Skriptversion 1.05 ist verfügbar
Abhängig von der erkannten CHDK-Version (1.3 >= v3791 oder 1.4) wird für die Aktivierung/Deaktivierung des USB-High-Speed-Mode nun der neuere Befehl "set_remote_timing()" anstelle von bisher "enable_remote_hp_timer()" verwendet.
Details zu der Notwendigkeit dieser Änderung gibt es hier.
Liebe Grüße
Werner_O