/* * c't-Bot * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your * option) any later version. * This program is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307, USA. * */ /*! @file mini-fat.c * @brief Routinen zum Auffinden von markierten Files auf einer MMC-Karte. * Dies ist keine vollstaendige FAT-Unterstuetzung, sondern sucht nur eien Datei, die mit einer 3-Zeichen Sequenz beginnt. * @author Benjamin Benz (bbe@heise.de) * @author Ulrich Radig (mail@ulrichradig.de) www.ulrichradig.de * @date 07.11.06 */ #include "ct-Bot.h" #ifdef MCU #ifdef MINI_FAT_AVAILABLE #include "mmc.h" #include "display.h" #include "mini-fat.h" /*! * Sucht einen Block auf der MMC-Karte, dessen erste drei Bytes dem key entsprechen * liefert dann den folgenden Block zurueck. * Achtung das prinzip geht nur, wenn die Dateien nicht fragmentiert sind * @param key 3 Byte zur Identifikation * @param buffer Zeiger auf 512 Byte Puffer im SRAM */ uint32 mini_fat_find_block(const char* filename, uint8* buffer){ // Suche nach der Datei fuer die Katrte int8 found = False; uint32 card_size= mmc_get_size() >> 9; // groesse der Karte in Bloecken #ifdef DISPLAY_AVAILABLE display_cursor(2,1); display_printf("Find %s: 0x",filename); uint16 i=0, j=0; #endif uint32 block=0; while(found == False && block < card_size){ #ifdef DISPLAY_AVAILABLE display_cursor(2,13); display_printf("%02x%04x",j,i ); if (i==65535) j++; i++; #endif mmc_read_sector(block++,buffer); uint8 i; for (i=0; i> 16) & 0xFFFF; display_cursor(2,1); display_printf("Found %s: 0x%02x%04x",filename,j,i); #endif // auf der Karte markieren, dass wir sie in der Hand hatten // buffer[3]++; // mmc_write_sector(block-1,buffer,0); return block; } #endif #endif