seit CHDK-DE Revision 449 ist eine elementare PTP-Interface-Funktion (Version 0.2) verfügbar.
Reyalp hat eine erweiterte Version 1.0 des PTP-Interfaces erarbeitet. Diese wird verwendet ab CHDK-DE Revision 608 und CHDK Revision 1101.
Ab CHDK-DE Revision 646 und CHDK Revision 1155 wird das PTP-Interface Version 2.0 benötigt. Neu ist eine Kommandozeilenschnittstelle (CLI). Tabellen werden immer als formatierte Strings zurückgegeben.
Grundsätztlich ermöglicht diese Funktion einen Zugriff auf die Kamera über USB.
Um diese Funktion verwenden zu können, sind die folgenden Vorbereitungen erforderlich.
Vorbereitung für die Kamera:
- Das aktuelle CHDK-DE verwenden.
Vorbereitung am Windows-PC (Windows 2000, XP, 2003, Vista, Win7; 32/64bit):
- Herunterladen des alternativen USB-Treibers (libusb-win32-bin-1.2.2.0.zip)
CHDK inside hat geschrieben: 1. Als erstes muss das Archiv entpackt werden.
2. Kamera per USB an den Rechner anschliessen und einschalten.
3. Dann sucht man im entpackten Archiv im Unterordner bin/x86 die Datei inf_wizard.exe und führt sie aus.
4. Im 2. Fenster "Device Selection" die Kamera auswählen.
5. Für diese werden im weiteren Verlauf die Treiberinformationen bereitgestellt und installiert.
6. Ein Neustart des Rechners ist nicht notwendig.
Verwendung des elementaren PTP-Interface-Funktion unter Windows:
- 1. Die 'ptpcam.exe' und 'chdk-ptp.cmd' aus dem Anhang in einen Ordner entpacken.
2. Die Kamera über USB mit dem PC verbinden und im Wiedergabe-Modus einschalten.
3. Die Befehlskonsole mit einem Doppelklick auf 'chdk-ptp.cmd' starten.
Befehle der Konsole (ptpcam Version 2.0):
- Code: Alles auswählen
q quit - beendet die Befehlskonsole
h help - zeigt diese Befehlsliste
r reset - erneuert die Kommunikation zur Kamera (notwendig z.B. nach reboot)
version - Anzeige der CHDK PTP Version (ptpcam and Kamera)
shutdown - Kamera ausschalten (soft)
reboot - Neustart der Kamera
reboot <filename> - Neustart mit der angegeben Firmware-Update Datei
reboot-fi2 - Neustart mit der Standard Firmware-Update Datei
m memory <address> - liest ein Byte aus Speicheradresse
m memory <address>-<address> - liest Bytes aus einem Speicherbereich
m memory <address> <num> - liest 'num' Byte aus Speicheradresse
set <address> <long> - schreibt einen Wert vom Typ LONG in Speicheradresse
c call <address> <arg1> ... - führt die Funktion an Speicheradresse 'address' mit den angegebenen Argumenten aus
upload <local> <remote> - überträgt eine Datei vom PC zur Kamera
download <remote> <local> - überträgt eine Datei von der Kamera zum PC
mode <val> - Umschalten Aufnahme-/Wiedergabe-Modus (0=Wiedergabe,1=Aufnahme)
lua <code> - ausführen LUA-Code
luar <code> - ausführen LUA-Code mit Rückgabewert ("return <code>")
script-support - zeigt die von der Kamera unterstützen Skriptsprachen (z.Z. LUA)
script-status - Anzeige ob ein Skript ausgeführt wird und ob Rückgabewerte abrufbar sind
getm - Skript-Meldungen und Skript-Rückgabewerte abrufen
putm <message> - sendet Meldungen an ein laufendes Skript
Kommunikationstest:
- Steht die Kommunikation, dann sieht die Konsole so aus
- Code: Alles auswählen
<conn>
- Code: Alles auswählen
< > reset
<conn>
Wurde die Kamera erst später eingeschaltet, dann hilft ein Reset
Erscheint nicht 'conn', dann muss die Treiberinstallation überprüft werden (siehe "Vorbereitung am Windows-PC").
Beispiele (getested mit A590):
- CHDK PTP Version abfragen
- Code: Alles auswählen
<conn> version
ptpcam: 2.0
camera: 2.0
- Bild IMG_0001.JPG in das Verzeichnis der 'ptpcam.exe' kopieren
- Code: Alles auswählen
<conn> download A/DCIM/100CANON/IMG_0001.JPG IMG_0001.JPG
- neues CHDK aus dem Verzeichnis der 'ptpcam.exe' auf die Kamera kopieren und die Kamera neu starten
Hinweis: Nur für SD-Karten mit einer Partition!- Code: Alles auswählen
<conn> upload DISKBOOT.BIN A/DISKBOOT.BIN
<conn> reboot
- Mit 'lua' die AF-LED ein und ausschalten
- Code: Alles auswählen
<conn> lua set_led(9,1)
<conn> lua set_led(9,0)
- Mit 'luar' die CHDK Version abfragen
- Code: Alles auswählen
<conn> luar get_buildinfo().version.." "..get_buildinfo().build_number.." | "..g
et_buildinfo().platform.."-"..get_buildinfo().platsub.." ["..get_buildinfo().bui
ld_date.." "..get_buildinfo().build_time.."]"
script:1
1:ret:'CHDK-DE 1.1.0 | a590-101b [Jan 10 2012 09:11:47]'
- Die Befehle "memory" und "call" sind mit größter Vorsicht und nur bei genauer Kenntnis zu benutzen! Bitte unbedingt diesen Beitrag lesen.
Update:
15.04.11 Informationen zu PTP-Version 1.0
Neuerungen:
- Rückgabewerte auch bei 'lua'
- Code: Alles auswählen
<conn> lua a=4; b=5; return a+b
script:1
<conn> getm
1:ret:9 (9)
- Rückgabewerte dürfen auch Tabellen sein
- Code: Alles auswählen
<conn> luar get_buildinfo()
script:2
2:ret:'platform a590
build_date Jan 10 2012
build_number 1.1.0
build_time 09:11:47
version CHDK-DE
platsub 101b
build_revision 915
platformid 12662
os dryos
'
- Direkte Kommunikation zwischen der Konsole mit laufenden Skripten: Dazu verwendet man in der Konsole getm (lesen von Meldungen) und putm (schreiben). In LUA werden diese Meldungen mit read_usb_msg() gelesen und durch write_usb_msg() zur Konsole gesendet.
Dieses Beispiel benötigt die Datei 'putmtest.lua' (Anhang) im Verzeichnis der Konsole. Damit kann die LED-Nr. 8 über die Konsole gesteuert werden. Bei der A590 ist das die blaue LED der Printtaste.
Das Skript auf die Kamera kopieren und starten- Code: Alles auswählen
<conn> upload putmtest.lua A/CHDK/SCRIPTS/putmtest.lua
<conn> lua loadfile("A/CHDK/SCRIPTS/putmtest.lua")()
script:1
<conn> getm
1:msg:'LED ist aus'
1:msg:'putmtest.lua ist bereit fuer Befehle.
Sende 'putm ?' fuer Hilfe'
- Code: Alles auswählen
<conn> putm ?
<conn> getm
1:msg:'putmtest Hilfe:
quit beenden
status aktueller LED Status
led ein schalte LED ein
led aus schalte LED aus'
- Code: Alles auswählen
<conn> putm led ein
<conn> getm
1:msg:'LED leuchtet'
- Code: Alles auswählen
<conn> putm led aus
<conn> getm
1:msg:'LED ist aus'
- Code: Alles auswählen
<conn> putm quit
<conn> getm
1:msg:'LED ist aus'
1:msg:'putmtest.lua beendet'
Update:
17.01.12 Informationen zu PTP-Version 2.0
- Kommandozeilenschnittstelle - CLI
Damit ist es möglich die elementare PTP-Interface-Funktion auch in Shell-Skripten zu benutzen.
Beispiel für Direkte Befehlsangabe:- Code: Alles auswählen
ptpcam --chdk="version"
ptpcam: 2.0
camera: 2.0
Beispiel für Befehlsangabe über STDIN (cli_bsp.zip im Anhang):- Code: Alles auswählen
ptpcam --chdk < ptp_version.txt
<conn> ptpcam: 2.0
camera: 2.0
<conn>
Mehrzeiliges Beispiel für STDIN(cli_bsp.zip im Anhang)::- Code: Alles auswählen
ptpcam --chdk < ptp_led8.txt
<conn> script:7
<conn> script:8
<conn> 7:ret:'LED fuer 2s einschalten'
8:ret:'
Beachte:
PTP ist bereit, aber das Skript wird noch ausgefuehrt,
denn die LED ist noch an!
'
<conn> script:9
<conn>