OpenCores
URL https://opencores.org/ocsvn/ftdi_wb_bridge/ftdi_wb_bridge/trunk

Subversion Repositories ftdi_wb_bridge

[/] [ftdi_wb_bridge/] [trunk/] [sw/] [dump.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ultra_embe
#include <stdio.h>
2
#include <string.h>
3
#include <stdlib.h>
4
#include <unistd.h>
5
#include "ftdi_hw.h"
6
 
7
//-----------------------------------------------------------------
8
// Defines:
9
//-----------------------------------------------------------------
10
#define CHUNK_SIZE          256
11
#define DEFAULT_FTDI_IFACE  1
12
 
13
//-----------------------------------------------------------------
14
// download
15
//-----------------------------------------------------------------
16
static int download(FILE *f, uint32_t addr, int length)
17
{
18
    uint8_t buf[CHUNK_SIZE];
19
    int err = 0;
20
    int i;
21
    int size;
22
 
23
    for (i=0;i<length;i+=CHUNK_SIZE)
24
    {
25
        size = (length - i);
26
        if (size > CHUNK_SIZE)
27
            size = CHUNK_SIZE;
28
 
29
        if (ftdi_hw_mem_read(addr, buf, size) != size)
30
        {
31
            fprintf(stderr, "Download: Error downloading file\n");
32
            err = 1;
33
            break;
34
        }
35
 
36
        if (fwrite(buf, 1, size, f) != size)
37
        {
38
            fprintf(stderr, "Download: Error writing file\n");
39
            err = 1;
40
            break;
41
        }
42
 
43
        addr += CHUNK_SIZE;
44
 
45
        printf("\r%d%%", (i * 100) / length);
46
        fflush(stdout);
47
    }
48
 
49
    return err;
50
}
51
//-----------------------------------------------------------------
52
// main
53
//-----------------------------------------------------------------
54
int main(int argc, char *argv[])
55
{
56
    int c;
57
    int size = -1;
58
    char *filename = NULL;
59
    int help = 0;
60
    int err = 1;
61
    uint32_t address = 0x0;
62
    int ftdi_iface = DEFAULT_FTDI_IFACE;
63
    FILE *f = NULL;
64
 
65
    while ((c = getopt (argc, argv, "o:s:a:i:")) != -1)
66
    {
67
        switch(c)
68
        {
69
            case 'o':
70
                 filename = optarg;
71
                 break;
72
            case 's':
73
                 size = (int)strtol(optarg, NULL, 0);
74
                 break;
75
            case 'a':
76
                address = strtoul(optarg, NULL, 0);
77
                break;
78
            case 'i':
79
                 ftdi_iface = (int)strtol(optarg, NULL, 0);
80
                 break;
81
            default:
82
                help = 1;
83
                break;
84
        }
85
    }
86
 
87
    if (help || filename == NULL || size < 0)
88
    {
89
        fprintf (stderr,"Usage:\n");
90
        fprintf (stderr,"-o filename.bin   = Output filename\n");
91
        fprintf (stderr,"-s n              = Size to dump\n");
92
        fprintf (stderr,"-a 0xnnnn         = Address to dump from (default to 0x0)\n");
93
        fprintf (stderr,"-i id             = FTDI interface ID (0 = A, 1 = B)\n");
94
 
95
        exit(-1);
96
    }
97
 
98
    // Try and communicate with FTDI interface
99
    if (ftdi_hw_init(ftdi_iface) != 0)
100
    {
101
        fprintf(stderr, "ERROR: Could not open FTDI interface, try SUDOing / check connection\n");
102
        exit(-2);
103
    }
104
 
105
    // Try and create new file
106
    f = fopen(filename, "wb");
107
    if (f)
108
    {
109
        printf("Downloading %s (%dKB) from 0x%x:\n", filename, (size + 1023) / 1024, address);
110
 
111
        err = download(f, address, size);
112
 
113
        if (!err)
114
            printf("\rDone!\n");
115
        else
116
            printf("\rFailed!\n");
117
 
118
        fclose(f);
119
        f = NULL;
120
    }
121
    else
122
    {
123
        fprintf (stderr,"Error: Could not create file\n");
124
        err = 1;
125
    }
126
 
127
    ftdi_hw_close();
128
 
129
    return err;
130
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.