Nikola Milenic / SDcardM
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SDcardM.cpp Source File

SDcardM.cpp

00001 #include "SDcardM.h"
00002 #include "SDBlockDevice.h"
00003 #include "mbed.h"
00004 
00005 extern SDBlockDevice sd;
00006 extern Serial pc;
00007 
00008 char writeBuffer[520];
00009 char readBuffer[512];
00010 int i;
00011 bd_addr_t block;
00012 bd_addr_t* bp=(bd_addr_t*) readBuffer;
00013 
00014 bool SD_init()
00015 {
00016     for (int j=0; j<520; j++) writeBuffer[j]=0;
00017     i = 0;
00018     sd.deinit();
00019     if(sd.init()) {
00020         return false;
00021     }
00022     sd.frequency(24000000);
00023     sd.read(readBuffer, 0, 512);
00024     block=*bp;
00025     pc.printf("CURRENT BLOCK: %d\r\n", block);
00026     return true;
00027 }
00028 
00029 void SD_log_char(char c)
00030 {
00031     writeBuffer[i]=c;
00032     i++;
00033     if(i==512) {
00034         sd.program(writeBuffer, block, 512);
00035         block+=512;;
00036         *bp=block;
00037         sd.program(readBuffer, 0, 512);
00038         i=0;
00039     }
00040 }
00041 
00042 void SD_log_string(const char* s)
00043 {
00044     while(*s) {
00045         SD_log_char(*s);
00046         s++;
00047     }
00048 }
00049 
00050 void SD_log_float(float f)
00051 {
00052     memcpy(writeBuffer+i, (char*) (&f), 4);
00053     i+=4;
00054     if(i>=512) {
00055         sd.program(writeBuffer, block, 512);
00056         block+=512;
00057         sd.program(readBuffer, 0, 512);
00058 
00059         for(int j=0; j+512<i; j++) {
00060             writeBuffer[j]=writeBuffer[j+512];
00061         }
00062         i-=512;
00063     }
00064 }
00065 
00066 void SD_log_int(int f)
00067 {
00068     memcpy(writeBuffer+i, (char*) (&f), 4);
00069     i+=4;
00070     if(i>=512) {
00071         sd.program(writeBuffer, block, 512);
00072         block+=512;
00073         sd.program(readBuffer, 0, 512);
00074 
00075         for(int j=0; j+512<i; j++) {
00076             writeBuffer[j]=writeBuffer[j+512];
00077         }
00078         i-=512;
00079     }
00080 }
00081 
00082 
00083 void SD_flush()
00084 {
00085     sd.program(writeBuffer, block, 512);
00086     block+=512;
00087     *bp=block;
00088     sd.program(readBuffer, 0, 512);
00089     i=0;
00090 }