コード例 #1
0
static void
flash_native_file_open(char *name)
{
    int created = 0;
    extern char *tmpnam(char *s);
    extern int ftruncate(int fd, off_t length);

    if (!name) {
        name = tmpnam(NULL);
    }
    file = open(name, O_RDWR);
    if (file < 0) {
        file = open(name, O_RDWR | O_CREAT, 0660);
        assert(file > 0);
        created = 1;
        if (ftruncate(file, native_flash_dev.hf_size) < 0) {
            assert(0);
        }
    }
    file_loc = mmap(0, native_flash_dev.hf_size,
          PROT_READ | PROT_WRITE, MAP_SHARED, file, 0);
    assert(file_loc != MAP_FAILED);
    if (created) {
        flash_native_erase(0, native_flash_dev.hf_size);
    }
}
コード例 #2
0
ファイル: hal_flash.c プロジェクト: tecbea/larva
int
flash_erase(uint32_t address, uint32_t num_bytes)
{
    const struct flash_area_desc *area;
    uint32_t end;
    int i;

    flash_native_ensure_file_open();

    end = address + num_bytes;

    for (i = 0; i < FLASH_NUM_AREAS; i++) {
        area = flash_area_descs + i;

        if (area->fad_offset >= end) {
            return 0;
        }

        if (address >= area->fad_offset &&
            address < area->fad_offset + area->fad_length) {

            flash_native_erase(area->fad_offset, area->fad_length);
        }
    }

    return 0;
}
コード例 #3
0
ファイル: hal_flash.c プロジェクト: tecbea/larva
int
flash_erase_sector(uint32_t sector_address)
{
    int next_sector_id;
    int sector_id;
    int area_id;

    flash_native_ensure_file_open();

    area_id = find_area(sector_address);
    if (area_id == -1) {
        return -1;
    }

    sector_id = flash_area_descs[area_id].fad_sector_id;
    while (1) {
        flash_native_erase(sector_address,
                           flash_area_descs[area_id].fad_length);

        area_id++;
        if (area_id >= FLASH_NUM_AREAS) {
            break;
        }

        next_sector_id = flash_area_descs[area_id].fad_sector_id;
        if (next_sector_id != sector_id) {
            break;
        }

        sector_id = next_sector_id;
    }

    return 0;
}
コード例 #4
0
static int
native_flash_erase_sector(uint32_t sector_address)
{
    int area_id;
    uint32_t len;

    flash_native_ensure_file_open();

    area_id = find_area(sector_address);
    if (area_id == -1) {
        return -1;
    }
    len = flash_sector_len(area_id);
    flash_native_erase(sector_address, len);
    return 0;
}
コード例 #5
0
ファイル: hal_flash.c プロジェクト: tecbea/larva
static void
flash_native_ensure_file_open(void)
{
    int expected_sz;
    int i;

    if (file == NULL) {
        expected_sz = 0;
        for (i = 0; i < FLASH_NUM_AREAS; i++) {
            expected_sz += flash_area_descs[i].fad_length;
        }

        file = tmpfile();
        assert(file != NULL);
        flash_native_erase(0, expected_sz);
    }
}