[Lua] Kameraeinstellungen per Skript aktivieren - UI-Properties

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Kameraeinstellungen per Skript aktivieren - UI-Properties

Beitragvon msl » 24.08.2014, 10:47

Hallo Skriptbastler,

oft benötigen wir im Skript eine bestimmte Kameraeinstellung, damit ein Skript seine Aufgaben erfüllen kann. Das war bisher per Skript meistens nur durch die Simulation einer Tastaturfolge möglich. Nun gibt es aber einen Lösungsansatz, der die Sache deutlich vereinfacht.

Leider bleibt auch dieser neue Ansatz immer noch abhängig von der verwendeten Kamera. Trotzdem ist diese neue Methode empfehlenswert, weil sie relativ einfach zu bewerkstelligen ist.

Die meisten Benutzereinstellungen der Kamera werden in Variablen gespeichert. Einige davon lassen sich auch per Skript wirksam verändern. Bisher kennen wir nur die Methode mit set_prop(<Variable>, <Wert>). Diese funktioniert aber nur bei wenigen Einstellungen.

Möchte man beispielsweise per Skript von der Einzelbildaufnahme in den Serienbildmodus wechseln, stoßen wir an Grenzen. Jetzt gibt es aber neue Lösungsansätze. srsa.4c hat dazu hervorragende Entwicklungsarbeit geleistet. Er hat festgestellt, dass alle Kameraeinstellungen, die über die Benutzeroberfläche der Kamera getätigt werden, in einem bestimmten Variablenbereich mit ihrem gegenwärtigen Zustand gespeichert werden. Diese Zustände lassen sich wirksam überschreiben.

Um diese Möglichkeit im Skript zu nutzen, man zuerst herausfinden, welche Variable mit welchem Inhalt für welche Funktion zuständig ist. Dafür gibt es im CHDK-Menü eine Debug-Funktion, mehr dazu hier: viewtopic.php?f=13&t=3174&start=15#p29861

Die weitere Prozedur lässt sich am besten im konkreten Beispiel erklären.

SX220 - Wechsel in den Custom-Timer

Per Debug-Funktion lässt sich feststellen, dass dafür die UI-Property 13 zuständig ist. Die Inhalte der Variable besagen. dass die Timerfunktion bei 0 deaktiviert und bei aktiviertem Custom-Timer 4 ist.

Die festgestellte UI-Property 13 wird in eine zweistellige hexadezimale Zahl umgewandelt, 0x0d. Daraus ergibt sich dann die eigentliche Variable 0x800d. (Die UI-Properties befinden sich im Bereich von 0x8000 bis 0x8080.)

Nun sind alle notwendigen Informationen verfügbar. Im Lua-Skript rufen wir spezielle Funktionen (Native Calls) auf. Deshalb muss dazu im CHDK-Menü der entsprechende Menüpunkt aktiviert sein.

Verschiedene Einstellungen => Lua Native calles aktivieren? => [x]

Der eigentliche Skriptcode ist dann relativ einfach:
Code: Alles auswählen
call_event_proc("UI.CreatePublic")
call_event_proc("PTM_SetCurrentItem",0x800d,4)
sleep(5000)
call_event_proc("PTM_SetCurrentItem",0x800d,0)

Mit call_event_proc("UI.CreatePublic") wird die nachfolgende Funktion registriert. Das gilt für neuere Kameras (DryOS). Bei älteren Kameras (VxWorks) muss man call_event_proc("UI_RegistDebugEventProc") verwenden.
call_event_proc("PTM_SetCurrentItem",0x800d,4) aktiviert den Custom-Timer.
Mit call_event_proc("PTM_SetCurrentItem",0x800d,0) wird die Timer-Funktion wieder deaktiviert.

Wer mehr Hintergründe zu dieser Thematik lesen möchte, kann das im internationalen Forum im entsprechenden Thread tun: http://chdk.setepontos.com/index.php?topic=10624.0

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Kameraeinstellungen per Skript aktivieren - UI-Propertie

Beitragvon rudi » 26.08.2014, 17:34

Hallo msl,

danke für deine Erläuterungen und das Beispiel. Das macht das Changeset 3590 für mich verständlicher.

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 26 Gäste