11 #include "stage3_upload.h"
13 int upload_stage3_code(libusb_device_handle
*hdev
, char *fn_stage3
)
19 uint16_t send_size
= 0x200;
23 if ((f
= fopen(fn_stage3
, "rb")) == NULL
)
25 fprintf(stderr
, "[error]: Could not open file \"%s\"\n", fn_stage3
);
29 codesize
= filesize(f
);
31 fprintf(stderr
, "[stage3]: Loading user code (%d bytes)... ", codesize
);
34 code
= (uint8_t *) malloc(codesize
+ 0x204);
37 fprintf(stderr
, "\n[error]: Out of memory\n");
42 memset(code
, 0, codesize
+ 0x204);
43 /* read usercode into buffer */
44 if (fread(&code
[4], 1, codesize
, f
) != codesize
)
46 fprintf(stderr
, "\n[error]: I/O error\n");
51 fprintf(stderr
, "done\n");
55 /* put code size at the first 4 bytes */
57 code
[0] = codesize
& 0xff;
58 code
[1] = (codesize
>> 8) & 0xff;
59 code
[2] = (codesize
>> 16) & 0xff;
60 code
[3] = (codesize
>> 24) & 0xff;
62 fprintf(stderr
, "[stage3]: Uploading user code (%d bytes)... ", codesize
);
71 ret
= libusb_bulk_transfer(hdev
, /* handle */
73 &code
[i
* 0x200], /* data */
74 send_size
, /* length */
75 &transfered
, /* xfered */
76 USB_TIMEOUT
/* timeout */
79 if (ret
!= LIBUSB_SUCCESS
)
81 fprintf(stderr
, "\n[error]: Bulk transfer error (%d, %d)\n", ret
, i
);
90 fprintf(stderr
,"done (sent %d blocks)\n", i
);