CHDK ist ein dynamisches Projekt. Es fließen laufend Änderungen in das System ein. Da bleibt es nicht aus, dass die eine oder andere Funktion nach Veränderungen nicht mehr richtig benutzbar ist. Das ist nicht schön, aber leider auch nicht immer vermeidbar.
Damit man einen prinzipiellen Funktionscheck ausführen kann, habe ich angefangen, ein Skript zusammenzustellen, dass diverse grundlegende Funktionen testet. So kann man sich schneller einen Überblick verschaffen, wo es evt. klemmt.
Das Skript hat noch einen netten Nebeneffekt. Es kann auch als CHDK-Demo verwendet werden.
Zum Skript selbst:
Es sollte im Wiedergabemodus gestartet werden. Zuerst werden diverse Kamera/CHDK-Infos angezeigt. Als nächstes erfolgt ein Signalton-Test, bei dem das Einschaltsignal ertönen sollte. Dann werden die LEDs angesteuert. Danach wird die Modusumschaltung Wiedergabe/Aufnahme getestet (Achtung Objektiv!). Anschließend wird fokussiert und diverse fototechnische Werte kommen zur Anzeige. Es folgt der DOF-Test mit Anzeige aller relevanten DOF-Werte. Zum Schluß wird die Bewegungserkennung geprüft. Wird eine Bewegung erkannt (Muss natürlich auch erzeugt werden.), endet das Skript.
Alle Text-Ausgaben werden zusätzlich in einer Log-Datei gespeichert (CHDK/LOGS/ LOG0010.txt).
(Anmerkung: Es wird die Anzahl der verbleibenden JPGs angezeigt. Das funktioniert nur, wenn man zwischen Kamerastart und Skript-Start ein Foto gemacht hat. Ansonsten wird hier 0 angezeigt.)
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
***************************
(c)msl 26/11/2010
thx rudi for Int2Str
***************************
@title Test CHDK-DE Version
]]
function led_test()
for i=0, 10 do
cls()
print("LED-Nr.:", i)
set_led(i, 1)
sleep(800)
set_led(i, 0)
end
cls()
end
function mode_test()
rec, vid, mode=get_mode()
if rec == false then
set_record(1)
sleep(3000)
set_record(0)
end
end
function call_focus_test()
rec, vid, mode=get_mode()
if rec == false then set_record(1) end
set_console_layout(5,3,30,10)
press("shoot_half")
repeat
sleep(10)
until get_shooting() == true
print("Tv96-Wert", get_tv96())
print("Av96-Wert", get_av96())
print("Sv96-Wert", get_sv96())
print("Bv96-Wert", get_bv96())
release("shoot_half")
repeat
sleep(10)
until get_shooting() ~= true
sleep(4000)
end
function md_test()
repeat
ret=md_detect_motion()
until ret~=0
print("Bewegung erkannt!")
sleep(1000)
end
function Int2Str(val, f_dist, dpow, unit, fix)
local sval=tostring(math.abs(val))
local res=tostring(val)
if (f_dist==1 and (val<=0 or val>=65535)) then res="inf" end
if (sval~="nil" and res~="inf" and dpow~=nil) then
local slen=string.len(sval)
local scount=math.abs(dpow)
local least=""
if (scount==dpow) then
res=sval..string.rep("0",scount)
if (fix~=nil) then least=string.rep("0",fix) end
else
if (slen<=scount) then
sval=string.rep("0",scount-slen+1)..sval
slen=string.len(sval)
end
res=string.sub(sval,1,slen-scount)
least=string.sub(sval,slen-scount+1)
local l_l=string.len(least)
if (fix==nil) then
while (l_l>0 and string.sub(least,l_l)=="0") do
least=string.sub(least,1,l_l-1)
l_l=string.len(least)
end
else
if (l_l>math.abs(fix)) then least=string.sub(least,1,fix) end
if (l_l<math.abs(fix)) then least=least..string.rep("0",fix-l_l) end
end
end
if (string.len(least)>0) then res=res.."."..least end
if (val<0) then res="-"..res end
end
if (unit~=nil and res~="inf" and string.len(unit)>0) then res=res.." "..unit end
return res
end
function dof_test()
set_console_layout(5,0,30,14)
press("shoot_half")
repeat
sleep(10)
until get_shooting() == true
dofinfo=get_dofinfo()
release("shoot_half")
print("SD :",Int2Str(dofinfo.focus,1,0,"mm"))
print("NL :",Int2Str(dofinfo.near,1,0,"mm"))
print("FL :",Int2Str(dofinfo.far,1,0,"mm"))
print("DOF:",Int2Str(dofinfo.dof,1,0,"mm"))
print("HYP:",Int2Str(dofinfo.hyp_dist,1,0,"mm"))
print("MSD:",Int2Str(dofinfo.min_stack_dist,1,0,"mm"))
print("Hyp.-Validität:",dofinfo.hyp_valid)
print("Fokus-Validität:",dofinfo.focus_valid)
print("coc:",dofinfo.coc,"µm /",Int2Str(dofinfo.coc,0,-3,"mm"))
print("Brennweite:",Int2Str(dofinfo.focal_length,0,-3,"mm"))
print("KB-Brennweite:",Int2Str(dofinfo.eff_focal_length,0,-3,"mm"))
print("Blende:",Int2Str(dofinfo.aperture,0,-3,"",1))
sleep(12000)
end
function sound_test()
play_sound(0)
end
function get_info()
set_console_layout(5,2,35,13)
cls()
bi=get_buildinfo()
print("Kamera:",bi.platform, bi.platsub)
print(os.date("%d.%m.%Y %X"))
nd=get_nd_present()
if nd == 0 then print("Irisblende")
elseif nd == 1 then print("ND-Filter")
elseif nd == 2 then print("ND-Filter+Irisblende")
end
print("Zoomschritte:", get_zoom_steps())
if (type(get_curve_state) ~= "function") then
print("RAW-Format: 12 Bit")
else
print("RAW-Format: 10 Bit")
end
if os.stat("A/CHDK/badpixel.bin") ~= nil then
print("badpixel.bin verfügbar!")
else
print("badpixel.bin nicht verfügbar!")
end
print("Akku/Bat:", get_vbatt(), "mV")
print("SD-Karte:", get_free_disk_space()/1024, "MB frei")
print("Anzahl JPG:", get_jpg_count())
print("Anzahl RAW:", get_raw_count())
if type(call_func_ptr) == "function" or type(call_event_proc) == "function" then
print("Native Calls möglich!")
else
print("Native Calls nicht möglich!")
end
sleep(11000)
end
function print_info(text)
cls()
sleep(500)
set_console_layout(5,5,30,10)
print(text)
sleep(2000)
cls()
set_console_layout(0,0,25,5)
end
-- start script
wait=2000
print_screen(10)
print_info("Test Kamera-Infos")
get_info()
sleep(wait)
print_info("Test Audio-Signal")
sound_test()
sleep(wait)
print_info("Test LED")
led_test()
sleep(wait)
print_info("Test Modusumschaltung")
mode_test()
sleep(wait)
print_info("Test Fokusieren")
call_focus_test()
sleep(wait)
print_info("Test DOF")
dof_test()
sleep(wait)
print_info("Test MD")
md_test()
print_screen(false)
***************************
(c)msl 26/11/2010
thx rudi for Int2Str
***************************
@title Test CHDK-DE Version
]]
function led_test()
for i=0, 10 do
cls()
print("LED-Nr.:", i)
set_led(i, 1)
sleep(800)
set_led(i, 0)
end
cls()
end
function mode_test()
rec, vid, mode=get_mode()
if rec == false then
set_record(1)
sleep(3000)
set_record(0)
end
end
function call_focus_test()
rec, vid, mode=get_mode()
if rec == false then set_record(1) end
set_console_layout(5,3,30,10)
press("shoot_half")
repeat
sleep(10)
until get_shooting() == true
print("Tv96-Wert", get_tv96())
print("Av96-Wert", get_av96())
print("Sv96-Wert", get_sv96())
print("Bv96-Wert", get_bv96())
release("shoot_half")
repeat
sleep(10)
until get_shooting() ~= true
sleep(4000)
end
function md_test()
repeat
ret=md_detect_motion()
until ret~=0
print("Bewegung erkannt!")
sleep(1000)
end
function Int2Str(val, f_dist, dpow, unit, fix)
local sval=tostring(math.abs(val))
local res=tostring(val)
if (f_dist==1 and (val<=0 or val>=65535)) then res="inf" end
if (sval~="nil" and res~="inf" and dpow~=nil) then
local slen=string.len(sval)
local scount=math.abs(dpow)
local least=""
if (scount==dpow) then
res=sval..string.rep("0",scount)
if (fix~=nil) then least=string.rep("0",fix) end
else
if (slen<=scount) then
sval=string.rep("0",scount-slen+1)..sval
slen=string.len(sval)
end
res=string.sub(sval,1,slen-scount)
least=string.sub(sval,slen-scount+1)
local l_l=string.len(least)
if (fix==nil) then
while (l_l>0 and string.sub(least,l_l)=="0") do
least=string.sub(least,1,l_l-1)
l_l=string.len(least)
end
else
if (l_l>math.abs(fix)) then least=string.sub(least,1,fix) end
if (l_l<math.abs(fix)) then least=least..string.rep("0",fix-l_l) end
end
end
if (string.len(least)>0) then res=res.."."..least end
if (val<0) then res="-"..res end
end
if (unit~=nil and res~="inf" and string.len(unit)>0) then res=res.." "..unit end
return res
end
function dof_test()
set_console_layout(5,0,30,14)
press("shoot_half")
repeat
sleep(10)
until get_shooting() == true
dofinfo=get_dofinfo()
release("shoot_half")
print("SD :",Int2Str(dofinfo.focus,1,0,"mm"))
print("NL :",Int2Str(dofinfo.near,1,0,"mm"))
print("FL :",Int2Str(dofinfo.far,1,0,"mm"))
print("DOF:",Int2Str(dofinfo.dof,1,0,"mm"))
print("HYP:",Int2Str(dofinfo.hyp_dist,1,0,"mm"))
print("MSD:",Int2Str(dofinfo.min_stack_dist,1,0,"mm"))
print("Hyp.-Validität:",dofinfo.hyp_valid)
print("Fokus-Validität:",dofinfo.focus_valid)
print("coc:",dofinfo.coc,"µm /",Int2Str(dofinfo.coc,0,-3,"mm"))
print("Brennweite:",Int2Str(dofinfo.focal_length,0,-3,"mm"))
print("KB-Brennweite:",Int2Str(dofinfo.eff_focal_length,0,-3,"mm"))
print("Blende:",Int2Str(dofinfo.aperture,0,-3,"",1))
sleep(12000)
end
function sound_test()
play_sound(0)
end
function get_info()
set_console_layout(5,2,35,13)
cls()
bi=get_buildinfo()
print("Kamera:",bi.platform, bi.platsub)
print(os.date("%d.%m.%Y %X"))
nd=get_nd_present()
if nd == 0 then print("Irisblende")
elseif nd == 1 then print("ND-Filter")
elseif nd == 2 then print("ND-Filter+Irisblende")
end
print("Zoomschritte:", get_zoom_steps())
if (type(get_curve_state) ~= "function") then
print("RAW-Format: 12 Bit")
else
print("RAW-Format: 10 Bit")
end
if os.stat("A/CHDK/badpixel.bin") ~= nil then
print("badpixel.bin verfügbar!")
else
print("badpixel.bin nicht verfügbar!")
end
print("Akku/Bat:", get_vbatt(), "mV")
print("SD-Karte:", get_free_disk_space()/1024, "MB frei")
print("Anzahl JPG:", get_jpg_count())
print("Anzahl RAW:", get_raw_count())
if type(call_func_ptr) == "function" or type(call_event_proc) == "function" then
print("Native Calls möglich!")
else
print("Native Calls nicht möglich!")
end
sleep(11000)
end
function print_info(text)
cls()
sleep(500)
set_console_layout(5,5,30,10)
print(text)
sleep(2000)
cls()
set_console_layout(0,0,25,5)
end
-- start script
wait=2000
print_screen(10)
print_info("Test Kamera-Infos")
get_info()
sleep(wait)
print_info("Test Audio-Signal")
sound_test()
sleep(wait)
print_info("Test LED")
led_test()
sleep(wait)
print_info("Test Modusumschaltung")
mode_test()
sleep(wait)
print_info("Test Fokusieren")
call_focus_test()
sleep(wait)
print_info("Test DOF")
dof_test()
sleep(wait)
print_info("Test MD")
md_test()
print_screen(false)
Erstellt in 0.030 Sekunden, mit GeSHi 1.0.8.9
Vorschläge für weitere Tests sowie Ergänzungen oder Änderungen sind erwünscht.
Gruß msl