[PTP] elementare PTP-Interface-Funktion

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

elementare PTP-Interface-Funktion

Beitragvon rudi » 26.10.2010, 12:18

Hallo,

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:
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>

    Wurde die Kamera erst später eingeschaltet, dann hilft ein Reset
    Code: Alles auswählen
    <    > reset
    <conn>

    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'
    Hilfe aufrufen
    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'
    LED einschalten
    Code: Alles auswählen
    <conn> putm led ein
    <conn> getm
    1:msg:'LED leuchtet'
    LED ausschalten
    Code: Alles auswählen
    <conn> putm led aus
    <conn> getm
    1:msg:'LED ist aus'
    Skript beenden
    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>
Gruß rudi
Dateianhänge
cli_bsp.zip
Beispieldateien für Kommandozeilenschnittstelle
(389 Bytes) 1275-mal heruntergeladen
ptpcam_V2.0.zip
ptpcam.exe (32bit); Version:2.0; Datum:17.01.2012
(54.11 KiB) 4125-mal heruntergeladen
putmtest.lua
einfaches Beispielskript für 'ptpm'
(1.72 KiB) 1244-mal heruntergeladen
Zuletzt geändert von rudi am 17.01.2012, 21:58, insgesamt 25-mal geändert.
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon msl » 26.10.2010, 13:18

Hallo rudi,

Danke für den Hinweis. Fehler ist korrigiert. (Typischer Fall von Ablenkung. Aufgefallen war es mir schon, dass da was fehlt. Leider habe ich es nicht nachverfolgt.)

Aber schön, dass du dich der Sache annimmst. Da habe ich große Hoffnung, dass die Thematik PTP vorankommt.

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

Beitragvon rudi » 26.10.2010, 22:24

Hallo msl,

danke für deine schnelle Arbeit.

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

Re: elementare PTP-Interface-Funktion

Beitragvon rudi » 04.11.2010, 08:35

Hallo,

hier eine erste Einschätzung der Situation.

Der volle Funktionsumfang ist derzeit nur für die Ixus870 verfügbar. Der A540 und D10 fehlt noch die "mode <val>"- Unterstützung.
Die Umsetzung weiterer Kameras sollte durch den gut gepflegten msl-Branch nicht so schwer sein. Ich werde für die A590 einen Patch vorbereiten.

Das zur Kommunikation erforderliche Konsolen-Programm "ptpcam.exe" ist unhandlich für den geübten WIN-User. Dafür ist es auch für Linux verfügbar.

rudi
Zuletzt geändert von rudi am 06.11.2010, 13:22, insgesamt 1-mal geändert.
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: elementare PTP-Interface-Funktion

Beitragvon TaiJiGong » 04.11.2010, 12:13

Hallo Rudi,

Ich werde für die A590 einen Patch vorbereiten.


Ich würde das gerne für die IXUS100is testen. Kannst Du kurz erklären welche Änderungen dazu notwendig sind. Evtl. reicht mir ja auch schon der Patch für die A590, um zu sehen wie ich das anpassen kann.

Jetzt gibt es im Forum auch die Möglichkeit eine Tabelle zu erzeugen, damit könnten wir am Anfang des Beitrags, gut eine Übersicht des Funktionsumfangs für die verschiedenen Kameras angeben.

ptpcam läst sich ohne Probleme unter Linux kompilieren.
ptpcam_source> make all -f Makefile.linux


Viele Grüße,

TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: elementare PTP-Interface-Funktion

Beitragvon rudi » 04.11.2010, 20:52

Hallo TaiJiGong,

TaiJiGong hat geschrieben:Kannst Du kurz erklären welche Änderungen dazu notwendig sind. Evtl. reicht mir ja auch schon der Patch für die A590, um zu sehen wie ich das anpassen kann.

Die wichtigste Änderung im Quelltext ist das Freischalten der Kamera in der "include/camera.h" Abschnitt "CAMERA_ixus100_sd780".

Syntax: [ Download ] [ Verstecken ]
Benutze C Syntax Highlighting
#elif defined (CAMERA_ixus100_sd780)
    #define CAM_CHDK_PTP                    1       // include CHDK PTP support
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9

Weiterhin muss die Compiler-Option "OPT_PTP=1" in der "buildconf.inc" aktiviert sein. Für erste Versuche sollte das reichen.

Um die Mode-Umschaltung nutzen zu können sind die Einsprungpunkte für die Firmwarefunktionen "set_control_event", "PB2Rec", "Rec2PB" erforderlich. Möglicherweise findest du da was im int. Forum im Porting-Thread.

Als Anhang der Patch mit Mode-Umschaltung für die A590_100e und A590_101b.
Dateianhänge
trunk450_PTP_A590_patch.diff
PTP-Patch A590 Basis: Trunk450
(2.13 KiB) 736-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: elementare PTP-Interface-Funktion

Beitragvon TaiJiGong » 04.11.2010, 21:34

Hallo Rudi,

Danke für die Tips, ich hoffe das ich am Wochenende etwas Zeit finde um mich darum zu kümmern. Aus den patch sollte ich erkennen was erforderlich ist.

Viele Grüße,

TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: elementare PTP-Interface-Funktion

Beitragvon msl » 05.11.2010, 13:52

Hallo rudi,

ich habe deinen A590-Patch in CHDK-DE eingecheckt. Das sollte die Arbeit ein wenig erleichtern. Bei Gelegenheit muss ich dass auch mal für die A720 tun.

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: elementare PTP-Interface-Funktion

Beitragvon rudi » 05.11.2010, 15:36

Hallo,

wer lesen kann ist eindeutig im Vorteil!
Denn im msl-Branch findet man alle PTP relevanten Informationen für die IXUS100 (von CHDKLover im August 2010).

Ein Patch für die IXUS100 und A720 sind daher nur eine Fleißarbeit. Das mach' ich doch.

@msl
Danke für das Einchecken der A590.
Wollen wir alle verfügbaren PTP-Kameras aus deinem Branch für das elementare PTP im Trunk vorbereiten oder nur auf Nachfrage, wenn dafür Tester verfügbar sind?

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

Re: elementare PTP-Interface-Funktion

Beitragvon TaiJiGong » 05.11.2010, 15:59

Hallo Rudi,

Ein erster Test ist OK.


  • Code: Alles auswählen
    <conn> lua set_led(2,1)
    <conn> lua set_led(2,0)
    <conn> lua set_led(2,2)


Code: Alles auswählen
>./ptpcam -l
Listing devices...
bus/dev vendorID/prodID device model
007/017 0x04A9/0x31C2   Canon DIGITAL IXUS 100 IS

>./ptpcam -L

Listing files...
Camera: Canon DIGITAL IXUS 100 IS
Handler:           Size:        Captured:       name:
0x01b05b11:      2747361        2010-06-11 15:20        IMG_1457.JPG
0x01b05b21:      1702369        2010-06-11 15:20        IMG_1458.JPG
0x01b05b31:      3758011        2010-06-11 15:21        IMG_1459.JPG

> ./ptpcam -o

Listing supported operations...
Camera: Canon DIGITAL IXUS 100 IS
  0x1014: GetDevicePropDesc
  0x1015: GetDevicePropValue
  0x1016: SetDevicePropValue
  0x1017: ResetDevicePropValue
  0x1001: GetDeviceInfo
  0x1002: OpenSession
  0x1003: CloseSession
  0x9013: UNKNOWN
  0x901f: UNKNOWN
  0x9999: UNKNOWN
  0x1004: GetStorageIDs
  0x1005: GetStorageInfo
  0x1006: GetNumObjects
  0x1007: GetObjectHandles
  0x1008: GetObjectInfo
  0x1009: GetObject
  0x100a: GetThumb
  0x101b: GetPartialObject
  0x100c: SendObjectInfo
  0x100d: SendObject
  0x100b: DeleteObject
  0x100f: FormatStore
  0x1012: SetObjectProtection
  0x9001: UNKNOWN

Viele Grüße,

TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: elementare PTP-Interface-Funktion

Beitragvon msl » 05.11.2010, 16:09

Hallo rudi,

mit fehlt im Augenblick die Zeit, die PTP-Sachen zu testen.

Wenn du die auch die internationale Entwicklung im Auge behältst, ist eigentlich nichts dagegen einzuwenden, alle verfügbaren PTP-Versionen einzuchecken. So können wir auch ein Download-Paket mit PTP-Option schnüren. Damit kämen vielleicht auch mehr Tester ins Spiel.

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: elementare PTP-Interface-Funktion

Beitragvon rudi » 05.11.2010, 18:02

Hallo,

hier erst einmal die beiden Patches für die IXUS100 und A720 mit Mode-Umschaltung. Dabei ist diese bei der IXUS100 ungetestet.

[EDIT]
08.11.2010: Der neue Patch ist weiter unten.
[/EDIT]

Gruß rudi
Dateianhänge
trunk452_PTP_A720_patch.diff
PTP-Patch A720 Basis: Trunk452
(1.66 KiB) 755-mal heruntergeladen
Zuletzt geändert von rudi am 08.11.2010, 12:58, insgesamt 2-mal geändert.
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: elementare PTP-Interface-Funktion

Beitragvon msl » 06.11.2010, 14:40

Hallo,

Check in A720 und Ixus100, Danke rudi.

Der Vollständigkeit halber: Für die A720 sind alle Kommandos inkl. Mode-Umschaltung in der Trunk-Version nutzbar.

Sehr schön. Da auch der aktuelle alternative USB-Treiber auf vielen Systemen funktioniert, können wir uns so langsam mit konkreten Anwendungen beschäftigen. Möglicherweise wird hier aber erst ein GUI den Durchbruch bringen.

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: elementare PTP-Interface-Funktion

Beitragvon TaiJiGong » 06.11.2010, 23:28

Hallo Rudi,

ich habe mir den trunk-453 aus gecheckt und in buildconf.inc PTP enabled. Alles klapt wie erwartet. Dein patch macht das gleiche wie meine Änderungen.


Code: Alles auswählen
didi@linux-dn:~/trunk-453/ptpcam_source> ./ptpcam --chdk <info
<conn> CHDK 1.1.0-DE | ixus100_sd780-100c [Nov  6 2010 23:01:26]


"mode 0"und "mode 1" hat keine Wirkung. (war auch frühre so, da stimmt noch etwas nicht) Wohl das gleicher Verhalten wie bei der Version von msl. Vielleicht stimmt ja da eine Adresse nicht.

Code: Alles auswählen
NHSTUB(set_control_event, 0xFF873E74) // nicht sicher
NHSTUB(PB2Rec, 0xFF8772BC) // via aAcPb2rec
NHSTUB(Rec2PB, 0xFF8772FC) // via aAcRec2pb



Daten kann ich auch aus der Kamera Auslesen:

Code: Alles auswählen
<conn> m 1000 1000                                                         
000003e8                           30 bc 80 ea 70 16 3e d2  |        0...p.>.|
000003f0  00 5e ea 0f 03 c1 7e 93  74 0a cb 3c e1 87 97 2d  |.^....~.t..<...-|


Viel Grüße,

TaiJiGong
Canon IXUS 100 (SD780) Firmware: 1.00C, sonst nur rein mechanische Kameras wie Pentax-MX
TaiJiGong
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 320
Registriert: 08.04.2010, 20:10
Wohnort: München
Kamera(s): IXUS100is, 100c
IXUS IIs (etwas defekt ohne CHDK)

Re: elementare PTP-Interface-Funktion

Beitragvon rudi » 07.11.2010, 11:29

Hallo TaiJiGong,

TaiJiGong hat geschrieben:"mode 0"und "mode 1" hat keine Wirkung. (war auch frühre so, da stimmt noch etwas nicht) Wohl das gleicher Verhalten wie bei der Version von msl.

Sorry, dieser Umstand war mir nicht bekannt. Wie angekündigt sind die Patches aus den msl-Quellen erstellt.

Dann versuche bitte diese Adresse:
Code: Alles auswählen
NHSTUB(set_control_event, 0xFF873DB4) // 2. Versuch


@msl
Lt. deinem branch sollte ich folgende Kameras noch für ein Patch (mit Mode-Umschaltung) vorbereiten können:
A480, A540, A610, A650, A710, IXUS700, SX1, SX10, SX200

Sind für diese Kameras erfolgreiche Tests bekannt?

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

Nächste

Zurück zu Code-Ecke

Wer ist online?

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

cron