[PTP] ptpCamGui - USB-Kamerasteuerung inkl. Datei-Download/Upload

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

Re: Kamera-Steuerung per USB inkl. Foto-Download mit Windows

Beitragvon TZocker » 11.03.2011, 17:45

Die Update Funktion von chdk-de funktioniert auf der 650 prima was mir noch fehlt ist die anzeige der rev. Nummer im chdk Menü (macht es einfacher zum updaten einer bestimmten Version).

Was jetzt auch noch toll wäre eine automatische update Möglichkeit des ptp-gui.
Canon A 650 IS
TZocker
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 51
Registriert: 12.06.2009, 16:20
Kamera(s): A 650

Re: Kamera-Steuerung per USB inkl. Foto-Download mit Windows

Beitragvon Startrail » 11.03.2011, 20:28

Das Update funktioniert auch bei mir!

Viele Grüße
Startrail
Startrail
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 128
Bilder: 6
Registriert: 29.06.2010, 15:38
Kamera(s): A530

Re: Kamera-Steuerung per USB inkl. Foto-Download mit Windows

Beitragvon Bernd r » 11.03.2011, 20:29

f_m_b hat geschrieben:Noch ein weiterer Test:

reboot per lua-Skript verhält sich genauso wie reboot über ptp.
D.h. das ist ein kameraspezifisches Problem und hat nichts mit PTP zu tun.

Compiler-Options nur OPT_PTP und OPT_LUA
Freier Speicher 190KB mit gcc 4.51
Freier Speicher 208KB mit gcc 4.40

Mit 208KB schafft man eine Belichtungsreihe von 7 Bildern, danach ist der Speicher auf 60K geschrumpft.
Ca. 20KB pro Bild werden aufgebraucht. ???

Einzelbilder (langsam): Nach dem ersten Bild sinkt der Speicher um ca. 20KB, bei den nachfolgenden Bildern bleibt der Speicher dann jedoch konstant.
Einzelbilder (schnell): Wenn man der Kamera keine Zeit lässt und sehr schnell nacheinander manuell ein Bild nach dem anderen schießt reduziert sich der Speicher wie bei der Belichtungsreihe pro Bild um 20KB.

Zeitraffer: 7 Bilder / 10s Speicher ging um 20KB nach unten.
Zeitraffer: 7 Bilder / 5s Speicher ging um 20KB nach unten.
Zeitraffer: 7 Bilder / 2s Speicher ging um 140KB nach unten.

Es sieht so aus als ob die Kamera eine gewisse Zeit benötigt um Ihren Speicher aufzuräumen. Wenn sie diese nicht bekommt gibt sie Speicher nicht mehr frei.
Mit einer Fernbedienung schnell ausgelöste Bildfolge (auch mittels LUA-Skript) verbraucht keinen Speicher. Was könnte es bei PTP als Grund haben, dass der Speicher nicht freigegeben wird?
Gibt es einen "GarbageCollector"-Befehl in CHDK oder wird genau das mit OPT_EXMEM_MALLOC erreicht?


kannst höchstens noch probieren, ob es hilft, in core/ptp.c

buf_size= 8192;//core_get_free_memory()>>1;

einzugeben.normalerwweise versucht der alte code die hälfte des speichers zu allozieren,

siehe hier wo das geändert wird.

Code: Alles auswählen
static int handle_ptp(
               int h, ptp_data *data, int opcode, int sess_id, int trans_id,
               int param1, int param2, int param3, int param4, int param5)
{
  static union {
    char *str;
#ifdef OPT_LUA
    lua_State *lua_state;
#endif
  } temp_data;
  static int temp_data_kind = 0; // 0: nothing, 1: ascii string, 2: lua object
  static int temp_data_extra; // size (ascii string) or type (lua object)
  PTPContainer ptp;

  // initialise default response
  memset(&ptp,0,sizeof(PTPContainer));
  ptp.code = PTP_RC_OK;
  ptp.sess_id = sess_id;
  ptp.trans_id = trans_id;
  ptp.num_param = 0;

  buf_size=  8192;//core_get_free_memory()>>1;


der sleep patch ist nur für den start crash hilfreich
Bernd r
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 5
Registriert: 21.02.2011, 18:08
Kamera(s): ixus 1000 HS

Re: Kamera-Steuerung per USB inkl. Foto-Download mit Windows

Beitragvon msl » 12.03.2011, 11:35

Die erweiterte Upload-Funktion für die GUI wurde noch einmal überarbeitet und damit vereinfacht.

Ausgangspunkt ist immer eine Zip-Datei, die mindestens diskboot.bin und optional ps.fir oder ps.fi2 enthält.

Es gibt jetzt 3 Optionen, CHDK-DE, CHDK und Lokale Version. Je nach eingestellter Option wird die aktuelle Version vom Autobuild-Server heruntergeladen bzw. kann lokal auf der Festplatte als Zip-Datei ausgewählt werden (z.B. selbst compilierte Versionen oder andere Testversionen). Danach wird entpackt und auf die Kamera hochgeladen. Der Vorgang wird mit einem Neustart der Kamera abgeschlossen, welcher optional abschaltbar ist.

Für fehlerhafte Downloads oder andere Probleme steht eine Löschfunktion zur Verfügung, mit der Zip-Dateien gelöscht werden können. Das ist nützlich, um einen kompletten Update-Vorgang zu wiederholen.

Als Vorgabe-Ordner für die herunterzuladenden Dateien wird ein Ordner "archives" im Programmordner angelegt. Der Ordner kann im weiteren Verlauf gewechselt werden. Der Pfad zum zuletzt verwendeten Ordner wird in der ini-Datei gespeichert.

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: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon msl » 16.03.2011, 12:13

Bild-Lösch-Funktion hinzugefügt.

Beim Herunterladen der Bilder von der Kamera besteht jetzt die optionale Möglichkeit, die Bilder nach dem Transfer auf der SD-Karte zu löschen.

Die Benutzung der Funktion geschieht auf eigens Risiko. Möglicherweise kann es zu Bildverlusten kommen.

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: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon Startrail » 17.03.2011, 16:28

Hallo,

die Löschfunktion funktioniert bei mir super!


Mir ist nur so nebenbei aufgefallen, dass die Fortschrittsanzeige beim Download der Bilder auf die nächste Stufe geht, wenn das Bild noch nicht heruntergeladen wurde. Wäre es vielleicht sinnvoller erst nachdem das Bild geladen wurde den Balken zu verlängern? Ist zwar ne Kleinigkeit, aber wenn Ihr kurz Zeit habt...


Viele Grüße
Startrail
Startrail
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 128
Bilder: 6
Registriert: 29.06.2010, 15:38
Kamera(s): A530

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon achillies » 20.03.2011, 19:50

Startrail hat geschrieben:Mir ist nur so nebenbei aufgefallen, dass die Fortschrittsanzeige beim Download der Bilder auf die nächste Stufe geht, wenn das Bild noch nicht heruntergeladen wurde. Wäre es vielleicht sinnvoller erst nachdem das Bild geladen wurde den Balken zu verlängern? Ist zwar ne Kleinigkeit, aber wenn Ihr kurz Zeit habt...

EDIT - In English
I believe if you switch these two lines in ptpcamgui.au3 the result will be more what you expect.
CURRENTLY IS:
GUICtrlSetData ($PBDcimProcess, $DcimCurrFile * 100 / $DcimFiles)
GUICtrlSetData ($LDcimProcess, $DcimCurrFile & $LngDcimWndOf [$LngDefault] & $DcimFiles)

CHANGE TO:
GUICtrlSetData ($LDcimProcess, $DcimCurrFile & $LngDcimWndOf [$LngDefault] & $DcimFiles)
GUICtrlSetData ($PBDcimProcess, $DcimCurrFile * 100 / $DcimFiles)

After making this change, the progress bar is updated after the file is shown to be saved. (only affects GUI display sequence).

@badsanta - Now I know! I hope this is better. :)
Zuletzt geändert von achillies am 20.03.2011, 21:38, insgesamt 3-mal geändert.
achillies
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 1
Registriert: 10.03.2011, 19:26
Kamera(s): SX130IS

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon BadSanta » 20.03.2011, 20:38

@achillies

Please write in englisch so everyone can understand you.
â—„ Canon PowerShot SX270HS â–º Kameradaten
BadSanta
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 49
Bilder: 0
Registriert: 23.12.2008, 15:58
Kamera(s): SX270HS 1.02B

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon Startrail » 21.03.2011, 14:55

@achillies:

thats what I meant - thanks :D

@Alle:

Ich habe bemerkt, dass die Konsole mit der neusten version (0.2.86) einige Anläufe braucht, um sich mit der Kamera zu verbinden:

** No ptp device found
[0,2] Canon PowerShot A530 : (null)'
device version: 1-2.0
** create console: bus=0 dev=2
>> reset << (Length: 0)
** close console
[0,1] Canon PowerShot A530 : (null)'
device version: 1-2.0
** create console: bus=0 dev=1
>> reset << (Length: 0)
** init() start ...
>> version << ptpcam: 0.2
camera: 0.2 (Length: 24)
>> script-support << script-support:1 (Length: 16)
>> luar get_buildinfo().platform .. '\n' .. get_buildinfo().version .. '\n' .. get_buildinfo().build_number << a530
CHDK-DE
1.1.0 (Length: 20)
CHDK-DE=True
>> luar get_buildinfo().build_revision << 601 (259) (Length: 9)
>> luar get_config_value(67) << 2 (2) (Length: 5)
current powersave mode: 2
>> help << q quit quit program
h help list commands
r reset reconnect to camera
version get CHDK PTP version (ptpcam and camera)
shutdown shutdown camera (soft)
reboot reboot camera
reboot <filename> reboot camera using specified firmware update
reboot-fi2 reboot camera using default firmware update
m memory <address> get byte at address
m memory <address>-<address> get bytes at given range
m memory <address> <num> get num bytes at given address
set <address> <long> set long value at address
c call <address> <arg1> ... call function at address with given arguments
u upload <local> <remote> upload local file to camera
d download <remote> <local> download file from camera
mode <val> set mode (0=playback,1=record)
lua <code> execute lua code
luar <code> execute "return <code>" and retreive result
script-support which script interfaces does this build support (bit 0 set = lua)
script-status script execution status (bit 0 set = lua) (Length: 1255)
** init() successful


Dann geht aber alles...
Ist das durch die Option, dass mehrere Kameras benutzt werden können?

Viele Grüße
Startrail
Startrail
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 128
Bilder: 6
Registriert: 29.06.2010, 15:38
Kamera(s): A530

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon rudi » 22.03.2011, 21:15

Hallo zusammen

Startrail hat geschrieben:Ich habe bemerkt, dass die Konsole mit der neusten version (0.2.86) einige Anläufe braucht, um sich mit der Kamera zu verbinden:
...
[0,2] Canon PowerShot A530 : (null)

Die Neuerung für mehrere Kameras habt ihr ja schon bemerkt. Allerdings glaube ich sie hat derzeit eher ein kurzes Zwischenspiel, denn VxWorks (wie im Bsp. der A530) liefert offenbar keine Seriennummer mit. Diese ist für die Kameraerkennung unerlässlich.

Meine Erfahrungen mit Kameras und libusb unter Windows:
Ich hatte erwartet, dass libusb den pysikalischen Aknschluss der Kamera am USB wiedergibt. Dafür sind ja die Optionen --bus und --dev da. Dem scheint aber nicht so zu sein. Egal an welchem USB-Anschluss ich die Kameras angeschlossen habe, sie wurden immer am BUS 0 indentifiziert und die Gerätenummern bekamen Werte ab 1 in fortlaufender Folge. Bei zwei Kameras daher 1 und 2.
Um mehrere Kameras erkennen und indentifizieren zu können, muss eine bestehende Konsolenverbindung zuvor getrennt werden und dadurch wird es ganz verwirrend.

Ein Beispiel:
Es sind zwei Kameras angeschlossen und eingeschaltet. Libusb hat die Gerätenummern 1 und 2 vergeben. Führt man nun ein REBOOT mit Kamera 1 durch und versucht, wie bisher, mit einem RESET die Konsole mit der neu gestarteten Kamera zu verbinden, wird diese nicht gefunden. Der Grund ist die geöffnete Konsole für die Gerätenummer 1. Diese verhindert, dass die Gerätenummer 1 wieder vergeben wird und damit erhält Kamera 1 nun die Nummer 3. Um jetzt nach der Kamera zu fragen muss die Konsole zur Gerätenummer 1 geschlossen werden. Eine erste Abfrage mit ptpcam -l liefert die Gerätenummern 2 und 3. Ein Versuch Kamera 1 über -dev=3 zu erreichen schlägt aber fehl, da durch das Schliessen der Konsole libusb den Kameras mittlerweile die Gerätenummern nach vorn verschob und damit die Nummern 1 und 2 zugewiesen hat. Allerdings ist jetzt Kamera 2 über --dev=1 und Kamera 1 über --dev=2 erreichbar. Daher wird in der GUI ptpcam -l nach einer Sekunde Wartezeit nochmals aufgerufen und daher auch die Notwendigkeit die Seriennummern mittels ptpcam --dev=.. -i auszulesen. Nur durch die Seriennummer kann die richtige Kamera wieder angesprochen werden.

Das gleiche gilt natürlich auch, wenn sich die Kamera durch die Stromspareinstellungen abschaltet.

Diese Verfahrensweise benötigt also etwas Zeit und ist offenbar auch fehleranfällig. Zusätzlich liefert VxWorks nicht einmal ein Indentifikationsmerkmal (siehe oben).
Bisher wurde die Kammera immer über die Gerätenummer 0 angesprchen, was für libusb bedeutet "nimm die Erste die du findest".

Aus diesen Erkenntnissen bin ich dafür diese Funktion wieder aus der GUI zu entfernen. Was meint Ihr?

Startrail hat geschrieben:Wäre es vielleicht sinnvoller erst nachdem das Bild geladen wurde den Balken zu verlängern?
Ja, da kann ich in Zeile 1208 $i+1 durch $i ersetzen.

Eine Optimierung will ich noch vorstellen. Diese Betrifft das Ausführen von Lua-Code mit dofile(). Um nicht jedes Mal erst den Code der Datei "ptpgui.lua" übertragen zu müssen, wird dazu zukünftig eine Bibliothek erstellt, welche einmalig beim Initialisieren und Erfordernis übertragen wird. Da eine Bibliothek eine Lua-Tabelle ist in der Funktionen und Variablen gespeichert sind, kann diese mit 'require "bibliothek"' geladen werden und liefert diese Tabelle zurück. Daher ist folgender Aufruf möglich:
Code: Alles auswählen
require "bibliothek".funktion()
oder
require "bibliothek".variable

Im Debugfenster der GUI sieht es dann so aus:
Code: Alles auswählen
>> luar require("lptpgui").version << 86 (56) (Length: 7)

>> luar require("lptpgui").dcimdl() << 6
A/ptpgui.txt
9 (Length: 18)
>> download A/ptpgui.txt ptpgui.txt <<  (Length: 0)


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

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon msl » 25.03.2011, 11:40

Hallo rudi,

prinzipiell ist der Multi-Kamera-Betrieb eine sehr schöne Idee. Im Augenblick steht diese Funktion auf etwas wackligen Füßen. Ein genereller Verzicht wäre meiner Meinung nach aber ein Verlust.

Vorstellbar wäre vielleicht eine optionale Möglichkeit ausschließlich für DryOS-Kameras. Voraussetzung dafür ist aber eine Optimierung der Startsequenz.

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: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon rudi » 25.03.2011, 21:51

Hallo,

msl hat geschrieben:prinzipiell ist der Multi-Kamera-Betrieb eine sehr schöne Idee. Im Augenblick steht diese Funktion auf etwas wackligen Füßen.
Meine Meinung. Die Integration ist, wie oben beschrieben, schwierig. Eine andere Möglichkeit wäre mittels der DLL für jede Kamera eine eigene Konsole zu haben. Damit könnten sogar Befehle "an alle" gesendet werden. Allerdings kann ich mir die Überwachung mit AutoIT nicht vorstellen.

Im CHDK (ab Revision 1101) hat die PTP-Version 1.0 nun Einzug gehalten. Ich habe noch nicht alle Änderungen testen können, für eine GUI-beta-Version hat es schon mal gereicht.

Änderungen:
+ PTP-Version 1.0 (z.Z. nur mit CHDK ab Rev. 1101)
+ komplett überarbeitetes sendCommand-Modul
+ LUA-Funktionsbibliothek im LUALIB-Ordner
- Multi-Kamera-Unterstützung entfernt
Hinweis: ptpcam.exe besitzt noch keine aktuelle Hilfe!

Gruß rudi
Dateianhänge
ptpCamGui_Version1.0_beta.zip
ptpcamGUI_beta für PTP-Ver1.0
(999.65 KiB) 387-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon msl » 25.03.2011, 23:10

Hallo rudi,

sehr gute Arbeit!

Ein erster Test der ptpCamGui 1.0 war sehr erfolgreich. Der Start erfolgt zügig. Download, Upload und Modi-Umschaltung funktionieren wie erwartet. lptpgui.lua wird ordnungsgemäß erstellt.

Interessant wäre noch ein Test mit einer Kamera, deren Arbeitsspeicher knapp bemessen ist. f_m_b hat mit seiner SX20 aufgezeigt, dass das Speichermanagement im PTP-Interface noch nicht so richtig optimal verläuft.

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: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon Seegers » 26.03.2011, 11:05

Hallo zusammen!

Erst mal ein großes Lob für eure Arbeit!

Aber leider läuft es mit meiner Powershot S95 nicht.
Bei der Reihenfolge Kamerastart -> Programmstart kommt folgende Meldung: ** No ptp device found
Wenn ich aber zuerst das Prog starte und dann die Cam einschalte tut sich ca 10sek nichts, dann kommt folgende Meldung:

[0,1] Canon PowerShot S95 :
Camera information
==========
** create console: bus=0 dev=1
>> reset << (Length: 0)
** close console


Hier noch ein paar weitere Infos:
CHDK-Version: CHDK-DE 1.1.0
Revision: 598
FW-Version: 100h
Compiler: GCC 4.5.1
System: Windows 7
ptpCamGui: 0.2.87



Für mich ist CHDK noch Neuland, darum kann gut sein das der Fehler auch bei mir liegt.
Ich bin daher für jede Hilfe dankbar.

Viele Grüße
Seegers
Seegers
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 6
Registriert: 26.03.2011, 10:05
Kamera(s): Powershot S95

Re: Kamera-Steuerung per USB inkl. Foto-Download (nur Window

Beitragvon rudi » 26.03.2011, 11:31

Hallo Seegers,

danke für dein Lob und den Test.
Seegers hat geschrieben:[0,1] Canon PowerShot S95 :
Camera information
==========
Da stimmt etwas in der GUI nicht. Nach dem Doppelpunkt sollte eine Seriennummer stehen. Bitte speichere die CMD-Datei aus dem Anhang in das Verzeichnis wo die ptpcam.exe liegt. Schalte die Kamera ein und führe die CMD-Datei aus. Danach befindet sich die Datei "ptp_device_info.txt" in diesem Verzeichnis und sollte etwa so aussehen
Code: Alles auswählen
Camera information
==================
Model: Canon PowerShot A590 IS
  manufacturer: Canon Inc.
  serial number: 'E8567D893C2E448B86BE9777E6F6315B'
  device version: 1-5.0.1.0
  extension ID: 0x00000006
  extension description: (null)
  extension version: 0x0064


Am einfachsten hängst du diese an deinen Post an.

Gruß rudi
Dateianhänge
ptp_device_info.zip
(200 Bytes) 377-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

VorherigeNächste

Zurück zu Code-Ecke

Wer ist online?

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