⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat_8c-source.html

📁 avr应用测试程序
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00326             }00327             <span class="comment">// TODO: handle pathname properly for going up a directory</span>00328             <span class="comment">// set path string</span>00329             strcat(PathNameBuffer, FileNameBuffer);00330             strcat(PathNameBuffer, <span class="stringliteral">"\\"</span>);00331             <span class="comment">// return success</span>00332             <span class="keywordflow">return</span> TRUE;00333         }00334         <span class="keywordflow">else</span>00335         {00336             <span class="comment">// not a directory, cannot CD into a file!</span>00337             <span class="keywordflow">return</span> FALSE;00338         }00339     }00340     <span class="keywordflow">else</span>00341     {00342         <span class="comment">// not a valid entry, cannot CD!</span>00343         <span class="keywordflow">return</span> FALSE;00344     }00345 }00346 00347 <span class="keywordtype">void</span> fatPrintDirEntry(<span class="keywordtype">void</span>)00348 {00349     <span class="comment">// print a formatted dir-style output for most recent file</span>00350     <span class="comment">// print date</span>00351     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_MONTH_MASK)&gt;&gt;DD_MONTH_SHIFT );    <span class="comment">// month</span>00352     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'/'</span>);00353     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_DAY_MASK)&gt;&gt;DD_DAY_SHIFT );        <span class="comment">// day</span>00354     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'/'</span>);00355     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 4, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateDate&amp;DD_YEAR_MASK)&gt;&gt;DD_YEAR_SHIFT );  <span class="comment">// year</span>00356     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00357 00358     <span class="comment">// print time</span>00359     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateTime&amp;DT_HOURS_MASK)&gt;&gt;DT_HOURS_SHIFT );    <span class="comment">// month</span>00360     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);00361     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, (FileInfo.CreateTime&amp;DT_MINUTES_MASK)&gt;&gt;DT_MINUTES_SHIFT );        <span class="comment">// day</span>00362     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">':'</span>);00363     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 2, FALSE, <span class="charliteral">'0'</span>, 2*(FileInfo.CreateTime&amp;DT_2SECONDS_MASK)&gt;&gt;DT_2SECONDS_SHIFT );    <span class="comment">// seconds</span>00364     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00365 00366     <span class="comment">// print attributes</span>00367     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_VOLUME)     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'V'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00368     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_DIRECTORY)  <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'D'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00369     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_READONLY)   <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'R'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00370     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_HIDDEN)     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'H'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00371     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_SYSTEM)     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'S'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00372     <span class="keywordflow">if</span>(FileInfo.Attr &amp; ATTR_ARCHIVE)    <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'A'</span>); <span class="keywordflow">else</span> <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00373     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00374 00375     <span class="comment">// print filesize</span>00376     <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(10, 8, FALSE, <span class="charliteral">' '</span>, FileInfo.Size);   <span class="comment">// filesize</span>00377     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00378 00379     <span class="comment">// print filename</span>00380     <a class="code" href="group__rprintf.html#ga2">rprintfStr</a>(FileNameBuffer);00381 }00382 00383 <span class="keywordtype">void</span> fatDumpDirSlot(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> slot)00384 {00385     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sector;00386     <span class="comment">// load correct sector</span>00387     sector = fatClustToSect(CurrentDirStartCluster);00388     sector += slot/DIRENTRIES_PER_SECTOR;00389     <span class="comment">// print the entry as a hex table</span>00390     <a class="code" href="debug_8c.html#a0">debugPrintHexTable</a>(32, SectorBuffer+(slot&lt;&lt;5) );00391 }00392 00393 <span class="keyword">struct </span>FileInfoStruct* fatGetFileInfo(<span class="keywordtype">void</span>)00394 {00395     <span class="keywordflow">return</span> &amp;FileInfo;00396 }00397 00398 <span class="comment">// return the size of the last directory entry</span>00399 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatGetFilesize(<span class="keywordtype">void</span>)00400 {00401     <span class="keywordflow">return</span> FileInfo.Size;00402 }00403 00404 <span class="comment">// return the long name of the last directory entry</span>00405 <span class="keywordtype">char</span>* fatGetFilename(<span class="keywordtype">void</span>)00406 {   00407     <span class="keywordflow">return</span> FileNameBuffer;00408 }00409 00410 <span class="comment">// return the directory of the last directory entry</span>00411 <span class="keywordtype">char</span>* fatGetDirname(<span class="keywordtype">void</span>)00412 {   00413     <span class="keywordflow">return</span> PathNameBuffer;00414 }00415 00416 <span class="comment">// load a clusterfull of data</span>00417 <span class="keywordtype">void</span> fatLoadCluster(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cluster, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buffer)00418 {00419     <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;00420     <span class="comment">// read cluster</span>00421     <span class="comment">//while ( ataReadSectors( DRIVE0, clust2sect(cluster), SectorsPerCluster, buffer) != 0);</span>00422     <span class="keywordflow">for</span>(i=0; i&lt;SectorsPerCluster; i++)00423     {00424         ataReadSectors( DRIVE0, fatClustToSect(cluster)+i, 1, buffer+(i&lt;&lt;9) );00425         <span class="comment">// temporary fix for wierd misaligned cluster problem</span>00426         <span class="comment">// (only when using FAT16?)</span>00427 <span class="comment">//      ataReadSectors( DRIVE0, fatClustToSect(cluster+8)+i, 1, buffer+(i&lt;&lt;9) );</span>00428     }00429 }00430 00431 00432 <span class="comment">// find next cluster in the FAT chain</span>00433 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatNextCluster(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cluster)00434 {00435     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> nextCluster;00436     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatMask;00437     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fatOffset;00438     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sector;00439     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> offset;00440     00441     <span class="comment">// get fat offset in bytes</span>00442     <span class="keywordflow">if</span>(Fat32Enabled)00443     {00444         <span class="comment">// four FAT bytes (32 bits) for every cluster</span>00445         fatOffset = cluster &lt;&lt; 2;00446         <span class="comment">// set the FAT bit mask</span>00447         fatMask = FAT32_MASK;00448     }00449     <span class="keywordflow">else</span>00450     {00451         <span class="comment">// two FAT bytes (16 bits) for every cluster</span>00452         fatOffset = cluster &lt;&lt; 1;00453         <span class="comment">// set the FAT bit mask</span>00454         fatMask = FAT16_MASK;00455     }00456     00457     <span class="comment">// calculate the FAT sector that we're interested in</span>00458     sector = FirstFATSector + (fatOffset / BytesPerSector);00459     <span class="comment">// calculate offset of the our entry within that FAT sector</span>00460     offset = fatOffset % BytesPerSector;00461 00462     <span class="comment">// if we don't already have this FAT chunk loaded, go get it</span>00463     <span class="keywordflow">if</span> (sector != FatInCache)00464     {00465         <span class="comment">// read sector of FAT table</span>00466         <span class="keywordflow">while</span> (ataReadSectors( DRIVE0, sector, 1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)FAT_CACHE_ADDR) != 0);00467         FatInCache = sector;00468     }00469 00470     <span class="comment">// read the nextCluster value</span>00471     nextCluster = (*((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>*) &amp;((<span class="keywordtype">char</span>*)FAT_CACHE_ADDR)[offset])) &amp; fatMask;00472 00473     <span class="comment">// check to see if we're at the end of the chain</span>00474     <span class="keywordflow">if</span> (nextCluster == (CLUST_EOFE &amp; fatMask))00475         nextCluster = 0;00476 00477 <span class="preprocessor">#ifdef DEBUG_FAT</span>00478 <span class="preprocessor"></span>    <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"&gt;"</span>);00479     <a class="code" href="group__rprintf.html#ga9">rprintfu32</a>(nextCluster);00480     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00481 <span class="preprocessor">#endif</span>00482 <span class="preprocessor"></span>    00483     <span class="keywordflow">return</span> nextCluster;00484 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:06 2006 for Procyon AVRlib by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -