Hallo msl,
bezüglich CHDK-Skript-Programmierung haben wir anscheinend unterschiedliche Ansichten.
Ich selber bemühe mich da immer um eine größtmögliche Abwärtskompatibilität bei meinen Skripten, sodaß meine Skripte falls möglich auch problemlos mit älteren CHDK-Versionen funktionieren.
Die Installation einer neueren CHDK-Version seitens eines Skript-Users sollte erst dann erforderlich sein, wenn es wirklich unumgänglich ist!
Bei dieser erneuten willkürlichen Änderung der Bezeichnung dieses Befehles brauchen Skript-User mit installiertem CHDK 1.3 ab
v3585 v3442 aber keine neue CHDK-Version, um den "USB high precision timer" weiterhin nutzen zu können. Das bin ich den Usern meiner Skripte aus eigenem Anspruch schuldig.
Die in meiner Tabelle als Grenzwert angegebene tagesaktuelle Version 1.3 v3791 ist selbstverständlich zunächst mal rein hypothetisch zu betrachten, aber der Support für den Befehl "enable_remote_hp_timer()" läuft laut Deinen Angaben ja irgendwann aus. Du hast die CHDK-Programmierer ja auch ausdrücklich darum gebeten, ihre Programme möglichst zeitnah anzupassen.
Rein pragmatisch als Programmierer gesehen macht Version 1.3 v3791 aber durchaus als Grenzwert Sinn, weil bei dieser Version garantiert noch beide Befehle funktionieren. Ich kann ja momentan nicht abschätzen, ab wann der CHDK 1.3 Support für den Befehl "enable_remote_hp_timer" ausläuft.
EDIT 13.12.2014:Ansonsten habe ich inzwischen ein "Rumpf-Lua-Skript" geschrieben, welches als Vorlage für andere Lua-Programmierer dienen soll, die den "USB high precision timer" verwenden möchten.
In den Zeilen
31 und 32 37 und 38 fragt das Skript dabei zunächst die CHDK-Versionsnummer und CHDK-Revisionsnummer ab. Ausgehend von den Ergebnissen wird dann bei erkanntem CHDK 1.3 v3585 bis v3790 der Befehl "enable_remote_hp_timer()" und ab CHDK 1.3 v3791 stattdessen des Befehl "set_remote_timing()" ausgeführt.
< EDIT: Bei einem erkannten CHDK 1.3 v3442 bis v3584 der stattdessen der ursprüngliche Befehl "enable_highspeed_usb()" verwendet. Der USB High Speed Modus wird so bereits ab CHDK 1.3 v3442 statt bisher v3585 verfügbar. >
Die mit integrierte Unterfunktion "restore()" sorgt dabei für das Beenden des "USB high precision timer" bei Skriptende bzw. Skriptabbruch via Taste SHOOT.
Umfangreiche eingefügte Kommentare sollten zudem das Verständnis für dieses Skript erleichtern.
Hier der Code (alternativ auch im Anhang verfügbar):
< EDIT: Nun in der neuen Version 1.01 >
- Code: Alles auswählen
--[[
*********************************************
Lua-Skriptvorlage für die korrekte Verwendung
des "USB High Speed Mode" ab einer
erkannten CHDK-Version >= 1.3 v3442
Version: 1.01
Author: Werner_O
Thx msl
*********************************************
@title USB High Speed Mode
@param t USB Time Limit (100ms)
@default t 5
@range t 1 15
]]
usb_time_limit = t * 10 --Nötiger Wert, falls kein "USB High Speed Modus" aktivierbar ist (10 entspricht 100ms)
high_speed_mode_1 = 0 --Vordefinition
high_speed_mode_2 = false --Vordefinition
high_speed_mode_3 = false --Vordefinition
--Unterfunktion Restore, verwendet in Programmzeile 63 bei Skriptende oder automatisch bei Skriptabbruch mit Taste SHOOT.
--Deaktiviert den "USB High Speed Modus" wieder:
function restore()
if high_speed_mode_1 > 0 then --Wahr bei verwendetem Befehl "enable_highspeed_usb()"
high_speed_mode_1 = enable_highspeed_usb(0) --Deaktiviert den "USB high precision timer" mit dem 1. Befehl
print("High speed mode disabled")
elseif high_speed_mode_2 == true then --Wahr bei verwendetem Befehl "enable_remote_hp_timer()"
high_speed_mode_2 = enable_remote_hp_timer(0) --Deaktiviert den "USB high precision timer" mit dem 2. Befehl
print("High speed mode disabled")
elseif high_speed_mode_3 == true then --Wahr bei verwendetem Befehl "set_remote_timing()"
high_speed_mode_3 = set_remote_timing(0) --Deaktiviert den "USB high precision timer" mit dem 3. Befehl
print("High speed mode disabled")
end
end
--Frage die CHDK-Version und CHDK-Revisionsnummer ab:
chdk_version = tonumber(string.sub(string.gsub(get_buildinfo().build_number, "%p", ""), 1, 3)) --Ermittele die CHDK-Version
chdk_build = tonumber(get_buildinfo().build_revision) --Ermittele die CHDK-Revisionsnummer
--Aktiviere den USB High Speed Modus ab CHDK 1.3 v3442:
if ((chdk_version < 130) or ((chdk_version < 140) and (chdk_build < 3442))) then --Wahr bei CHDK kleiner als 1.3 v3442
print("High speed mode n/a") --Der "USB high precision timer" ist nicht verfügbar
elseif ((chdk_version < 140) and (chdk_build >= 3442) and (chdk_build < 3585)) then --Wahr bei CHDK 1.3 von v3442 bis v3584
high_speed_mode_1 = enable_highspeed_usb(1000) --Aktiviert den "USB high precision timer" mit dem 1. Befehl
usb_time_limit = t * 100 --Ändert den Wert für "USB Time Limit" in ms (100 entspricht 100ms)
print("High speed mode enabled")
elseif ((chdk_version < 140) and (chdk_build >= 3585) and (chdk_build < 3791)) then --Wahr bei CHDK 1.3 von v3585 bis v3790
high_speed_mode_2 = enable_remote_hp_timer(1000) --Aktiviert den "USB high precision timer" mit dem 2. Befehl
usb_time_limit = t * 100 --Ändert den Wert für "USB Time Limit" in ms (100 entspricht 100ms)
print("High speed mode enabled")
elseif (((chdk_version < 140) and (chdk_build >= 3791)) or (chdk_version >= 140)) then --Wahr ab CHDK 1.3 v3791 oder CHDK 1.4
high_speed_mode_3 = set_remote_timing(1000) --Aktiviert den "USB high precision timer" mit dem 3. Befehl
usb_time_limit = t * 100 --Ändert den Wert für "USB Time Limit" in ms (100 entspricht 100ms)
print("High speed mode enabled")
end
--Start des eigentliches Lua-Skriptes mit den gewünschten Befehlen:
--..............
--..............
--..............
--Aufruf der Unterfunktion restore() bei Skriptende, welche den "USB High Speed Modus" wieder beendet:
restore()
Zusätzlicher Hinweis:Zeile
31 37 (ermittele chdk_version) ist für Lua-Anfänger kaum zu verstehen, da sie aus vier ineinander verschachtelten Lua-Befehlen besteht. Als Resultat für "chdk_version" kommen dabei die Zahlen 120, 130 oder 140 heraus, abhängig von der verwendeten CHDK-Version (1.2, 1.3 oder 1.4). Näheres dazu auf Anfrage.
Mein Fazit:Das erneute Umbennen des Befehls für den "USB high precision timer" war m.E. völlig unnötig und macht das Verwenden dieses Befehles für Lua-Programmierer unnötig kompliziert (ganz zu schweigen von den uBasic-Programmierern, die nun vollends die A....-Karte haben).
Als Lua-Programmierer hat man aber immerhin durch geschickte Programmierung die Möglichkeit, eigene Skripte mit dieser Funktion zu erstellen, welche beim Enduser nicht zwingend eine Aktualisierung von CHDK auf die aktuell neueste Version erfordern.
< EDIT: Diese Funktion steht ja bereits ab CHDK 1.3 v3442 zur Verfügung. >
Liebe Grüße
Werner_O