#include <stdlib.h>
#include "debug.h"
#include "types.h"
#include "mc.h"
#define FW_CMD_READ 0x3
#define FW_CMD_WRITEDISABLE 0x4
#define FW_CMD_READSTATUS 0x5
#define FW_CMD_WRITEENABLE 0x6
#define FW_CMD_PAGEWRITE 0xA
#define BM_CMD_AUTODETECT 0xFF
#define BM_CMD_WRITESTATUS 0x1
#define BM_CMD_WRITELOW 0x2
#define BM_CMD_READLOW 0x3
#define BM_CMD_WRITEDISABLE 0x4
#define BM_CMD_READSTATUS 0x5
#define BM_CMD_WRITEENABLE 0x6
#define BM_CMD_WRITEHIGH 0xA
#define BM_CMD_READHIGH 0xB
#define COMM_PAGE_WRITE 0x0A
#define COMM_PAGE_ERASE 0xDB
#define COMM_SECTOR_ERASE 0xD8
#define COMM_CHIP_ERASE 0xC7
#define CARDFLASH_READ_BYTES_FAST 0x0B
#define CARDFLASH_DEEP_POWDOWN 0xB9
#define CARDFLASH_WAKEUP 0xAB
void mc_init(memory_chip_t *mc, int type)
{
mc->com = 0;
mc->addr = 0;
mc->addr_shift = 0;
mc->data = NULL;
mc->size = 0;
mc->write_enable = FALSE;
mc->writeable_buffer = FALSE;
mc->type = type;
mc->autodetectsize = 0;
switch(mc->type)
{
case MC_TYPE_EEPROM1:
mc->addr_size = 1;
break;
case MC_TYPE_EEPROM2:
case MC_TYPE_FRAM:
mc->addr_size = 2;
break;
case MC_TYPE_FLASH:
mc->addr_size = 3;
break;
default: break;
}
}
u8 *mc_alloc(memory_chip_t *mc, u32 size)
{
u8 *buffer;
buffer = malloc(size);
mc->data = buffer;
if(!buffer) { return NULL; }
mc->size = size;
mc->writeable_buffer = TRUE;
return buffer;
}
void mc_free(memory_chip_t *mc)
{
if(mc->data)
{
free(mc->data);
mc->data = 0;
}
mc_init(mc, 0);
}
void mc_realloc(memory_chip_t *mc, int type, u32 size)
{
mc_free(mc);
mc_init(mc, type);
mc_alloc(mc, size);
}
void mc_reset_com(memory_chip_t *mc)
{
}
u8 fw_transfer(memory_chip_t *mc, u8 data)
{
return 0;
}
u8 bm_transfer(memory_chip_t *mc, u8 data)
{
return 0;
}