Partitionsanzeige und Erweiterung auf max. 4 Partitionen

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

Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 22.04.2011, 21:16

Hallo liebe CHDK-DE Freunde.

Ich habe schon lange einen lokalen Patch bei mir auf der Platte, den ich ebensolange bereits bei meiner SX20 einsetzte.
Den Patch möchte ich Euch heute vorstellen und zur Diskussion und zum Test freigeben.

Dieser Patch erlaubt es, nicht nur wie heute zwischen zwei Partitionen, sondern zwischen insgesammt 4 Partitionen zu wechseln.
Es wird dabei nicht zwischen FAT8/16 und FAT32 unterschieden. Ein reiner FAT16 Betrieb ist also mit SD Karten bis 16GB möglich (Maximale Größe einer FAT16 Partition ist 4GB a 4 Partitionen) .
Ein Mischbetrieb aus einer Kombination aus kleiner FAT8/16-Bootpartition und einer großen FAT32, sowie bis zu zwei weiteren FAT16 Partitionen ist ebenfalls für Karten > 16GB möglich.
Nach dem Umschalten der Partition ist ein Neustart notwendig.
Zusätzlich wird die Nummer der aktiv verwendeten Partition bei der Ausgabe der Speichergröße mit angegeben.

Was ist funktional neu:
"Swap partition" wurde zu "Swap partition [a/b]" wobei 'a' für die aktuell verwendete Partition und 'b' für die maximal vorhandenen Partitionen steht.
z.B.: "Swap partition" [1/2] bedeutet, dass Partition '1' aktiv ist und es insgesammt 2 Partitionen auf der SD Karte gibt.

Parameter "OSD Parameters -> Filespace -> Show partition number" ist dazugekommen.
Mit aktivem "Show partition number" und "Show Filespace in Percent/MB" wird vor die Anzeige des freien Speicherplatzes noch die aktive Partitionsnummer geschrieben.
z.B.:
1:3393M bedeutet, dass Partition '1' aktiv verwendet wird und es noch 2293MB freien Platz darauf gibt.
2:87% bedeutet, dass Partition '2' aktiv verwendet wird und es noch 87% freien Platz darauf gibt.
2:??? bedeutet, dass auf Partition '2' gewechselt, aber noch kein Neustart ausgeführt wurde.

Was ist, wenn ich das alles nicht benötige?
Per Default ist die zusätzliche Anzeige ausgeschaltet und die zwei vorhandenen Partitionen können wie gehabt mir "Swap Partition" gewechselt werden. (Anzeigetext hat sich dabei leicht geändert)

TODO oder auch Diskussion
- Anstelle mit einem Parameter Swap Partition [a/b]" direkt die Partition umzuschalten zwei Parameter einführen.
1) "Select partition [a/b]
2) "Change partition" mit Abfrage ob direkt ein Neustart ausgeführt werden soll.

- Partitionsinformationen über eine zusätzliche Funktion ausgeben
- LUA-Befehle für Partitionsinformationen und Partitionswechsel schreiben. (Nützlich für PTP???)


Über Diskussionen und Anregungen würde ich mich freuen... :-)
Dateianhänge
ShowPartitionNumber_0_1.patch
(13.96 KiB) 409-mal heruntergeladen
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon msl » 25.04.2011, 10:06

Hallo f_m_b,

vielen Dank für deine innovative Erweiterung. Du hattest ja schon mehrfach Anlauf genommen. Damit alle etwas davon haben, habe ich deinen Patch eingecheckt (Revision 643).

Lua-Befehle zum Wechsel der Partitionen wären in der Tat für PTP nützlich. Hier sollte aber auch die Möglichkeit in Betracht gezogen werden, über die Konfiguration mit get/set_config_value (nur CHDK-DE) zu arbeiten.

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: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 25.04.2011, 14:09

@msl: Danke für's Einbuchen.
Soll ich noch etwas für's Handbuch schreiben?
Oder übernimmst Du den Part?

msl hat geschrieben:Hier sollte aber auch die Möglichkeit in Betracht gezogen werden, über die Konfiguration mit get/set_config_value (nur CHDK-DE) zu arbeiten.
ok. Ich lese mich dann mal ein.
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon msl » 25.04.2011, 16:03

Hallo f_m_b,

das Handbuch übernehme ich. Du hast ja eine gute Vorlage mit deiner Beschreibung gegeben. Ich wollte aber erst mal warten, bis eine Autobuild-Version verfügbar ist und evt. ein paar Reaktionen erfolgen.

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: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 30.04.2011, 19:33

msl hat geschrieben:Lua-Befehle zum Wechsel der Partitionen wären in der Tat für PTP nützlich. Hier sollte aber auch die Möglichkeit in Betracht gezogen werden, über die Konfiguration mit get/set_config_value (nur CHDK-DE) zu arbeiten.


get/set_config_value ist höchst interessant für reine Konfigurationsdaten der Kamera. Z.B. Was zeige ich wie an oder welche Funktion möchte ich verwenden.
Der Partitionswechsel und die Information über die aktive Partition (Typ, Größe, Welche Partition ist aktiv, wieviele Partitionen gibt es) sollten meiner Meinung nicht über die Konfiguration beschrieben werden.

Ich habe mal meinen ersten Versuch gestartet LuaBefehle zu aktivieren (Basic habe ich aus reiner Faulheit erstmal außen vor gelassen ;-) )
Ich habe die folgende Funktionen zwar getestet... Aber es wäre gut wenn ein "Lua"-Profi mal über meinen Patch schauen könnte.

Der angehängte Patch erweitert den Lua Befehlssatz um:
- get_partition_count() // Liefert die Anzahl der Partitionen auf der SD-Karte
- get_active_partition() // Gibt die aktive Partitionsnummer zurück. (Beginnend bei "1" und nicht bei "0")
- get_partition_type() // Gibt den Partitionstyp der aktiven Partition zurück. (siehe Link: Wichtige Partitionstypen mit ihren Kennnummern)
- get_partition_size() // Gibt den Größe in MB der aktiven Partition zurück.
- swap_partitions(nr) // Wechselt auf die angegebene Partition. (Neustart notwendig!)
- swap_partitions() // swap_partition() ohne Parameter wechselt auf die nächste Partition auf der Karte.
Dateianhänge
LuaPartitions_0_2.patch
(4.26 KiB) 405-mal heruntergeladen
LuaConsole.PNG
LuaConsole.PNG (10.51 KiB) 13117-mal betrachtet
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon msl » 30.04.2011, 20:36

Hallo Frank,

schöne Idee. Das hilft auch, die ptpCamGui zu verbessern.

Mir würde es aber im Interesse der Übersichtlichkeit besser gefallen, wenn das Paket in 2 Befehle zusammengefasst wird. Dabei könnten die get-Befehle get_dofinfo() oder get_buildinfo() Vorbild sein: count, active, type, size = get_partitioninfo() und swap_partition() wie beschrieben.

uBasic-Befehle könnte man in vereinfachter Form anbieten. Wenn es nach mir geht, sind sie aber verzichtbar.

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: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 01.05.2011, 00:10

msl hat geschrieben:Mir würde es aber im Interesse der Übersichtlichkeit besser gefallen, wenn das Paket in 2 Befehle zusammengefasst wird. Dabei könnten die get-Befehle get_dofinfo() oder get_buildinfo() Vorbild sein: count, active, type, size = get_partitioninfo() und swap_partition() wie beschrieben.
Gute Idee, das gefällt mir auch besser.
Falls uns noch ein weiterer get-Wert einfällt, ändert sich nicht dauernd die Aufrufschnittstelle. :-)

Der angehängte Patch erweitert den Lua Befehlssatz um:
Code: Alles auswählen
- get_partitionInfo() // Liefert eine Tabelle mit folgenden Einträgen:
  info["count"]       // Liefert die Anzahl der Partitionen auf der SD-Karte
  info["active"]      // Gibt die aktive Partitionsnummer zurück. (Beginnend bei "1" und nicht bei "0")
  info["type"]        // Gibt den Partitionstyp der aktiven Partition zurück. (siehe Link: Wichtige Partitionstypen mit ihren Kennnummern)
  info["size"]        // Gibt den Größe in MB der aktiven Partition zurück.
- swap_partition(nr)  // Wechselt auf die angegebene Partition. (Neustart notwendig!)
- swap_partition()    // swap_partition() ohne Parameter wechselt auf die nächste Partition auf der Karte.

msl hat geschrieben:uBasic-Befehle könnte man in vereinfachter Form anbieten. Wenn es nach mir geht, sind sie aber verzichtbar.
Ich denke wir bringen erst mal die Lua-Befehle in Ordnung, dann gehe ich an uBasic.
Dateianhänge
LuaConsole.PNG
LuaConsole.PNG (11.06 KiB) 13094-mal betrachtet
LuaPartitions_0_3.patch
(3.7 KiB) 396-mal heruntergeladen
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon CHDKLover » 03.05.2011, 10:31

Hallo f_m_b,
sehr schöner Ansatz.
Ich habe mir deinen Patch angesehen, ohne ihn selber getestet zu haben. Dabei ist mir aufgefallen, dass swap_partition() ohne Parameter nur bei SD-Karten mir 2 Partitionen funktioniert. Ist das gewollt?
Zusätzlich habe ich noch eine kleine Ergänzung. Es währe für den Skript Programmierer schön zu erfahren, ob der Partitionswechsel erfolgreich war. Ich habe prototypisch einen Patch erstellt, der die beiden Einschränkungen aufheben soll. Vielleicht kannst du dir das mal bei Gelegenheit ansehen.

Ich weiß nicht in wie weit die Funktion GetTotalCardSpaceKb() in platform/gerneric/wrappers.c die Aufgabe deiner Funktion get_part_size() erfüllen kann. Vielleicht lässt sich eine sparen?

CHDKLover
Dateianhänge
LuaPartitions_0_3b.patch
(4 KiB) 391-mal heruntergeladen
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 03.05.2011, 23:18

Hallo CHDKLover.
Danke für das kritische Betrachten des Patches.
Ich habe einen Großteil Deiner Änderungen übernommen.

- Tatsächlich hatte ich am Anfang vor, swap_Partitions ohne Parameter aufgerufen, nur bei zwei Partitionen zuzulassen. Dafür gibt es eigentlich keinen Grund. :-)
- Der Rückgabewert von swap_partitions ist eine gute Idee.
- GetTotalCardSpaceKb() war genau das was ich gesucht, aber nicht gefunden hatte. (get_part_size() wieder entfernt)
- Die Funktion wurde wieder swap_partitions genannt, da sie durchgängig in der kompletten SW so geschrieben ist. Ich hatte in patch 0.3 das 's' bewusst entfernt.

PS:
Änderung in uBasic.c (ungetestet):
Code: Alles auswählen
#ifdef CAM_MULTIPART
  case TOKENIZER_SWAP_PARTITIONS:
    accept(TOKENIZER_SWAP_PARTITIONS);
    int partNr = expr();
    r = swap_partitions(partNr);
    break;
#endif

Die Gültigkeitsprüfung erfolgt in der Funktion swap_partitions.
Leider habe ich nicht herausbekommen wie ich die Anzahl der übergebenen Parameter prüfen kann.
Auch die Umsetzung für Info ist mir erstmal verborgen geblieben.

Ich habe mich über eine geschlossene Klammer vor default: gewundert... gehört zu TOKENIZER_IS_CAPTURE_MODE_VALID.
Ich habe die Funktion etwas umformatiert und die falsch gesetzte Klammer entfernt.
Dateianhänge
LuaPartitions_0_4.patch
(11.74 KiB) 399-mal heruntergeladen
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon msl » 06.05.2011, 09:32

Hallo Frank,

Danke für die Bereitstellung der Skripterweiterung.

Die Funktionen sind mit Revision 657 im DE-Trunk und können somit getestet werden.

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: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon rudi » 06.05.2011, 12:14

Hallo f_m_b,

f_m_b hat geschrieben:Leider habe ich nicht herausbekommen wie ich die Anzahl der übergebenen Parameter prüfen kann.

Wenn die Anzahl der Argumente ohne oder eins seien kann, dann wird das z.B. so geprüft. Zum Vergleich, bei Befehlen sollte man lieber auf Zeilendende prüfen.
Code: Alles auswählen
  case TOKENIZER_SWAP_PARTITIONS:                    //Funktion: swap_partitions oder swap_partitions(val)
    accept(TOKENIZER_SWAP_PARTITIONS);
    int partNr = -1                                   //Defaultwert für "kein Argument"
    if (tokenizer_token() == TOKENIZER_LEFTPAREN) {  //bei "Klammer auf" muss ein Argument folgen
      partNr=expr();                                  //liest das Argument einschließlich Klammern
    }
    r = swap_partitions(partNr);
    break;

f_m_b hat geschrieben:Auch die Umsetzung für Info ist mir erstmal verborgen geblieben.

Die "get_partitionInfo()"- Funktionen können unter uBasic nicht zusammengefasst werden. Dafür sind einzelne Funktionen erforderlich, wie in deiner ersten Lua-Version. Siehe auch "get_dofinfo()" in Lua und uBasic.

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

Re: Partitionsanzeige und Erweiterung auf max. 4 Partitionen

Beitragvon f_m_b » 16.05.2011, 22:48

@rudi:
Danke für die Erklärung. :-)

Ich werde die Änderungen für uBasic aber erst vornehmen falls Bedarf angemeldet wird. ;-)
f_m_b
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 148
Registriert: 30.05.2010, 21:59
Kamera(s): -


Zurück zu Code-Ecke

Wer ist online?

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

cron