Re: [ethersex-devel] vfs_sd_chdir
Hallo Meinhard, Es funktioniert, wenn ich entweder in der Datei sd-reader_config.h den Wert #define USE_DYNAMIC_MEMORY 1 setze oder in der fat_config.h die statischen Werte erhoehe #define FAT_FILE_COUNT XX #define FAT_DIR_COUNT XX Die Standardwerte gehen eben davon aus, dass maximal eine Datei und ein Verzeichnis in Nutzung sind. Persönlich habe ich die für den HTTPD erhöhen müssen, ansonsten werden nicht alle Dateien der E6-Startseite von der SD-Karte geladen. USE_DYNAMIC_MEMORY ist praktischer, allerdings mit einem Mehrverbrauch der dynamischen Speicherverwaltung verbunden. Hat man ansonsten kein Modul mit dynamischer Speicherverwaltung konfiguriert schnellt auch noch der Flashverbrauch in die Höhe. logger_log(logText) { vfs_sd_fseek(fileHandle, 0, SEEK_END); vfs_sd_write(fileHandle, logText, len); sd_raw_sync(); } Der Code ist nicht geeignet für die Rotation innerhalb einer Datei. Dazu habe ich #define FAT_DATETIME_SUPPORT 1 implementiert, aber noch nicht in die Config-Struktur eingebunden. Könnte man per menuconfig erschließen. Ebenso die Option USE_DYNAMIC_MEMORY. https://github.com/ethersex/ethersex/pull/417 ist von dir? Dein Denkfehler ist, dass du eine konkrete Implementierung von VFS benutzt und nicht das generische VFS-Interface, wie es in core/vfs/vfs.h definiert Das hatte ich mir noch gar nicht gross angeschaut, da ich explizit auf die SD- Karte schreiben wollte. Ich werde das mal noch intensiver lesen. Zwei Fragen vorweg: Im Moment bin ich ja auf einem Net-IO unterwegs, habe hier aber auch noch ein etherrape rumliegen. Letzteres hatte ich neben dem aufgeloetetem DataFlash testweise ein SD-Modul angeschlossen. Auf Anhieb sehe ich bei dem generischen Interface nicht die Moeglichkeit, in diesem Setup gezielt auf die SD-Kare zu schreiben. Völlig richtig erkannt. Die VFS-Schnittstelle trifft zwei Annahmen: a) es existiert nur eine konkrete Implementierung b) die erste Implementierung (VFS-inline) ist schreibgeschützt und die zweite (SD-Karte) erlaubt das Schreiben b) ist praktisch bei HTTPD im VFS-inline und Protokolldateien auf der SD-Karte. Ein Unterverzeichnis kann ich damit auch nicht erstellen, oder? Das geht leider nicht. Ein mkdir-Aufruf ist nicht vorgesehen, obgleich er in einigen Implementierung vorhanden wäre. Patch/PR willkommen. -eku ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] vfs_sd_chdir
Hallo Erik, On Saturday 27 June 2015 15:01:47 e...@users.sourceforge.net wrote: Die Standardwerte gehen eben davon aus, dass maximal eine Datei und ein Verzeichnis in Nutzung sind. Persönlich habe ich die für den HTTPD Ich musste nur erst mal drauf kommen ... Der Code ist nicht geeignet für die Rotation innerhalb einer Datei. Ich werde die komplette Implementierung in einer Branch in meinem Fork auf github stellen. Vermutlich ist das dann anschaulicher, wie ich mir das vorstelle. Kann aber noch ein paar Tage dauern. Völlig richtig erkannt. Die VFS-Schnittstelle trifft zwei Annahmen: Danke fuer die Erklaerungen. Das hilft mir weiter, mich da reinzudenken. Könnte man per menuconfig erschließen. Ebenso die Option USE_DYNAMIC_MEMORY. Ja, hatte ich auch schon ueberlegt. https://github.com/ethersex/ethersex/pull/417 ist von dir? Ja. Gleich hier die Frage: The function get_datetime should reside in their own file. Das hatte ich mir auch ueberlegt, als ich den commit fertigstellte. Angesichts der fortgeschrittenen Zeit, habe ich das nur noch als Kommentar gefragt. Gibt es einen Namensvorschlag fuer die Datei? Das geht leider nicht. Ein mkdir-Aufruf ist nicht vorgesehen, obgleich er in einigen Implementierung vorhanden wäre. Patch/PR willkommen. Bei Gelegenheit schaue ich mir das an, verspreche aber nichts. Zuerst kommt die Nacharbeit zu meinen gestrigen zwei PRs. Allerdings nicht mehr heute. Gruss Meinhard ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] vfs_sd_chdir
Hallo Meinhard, Was genau macht die Funktion hardware/storage/vfs_sd.c - vfs_sd_chdir() ? Sie liefert einen Handle auf das Verzeichnis dirname. Wenn ich versuche, eine Datei in einem Unterverzeichnis anzulegen, geht es auf diese Weise schief: [...] // wird die Datei im Root- und nicht im Unterverzeichnis erzeugt..) Du möchtest also eine Datei in einem Unterverzeichnis schreiben. Wenn ich vfs_sd_chdir jedoch gar nicht aufrufe, haut es hin (wenn das Verzeichnis existiert). [...] Kann mir jemand auf die Sprünge helfen? vfs_sd_open (intern vfs_sd_create_open) öffnet die Datei name. Falls der Name einen Pfad beinhaltet, wird zuvor in diesen mit vfs_sd_chdir() gewechselt. Was macht vfs_sd_chdir()? Sie liefert einen Handle auf das Verzeichnis dirname. Deren Rückgabewert vom Typ struct fat_dir_struct * kann ich auch nirgendwo weiterverwenden. Doch, für vfs_sd_open_in(). Über Tips wäre ich dankbar! Dein Denkfehler ist, dass du eine konkrete Implementierung von VFS benutzt und nicht das generische VFS-Interface, wie es in core/vfs/vfs.h definiert ist. Alle diese Aufrufe erwarten einen absoluten Dateinamen, also mit Pfad. -eku ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] vfs_sd_chdir
Hi Erik, vielen Dank schon mal fuer die Antwort! Nach weiteren zwei Stunden Suche heute und tonnenweise zusaetzlicher Debugstatements habe ich den Fehler gefunden: Es funktioniert, wenn ich entweder in der Datei sd-reader_config.h den Wert #define USE_DYNAMIC_MEMORY 1 setze oder in der fat_config.h die statischen Werte erhoehe #define FAT_FILE_COUNT XX #define FAT_DIR_COUNT XX (Die genauen Werte (XX) muss ich noch ermitteln, ich habe sie im Moment grosszuegig gewaehlt.) Drauf gekommen bin ich, als ich testweise ein weiteres Mal vfs_sd_try_open_rootnode() aufgerufen habe (in welchem ja ein vfs_sd_chdir(/) steckt) und das mit rc != 0 und einer Fehlermeldung zurueckkam. Das machte mich stutzig, da es nach einem reset ja funktioniert. Nur kurz, was ich erreichen will in gekuerztem PseudoCode. (ausimplemtiert funktioniert das jetzt mit den obigen Aenderungen auch so) fileHandle logger_init (dirname, day, month) { vfs_sd_chdir(dirname) // existiert das Verzeichnis? if not success { vfs_sd_mkdir_recursive( dirname ) // lege es an, wenn nicht vfs_sd_rootnode = vfs_sd_chdir(dirname) } fileName = day.log fileHandle = vfs_sd_open(fileName) if not success { fileHandle = vfs_sd_create(fileName) } // weitere Tests mit day, month, modification_date etc // gekuerzt } logger_log(logText) { vfs_sd_fseek(fileHandle, 0, SEEK_END); vfs_sd_write(fileHandle, logText, len); sd_raw_sync(); } logger_close() { } Nur kurz zum Hintergrund, was ich damit erreichen will: Im Prinzip soll es eine Art logrotation werden, mit welcher ich Daten pro Tag in eine eigene Datei schreibe, welche ich im darauffolgendem Monat wieder ueberschreibe. Dazu habe ich #define FAT_DATETIME_SUPPORT 1 implementiert, aber noch nicht in die Config-Struktur eingebunden. Damit habe ich immer einen Monat Zeit, die Daten einzusammeln, die Logdateien wachsen aber nicht unendlich, selbst wenn ich die Daten nicht einsammel. Das koennte passieren, wenn ich die Daten in eine einzelne Datei (inklusive Zeit- und Datumsstempel) logge. Das Ueberschreiben nach 1 Monat ist kein Problem. Das alles ist bislang nur ein Gedankenexperiment, mir hat es aber keine Ruhe gelassen, dass ich den Fehler nicht fand. On Friday 26 June 2015 18:52:42 e...@users.sourceforge.net wrote: Deren Rückgabewert vom Typ struct fat_dir_struct * kann ich auch nirgendwo weiterverwenden. Doch, für vfs_sd_open_in(). Ja, die ist aber als static deklariert also fuer mich von aussen nicht sichtbar :( Dein Denkfehler ist, dass du eine konkrete Implementierung von VFS benutzt und nicht das generische VFS-Interface, wie es in core/vfs/vfs.h definiert Das hatte ich mir noch gar nicht gross angeschaut, da ich explizit auf die SD- Karte schreiben wollte. Ich werde das mal noch intensiver lesen. Zwei Fragen vorweg: Im Moment bin ich ja auf einem Net-IO unterwegs, habe hier aber auch noch ein etherrape rumliegen. Letzteres hatte ich neben dem aufgeloetetem DataFlash testweise ein SD-Modul angeschlossen. Auf Anhieb sehe ich bei dem generischen Interface nicht die Moeglichkeit, in diesem Setup gezielt auf die SD-Kare zu schreiben. Ein Unterverzeichnis kann ich damit auch nicht erstellen, oder? Viele Gruesse Meinhard ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
[ethersex-devel] vfs_sd_chdir
Hallo Zusammen, ich lese schon seit ein paar Tagen den Code für den Zugriff auf die SD-Karte aber ich komme nicht weiter. Was genau macht die Funktion hardware/storage/vfs_sd.c - vfs_sd_chdir() ? Wenn ich versuche, eine Datei in einem Unterverzeichnis anzulegen, geht es auf diese Weise schief: uint8_t filelogger_init (const char *dirname, char *filename) { // dirname = xyz struct fat_dir_struct * dir_struct; if ( ( dir_struct = vfs_sd_chdir(dirname)) == NULL) { vfs_sd_mkdir_recursive( dirname ); vfs_sd_chdir(dirname); } // filename = /xyz/1234.txt; struct vfs_file_handle_sd_t * filelogger_handle; if ( (filelogger_handle = vfs_sd_open(filename)) == NULL ) { if ( (filelogger_handle = vfs_sd_create(filename)) == NULL ) { debug_printf(could not open file); return 1; // schlaegt hier fehl // oder // bei filename = 1234.txt; // wird die Datei im Root- und nicht im Unterverzeichnis erzeugt..) } } } Wenn ich vfs_sd_chdir jedoch gar nicht aufrufe, haut es hin (wenn das Verzeichnis existiert). uint8_t filelogger_init (char *filename) { // filename = /xyz/1234.txt; struct vfs_file_handle_sd_t * filelogger_handle; if ( (filelogger_handle = vfs_sd_open(filename)) == NULL ) { if ( (filelogger_handle = vfs_sd_create(filename)) == NULL ) { debug_printf(could not open file); return 1; } } return 0; } Kann mir jemand auf die Sprünge helfen? Was macht vfs_sd_chdir()? Deren Rückgabewert vom Typ struct fat_dir_struct * kann ich auch nirgendwo weiterverwenden. Selbst ein verzweifeltes vfs_sd_rootnode = vfs_sd_chdir() hat mich nicht weitergebracht. Über Tips wäre ich dankbar! Viele Grüße Meinhard ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel