Project

General

Profile

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include "mmc.h"
#include "curses_screen.h"
#include "linux_helper.h"

#define LOG(x...) print_log(x)

FILE * disk_image = NULL;

char mmc_sector_buffer[512];

void set_spi_clock_freq()
{
}

//! Initialize AVR<->MMC hardware interface.
/// Prepares hardware for MMC access.

void mmcInit(void)
{
if (!sdcard_filename) {
LOG("no sdcard\n");
return;
}
disk_image = fopen(sdcard_filename,"r+");
if (!disk_image) {
LOG("cannot open %s\n", sdcard_filename);
perror(0);
} else {
LOG("opened sdcard %s\n", sdcard_filename);
}
}

void mmc_init()
{
mmcInit();
}


//! Initialize the card and prepare it for use.
/// Returns zero if successful.
u08 mmcReset(void){ return 0;}

//! Read 512-byte sector from card to buffer
/// Returns zero if successful.
u08 mmcRead(u32 sector)
{
if (!disk_image) {
goto no_data;
}
//fprintf(stderr,"mmcRead:%x\n",sector);

if (fseek(disk_image, sector*512, SEEK_SET)) {
LOG("seek to sector %d failed\n", sector);
goto no_data;
}
if (fread(&mmc_sector_buffer,512,1,disk_image) != 1) {
LOG("reading sector %d failed\n", sector);
goto no_data;
}

return 0;
no_data:
memset(&mmc_sector_buffer, 0, 512);
return 0;
}

//! Write 512-byte sector from buffer to card
/// Returns zero if successful.
u08 mmcWrite(u32 sector)
{
if (!disk_image) {
goto no_data;
}
//fprintf(stderr,"mmcWrite:%x\n",sector);

if (fseek(disk_image, sector*512, SEEK_SET)) {
LOG("seek to sector %d failed\n", sector);
goto no_data;
}
if (fwrite(&mmc_sector_buffer,512,1,disk_image) != 1) {
LOG("reading sector %d failed\n", sector);
goto no_data;
}
return 0;
no_data:
return 0;
}

(11-11/13)