update per ptpcam (Dateiname länger als 8 Zeichen)

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

update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon Gerard Choinka » 29.01.2012, 00:46

Hallo,

ich habe mit ein update Script geschrieben welches das CHDK auf der SD-Karte updatet, dabei ist mir aufgefallen das er auf eine FAT16 Partition keine Dateinamen länger als 8 Zeichen ablegen kann, aber in den CHDK-Verzeichnissen sind einige Dateien drin die länger sind.

Hier ist das Script
Syntax: [ Download ] [ Verstecken ]
Benutze Bash Syntax Highlighting
#!/bin/bash

toinstall_verno="930"
#media_dir="/media/"
meatinfo_filename="metainfo.txt"
firmwares_pattern="/home/gchoinka/Dokumente/robo-chdk/firmwares/chdk-de/rev_%s/%s-%s-full_BETA_rev_%s.zip"
#tmpdir="/home/gchoinka/Dokumente/robo-chdk/scripts/install_firmware/tmp/"$RANDOM"dir/"
tmpdir="/tmp/"$RANDOM"dir/"

ptpcam="$HOME/Dokumente/robo-chdk/chdk-de/tools/ptpcam/ptpcam"

export PATH=$PATH:$(dirname $ptpcam)
ptpcam="ptpcam"



mkdir -p "$tmpdir"
ln -f -s -T "$tmpdir" $(dirname "$tmpdir")"/last.dir"




#wie viele cams sind angeschlossen
ncams=$($ptpcam --list-devices | grep -E "[0-9]{3}/[0-9]{3}\s*0x[^/]*/0x\S*" | wc -l)

for ((i=1; i <= $ncams; ++i))
do
  current_cam=$($ptpcam --list-devices | grep -E "[0-9]{3}/[0-9]{3}\s*0x[^/]*/0x\S*"| head -n $i | tail -n 1)
  busid=$(echo $current_cam | head -c 3)
  devid=$(echo $current_cam | head -c 7 | tail -c 3)

  #sucht nach einer metainfo.txt datei im sd root verzeichniss
  current_metainfo_filename="$tmpdir/$meatinfo_filename"
  $ptpcam --chdk="download A/$meatinfo_filename $current_metainfo_filename"
  cp "$current_metainfo_filename" "$current_metainfo_filename.bak"
 
   if [ -f "$current_metainfo_filename" ]
   then
     source "$current_metainfo_filename"
     
     orginal=$(printf $firmwares_pattern $chdk_verno $cam $cam_ver $chdk_verno)
     new=$(printf $firmwares_pattern $toinstall_verno $cam $cam_ver $toinstall_verno)
     unzip -o "$new" -d "$tmpdir/"
   

#erzeugt eine neue
cat > $current_metainfo_filename << EOF
#bash systax for variable

var_num="$var_num"

##on which side is the cam
#camside="right"
#camside="left"
camside="$camside"


##what chdk version is on this sd card
#chdk="en"
chdk="$chdk"

chdk_verno="$toinstall_verno"


#cam firmware version
cam="$cam"
cam_ver="$cam_ver"
EOF



    ndirs=$(cd  "$tmpdir" ; find  . -iname "*" -type d| wc -l)
    for ((k=2; k < $ndirs; ++k))
    do
        dir=$(cd  "$tmpdir" ; find  . -iname "*" -type d |  head -n $k | tail -n 1 | tail -c +2)
        echo $ptpcam --chdk=&#39;lua os.mkdir("A&#39;$dir&#39;")&#39;
        $ptpcam --chdk=&#39;lua os.mkdir("A&#39;$dir&#39;")&#39;
    done

    nfiles=$(cd  "$tmpdir" ; find  . -iname "*" -type f | wc -l)
    for ((k=1; k < $nfiles; ++k))
    do
        file=$(cd  "$tmpdir" ; find  . -iname "*" -type f |  head -n $k | tail -n 1 | tail -c +3)
        echo $ptpcam --chdk=&#39;upload &#39;$tmpdir$file&#39; A/&#39;$file&#39;&#39;
        $ptpcam --chdk=&#39;upload &#39;$tmpdir$file&#39; A/&#39;$file&#39;&#39;
    done

   fi
done

$ptpcam --chdk=&#39;reboot&#39;
Erstellt in 0.028 Sekunden, mit GeSHi 1.0.8.9


Die Ausgabe des Scriptes habe ich angehängt.

Hier ist ein Auszug der Ausgabe bei den ich das mit den zu langen Dateinamen bemerkt habe.
Syntax: [ Download ] [ Verstecken ]
  1. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/EXAM/lotto.lua A/CHDK/SCRIPTS/EXAM/lotto.lua 
  2. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/EXAM/metronome.lua A/CHDK/SCRIPTS/EXAM/metronome.lua 
  3. unexpected return code 0x2002 
  4. upload failed! 
  5. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/EXAM/eggtimer.bas A/CHDK/SCRIPTS/EXAM/eggtimer.bas 
  6. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/EXAM/stopwatch.lua A/CHDK/SCRIPTS/EXAM/stopwatch.lua 
  7. unexpected return code 0x2002 
  8. upload failed! 
  9. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/EXAM/countdown.lua A/CHDK/SCRIPTS/EXAM/countdown.lua 
  10. unexpected return code 0x2002 
  11. upload failed! 
  12. ptpcam --chdk=upload /tmp/4891dir/CHDK/SCRIPTS/MD/MD_FAST.txt A/CHDK/SCRIPTS/MD/MD_FAST.txt 



Meine Frage ist:
ist das 8+3 Dateinamen auf FAT16 Problem bekannt
und besteht Bedarf an einen updateOverPtp-Script? (Mein Bash-Script ist ein Hack)
Dateianhänge
installoverptp.sh.txt
(17.6 KiB) 476-mal heruntergeladen
Gerard Choinka
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 12
Registriert: 28.12.2010, 01:19
Kamera(s): a490

Re: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon naddel » 29.01.2012, 01:36

Hallo Gerard,

Im Prinzip haben haben FAT-16 und FAt-32 das gleichen Problem, daß für Namen länger als 8 ein zusätzlicher
Verzeichniseintrag zur Erweiterung angelegt werden muß.
Windows kürzt die dann und erstellt einen durchnummerierten konformen Eintrag namen~1. ...

Die älteren Kameras z.B. meine mit Betriebssystem vxworks erkennen anscheinend die Windows Erweiterung
und stellen sie auch dar. Die neueren mit DryOs haben nur noch 8.3 Namen. Bei langen Namen in der Windowskurzform wenn mit Windows kopiert wird.

Soviel zu der FAT-Frage, mit Deinem Problem hat es aber nichts zu tun, da dein script ja nicht weiß
welches Betriebssystem die Kamera hat, ja nichtmal ob es für eine Kamera ist.

Das metronom ist ist wohl ein Relikt aus vxworks Zeiten.

Bei PTP lese ich mich gerade ein und kriege nur wenig zum laufen.

Gruß naddel
Zuletzt geändert von naddel am 29.01.2012, 13:28, insgesamt 2-mal geändert.
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Re: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon Gerard Choinka » 29.01.2012, 10:52

Hi,

naddel hat geschrieben:...
Soviel zu der FAT-Frage, mit Deinem Problem hat es aber nichts zu tun, da dein script ja nicht weiß
welches Betriebssystem die Kamera hat, ja nichtmal ob es für eine Kamera ist.

ja zur Zeit achtet das Script nicht drauf, aber könnte es mit Hilfe von ptpcam machen.

Ich habe mich nur gefragt ob es so gewollt ist das im CHDK Dateien mit Namen drin sind die gekürzt werden müssen (entweder durch mich, das Script oder durch das OS).


naddel hat geschrieben:Mir scheint es eher ein Unix Problem zu sein.

Ich habe noch mal nachgeschaut, wenn ich die SD-Karte normal einstecke und drauf Schreibe, kann ich lange Dateinamen benutzen. Anscheinend ist es ein Problem des upload Befehl.

naddel hat geschrieben:bei PTP lese ich mich gerade ein und kriege nur wenig zum laufen.


was funktioniert den und was nicht?


fürs erste werde ich einfach die Dateinamen vom Script kürtzen lassen. Ein wechselt auf FAT32 wird wahrscheinlich keine Besserung bringen.

bye gerard
Gerard Choinka
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 12
Registriert: 28.12.2010, 01:19
Kamera(s): a490

Re: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon msl » 29.01.2012, 13:44

Hallo,

das liegt am Betriebssystem der Kamera.

Bei VxWorks-Kameras ist die Länge egal. Bei DryOS-Kameras gibt es die Einschränkung 8.3. Per PC und Cardreader kann man zwar lange Dateinamen auf die Karte kopieren. Sobald das DryOS-Betriebssystem ins Spiel kommt, wird auf 8.3 konvertiert.

Bei neueren DryOS-Kameras gibt es dann noch die zusätzliche Einschränkung, dass der gesamte Pfad maximal 32 Zeichen lang sein darf.

Warum beschränkst du deine CHDK-Update-Funktion nicht auf die Dateien diskboot.bin und ps.fi2 bzw. ps.fir? Der Rest ändert sich eh nur in Ausnahmefällen. Bei der ptpCamGui lasse ich auch nur diese beiden Dateien aktualisieren.

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: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon Gerard Choinka » 30.01.2012, 10:29

msl hat geschrieben:Warum beschränkst du deine CHDK-Update-Funktion nicht auf die Dateien diskboot.bin und ps.fi2 bzw. ps.fir? Der Rest ändert sich eh nur in Ausnahmefällen. Bei der ptpCamGui lasse ich auch nur diese beiden Dateien aktualisieren.


Fürs erste wird es wohl reichen. Ich benutze die Canons in einen diy-Buchscanner und möchte sie so wenig wie möglich bewegen müssen, außerdem baue ich an einen "bullet time"-Effekt Aufbau mit 10 Canons A495. Auch so ein Bereich wo man die Kameras nicht bewegen möchte und bei 10 Stück dauert es eine Weile.


.
Gerard Choinka
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 12
Registriert: 28.12.2010, 01:19
Kamera(s): a490

Re: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon naddel » 02.02.2012, 18:56

Hallo msl,

Gerard Choinka hat geschrieben:Ich habe mich nur gefragt ob es so gewollt ist das im CHDK Dateien mit Namen drin sind die gekürzt werden müssen
.

Da hat er schon Recht. Zumal Du bei den Autoren die Verwendung von kurzen Skriptnamen schon vor Jahren angemahnt und den Skriptordener für die 32 Stellen eingekürzt hast.

msl hat geschrieben:Warum beschränkst du deine CHDK-Update-Funktion nicht auf die Dateien diskboot.bin und ps.fi2 bzw. ps.fir? Der Rest ändert sich eh nur in Ausnahmefällen.


Darf ich das so verstehen, daß alle kammeraspezifischen Daten in der bin stehen und zum testen verschiedener Kammeras nur die Dateien auf der Root ausgetauscht werden müssen. Das wäre sehr bequem. Was ist mit der badpixel.bin?

Grüße naddel
S2 1.00f mit aktueller DE Version
Benutzeravatar
naddel
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 156
Registriert: 26.01.2009, 19:42
Kamera(s): G3 s2 ixusii

Re: update per ptpcam (Dateiname länger als 8 Zeichen)

Beitragvon msl » 02.02.2012, 20:37

Hallo naddel,

naddel hat geschrieben: ...daß alle kammeraspezifischen Daten in der bin stehen und zum testen verschiedener Kammeras nur die Dateien auf der Root ausgetauscht werden müssen... Was ist mit der badpixel.bin?
Im Augenblick ist das so. Wenn nicht besonders darauf hingewiesen wird, brauchst du nur diskboot.bin (für Autostart) und ps.fir bzw. ps.fi2 (für manuellen Start) auszutauschen. Deshalb gibt es ja auch das große Komplett-Paket zur Ersteinrichtung und das kleine Paket fürs Update. Mittlerweile wird ja sogar das deutsche Sprachpaket mit in die Binärdateien compiliert. Alle kameraspezifischen Daten werden ebenfalls in die Binärdaten eingefügt. Deshalb gibt es ja mittlerweile auch fast 200 unterschiedliche Firmware-Versionen.

Die Datei badpixel.bin braucht nur einmal erstellt zu werden. Man kann sie sich dann irgendwo auf dem Rechner sichern. Sie enthält die Liste der Fehlpixel, die der Hersteller bei Auslieferung der Kamera in die Firmware integriert hatte.

Ansonsten enthält der CHDK-Ordner nur noch Anwendungsdaten: wie das Logo für den Startbildschirm, diverse Kurven für die Tonwert-Kurven-Funktion der 10-Bit-Kameras und die dazugehörige Datei syscurves.cvf, andere Sprachdateien, eine Leveldatei für Sokoban, für Lua sehr wichtig diverse Bibliotheken, diverse Grids und die Symboldateien für die Darstellung der Symbole in den Menüs.

Zusätzlich wird bei Erstbenutzung eine Konfigurationsdatei erstellt. In dieser werden alle Einstellungen gespeichert. Manchmal ist es nötig, diese Datei nach einem CHDK-Update zu löschen, damit CHDK störungsfrei läuft. Damit man nicht laufend die persönlichen Einstellungen neu machen muss (das ist besonders nervig bei Positions- und Farbeinstellungen.), gibt es ein Skript zur Speicherung und Wiedereinlesen von Konfigurationen: viewtopic.php?f=7&t=1911

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


Zurück zu Code-Ecke

Wer ist online?

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

cron