Forum: Mikrocontroller und Digitale Elektronik Frage zu externem Code


von Johannes (menschenskind)


Angehängte Dateien:

Lesenswert?

hallo

Ich habe einen fertigen Code für einen MP3-Player und würde gern wissen, 
was hinter diesem Funktionsaufruf steckt.
1
fopenc(ps.file_index,'r', "*       MP3", &fp);

Die zugehörigen Dateien sind angehängt.

Es geht darum, dass ich MP3s von der SD-Karte lesen will, nur klappt das 
noch nicht.

Dankeschön

von Karl H. (kbuchegg)


Lesenswert?

Johannes Hofmann schrieb:
> hallo
>
> Ich habe einen fertigen Code für einen MP3-Player und würde gern wissen,
> was hinter diesem Funktionsaufruf steckt.
>
>
1
fopenc(ps.file_index,'r', "*       MP3", &fp);
>

Es wird diese Funktion aus fat.c aufgerufen
1
// only the 'r' mode is supported so far
2
bool fopenc(u08 count, u08 mode, u08 *mask, FILE *stream){
3
  if(mode=='r'){
4
    u08 ret;
5
    ret = fio_dir_ctl(FIO_FILENUM, stream, NULL, mask, count);
6
    stream->file_offset = 0;
7
    /*
8
    USART_sendhex(stream->file_current_sectorh>>8);
9
    USART_sendhex(stream->file_current_sectorh);
10
    USART_sendhex(stream->file_current_sectorl>>8);
11
    USART_sendhex(stream->file_current_sectorl);
12
    */
13
    return ret;
14
  };
15
  return false;
16
};

so gut wie alle Parameter werden an fio_dir_ctl weitergereicht.
Wenn du also wissen willst, wies weitergeht, dann suchst du dir diese 
Funktion und siehst nach, was damit gemacht wird.

von Johannes (menschenskind)


Lesenswert?

Hab ich ja schon gemacht und dort wird das "*      MP3" an die Funktion 
fio_cmp_names weitergeleitet.
Doch ich versteh nicht, was dort damit geschieht, und wieso der Autor 
der Funktion diese Maske übergibt. Auch würde ich gern wissen, ob dort 
nur Dateinamen mit 8 Zeichen berücksichtigt werden und was ich tun 
müsste, damit auch Mp3s mit vielen Zeichen im Dateinamen geöffnet werden 
können.

Danke

von Karl H. (kbuchegg)


Lesenswert?

Johannes Hofmann schrieb:
> Hab ich ja schon gemacht und dort wird das "*      MP3" an die Funktion
> fio_cmp_names weitergeleitet.
> Doch ich versteh nicht, was dort damit geschieht, und wieso der Autor
> der Funktion diese Maske übergibt.

Welchen Teil des Funktionskommentares ...
1
// compares a 11 byte block from the fat table with a 8 byte name and 3 byte extension. 
2
// '*' is supported as a wildcard

... verstehst du nicht?

OK. Die Vergleichsfunktion ist ein bischen sehr einfach gestrickt und 
auch die Wildcardbehandlung ist ein wenig sehr simpel und stark 
vereinfachend aber im Grunde ist die Funktion simpel.

> Auch würde ich gern wissen, ob dort
> nur Dateinamen mit 8 Zeichen berücksichtigt werden und was ich tun
> müsste, damit auch Mp3s mit vielen Zeichen im Dateinamen geöffnet werden
> können.

Ähm. Das Dateisystem ist FAT. Da gibt es nur 8+3

von vlad (Gast)


Lesenswert?

> Ähm. Das Dateisystem ist FAT. Da gibt es nur 8+3
Stimmt eigendlich schon, wenn du aber unter windows ein laufwerk mit FAT 
bespielst, kannst du da auch lange dateinamen draufpacken
Da wird ein wenig getrickst und mehrere Verzeichniseinträge für eine 
Datei erzeugt.
Die Tricks muss das auslesende Gerät natürlich kennen.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Das nennt sich dann FAT32 oder VFAT (M$ verallgemeinert da gerne), was 
eine Erweiterung der FAT-Verzeichnissstruktur darstellt (genauer habe 
ich mich damit aber noch nicht beschäftigt).

von Johannes (menschenskind)


Lesenswert?

Achso, ich dachte immer FAT und FAT32 sind grob dassselbe. Aber die 
Länge der möglichen Dateinahmen ist natürlich schon was Diffizileres.

Kennt ihr da evtl. ne fertig implementierte Routine für ne SD-Karte?
Ich werd auch gleich mal bei Google schauen, aber da Google auch nicht 
alles auf den ersten 5 Seiten präsentiert, frag ich hier gleich mal mit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.