forked from len0rd/rockbox
Rockchip rk27xx utils
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29936 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
976a1699da
commit
8f4202db28
28 changed files with 1845 additions and 0 deletions
165
utils/rk27utils/rk27load/main.c
Normal file
165
utils/rk27utils/rk27load/main.c
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <libusb.h>
|
||||
|
||||
#include "rk27load.h"
|
||||
#include "common.h"
|
||||
#include "stage1_upload.h"
|
||||
#include "stage2_upload.h"
|
||||
#include "stage3_upload.h"
|
||||
|
||||
#define VERSION "v0.2"
|
||||
|
||||
enum {
|
||||
NONE = 0,
|
||||
ENCODE_S1 = 1,
|
||||
ENCODE_S2 = 2
|
||||
};
|
||||
|
||||
static void usage(char *name)
|
||||
{
|
||||
printf("usage: (sudo) %s [-e1 -e2] -s1 stage1.bin -s2 stage2.bin -s3 usercode.bin\n", name);
|
||||
printf("stage1.bin - binary of the stage1 (sdram init)\n");
|
||||
printf("stage2.bin - binary of the stage2 bootloader\n");
|
||||
printf("usercode.bin - binary of the custom usercode\n");
|
||||
printf("\n");
|
||||
printf("options:\n");
|
||||
printf("-e1 - encode stage1 bootloader\n");
|
||||
printf("-e2 - encode stage2 bootloader\n");
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
libusb_device_handle *hdev;
|
||||
char *filenames[3];
|
||||
int i=1, action=0, ret=0;
|
||||
|
||||
while (i < argc)
|
||||
{
|
||||
if (strcmp(argv[i],"-e1") == 0)
|
||||
{
|
||||
action |= ENCODE_S1;
|
||||
i++;
|
||||
}
|
||||
else if (strcmp(argv[i],"-e2") == 0)
|
||||
{
|
||||
action |= ENCODE_S2;
|
||||
i++;
|
||||
}
|
||||
else if (strcmp(argv[i],"-s1") == 0)
|
||||
{
|
||||
i++;
|
||||
if (i == argc)
|
||||
{
|
||||
usage(argv[0]);
|
||||
return -1;
|
||||
}
|
||||
filenames[0] = argv[i];
|
||||
printf("%s", argv[i]);
|
||||
i++;
|
||||
}
|
||||
else if (strcmp(argv[i],"-s2") == 0)
|
||||
{
|
||||
i++;
|
||||
if (i == argc)
|
||||
{
|
||||
usage(argv[0]);
|
||||
return -2;
|
||||
}
|
||||
filenames[1] = argv[i];
|
||||
i++;
|
||||
}
|
||||
else if (strcmp(argv[i],"-s3") == 0)
|
||||
{
|
||||
i++;
|
||||
if (i == argc)
|
||||
{
|
||||
usage(argv[0]);
|
||||
return -3;
|
||||
}
|
||||
filenames[2] = argv[i];
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
usage(argv[0]);
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fprintf(stderr,"rk27load " VERSION "\n");
|
||||
fprintf(stderr,"(C) Marcin Bukat 2011\n");
|
||||
fprintf(stderr,"Based on rk27load ver. 0.1 written by AleMaxx (alemaxx at hotmail.de)\n\n");
|
||||
fprintf(stderr,"This is free software; see the source for copying conditions. There is NO\n");
|
||||
fprintf(stderr,"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
|
||||
|
||||
/* initialize libusb */
|
||||
libusb_init(NULL);
|
||||
|
||||
/* configure device */
|
||||
fprintf(stderr, "[info]: Initializing device... ");
|
||||
hdev = libusb_open_device_with_vid_pid(NULL, VENDORID, PRODUCTID);
|
||||
|
||||
if (hdev == NULL)
|
||||
{
|
||||
fprintf(stderr, "\n[error]: Could not find rockchip device\n");
|
||||
ret = -2;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = libusb_set_configuration(hdev, 1);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "\n[error]: Could not select configuration (1)\n");
|
||||
ret = -3;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = libusb_claim_interface(hdev, 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "\n[error]: Could not claim interface #0\n");
|
||||
ret = -4;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = libusb_set_interface_alt_setting(hdev, 0, 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "\n[error]: Could not set alternate interface #0\n");
|
||||
ret = -5;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
fprintf(stderr, "done\n");
|
||||
|
||||
|
||||
ret = upload_stage1_code(hdev, filenames[0], (action & ENCODE_S1));
|
||||
if (ret < 0)
|
||||
goto finish;
|
||||
|
||||
ret = upload_stage2_code(hdev, filenames[1], (action & ENCODE_S2));
|
||||
if (ret < 0)
|
||||
goto finish;
|
||||
|
||||
ret = upload_stage3_code(hdev, filenames[2]);
|
||||
if (ret < 0)
|
||||
goto finish;
|
||||
|
||||
/* done */
|
||||
ret = 0;
|
||||
|
||||
finish:
|
||||
if (hdev != NULL)
|
||||
libusb_close(hdev);
|
||||
|
||||
if (ret < 0)
|
||||
fprintf(stderr, "[error]: Error %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue