mirror of
git://projects.qi-hardware.com/xburst-tools.git
synced 2024-11-26 01:35:54 +02:00
split the main function.
This commit is contained in:
parent
40242c948f
commit
b3ea184e6a
@ -39,13 +39,14 @@
|
|||||||
#define INGENIC_IN_ENDPOINT 0x81
|
#define INGENIC_IN_ENDPOINT 0x81
|
||||||
#define INGENIC_OUT_ENDPOINT 0x01
|
#define INGENIC_OUT_ENDPOINT 0x01
|
||||||
|
|
||||||
|
uint8_t xburst_interface = 0;
|
||||||
|
|
||||||
|
struct usb_dev_handle* open_xburst_device();
|
||||||
|
void close_xburst_device(struct usb_dev_handle* xburst_h);
|
||||||
|
int send_request(struct usb_dev_handle* xburst_h, char* request, char* str_param);
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
struct usb_device* xburst_dev = 0;
|
|
||||||
uint8_t xburst_interface = 0;
|
|
||||||
struct usb_dev_handle* xburst_h = 0;
|
|
||||||
int request_type, usb_status;
|
|
||||||
|
|
||||||
if (argc < 2
|
if (argc < 2
|
||||||
|| !strcmp(argv[1], "-h")
|
|| !strcmp(argv[1], "-h")
|
||||||
|| !strcmp(argv[1], "--help")) {
|
|| !strcmp(argv[1], "--help")) {
|
||||||
@ -69,42 +70,50 @@ int main(int argc, char** argv)
|
|||||||
"\n"
|
"\n"
|
||||||
"- all numbers can be prefixed 0x for hex otherwise decimal\n"
|
"- all numbers can be prefixed 0x for hex otherwise decimal\n"
|
||||||
"\n", XBBOOT_VERSION);
|
"\n", XBBOOT_VERSION);
|
||||||
// stage1: 0x80002000
|
|
||||||
// stage2: 0x81C00000
|
|
||||||
// u-boot: 0x80600000
|
|
||||||
// uImage: 0x80010000
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version")) {
|
if (!strcmp(argv[1], "-v") || !strcmp(argv[1], "--version")) {
|
||||||
printf("xbboot version %s\n", XBBOOT_VERSION);
|
printf("xbboot version %s\n", XBBOOT_VERSION);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
if (!strcmp(argv[1], "bulk_read"))
|
|
||||||
request_type = REQ_BULK_READ;
|
|
||||||
else if (!strcmp(argv[1], "bulk_write"))
|
|
||||||
request_type = REQ_BULK_WRITE;
|
|
||||||
else if (!strcmp(argv[1], "VR_GET_CPU_INFO") || !strcmp(argv[1], "get_info"))
|
|
||||||
request_type = VR_GET_CPU_INFO;
|
|
||||||
else if (!strcmp(argv[1], "VR_SET_DATA_ADDRESS") || !strcmp(argv[1], "set_addr"))
|
|
||||||
request_type = VR_SET_DATA_ADDRESS;
|
|
||||||
else if (!strcmp(argv[1], "VR_SET_DATA_LENGTH") || !strcmp(argv[1], "set_len"))
|
|
||||||
request_type = VR_SET_DATA_LENGTH;
|
|
||||||
else if (!strcmp(argv[1], "VR_FLUSH_CACHES") || !strcmp(argv[1], "flush_cache"))
|
|
||||||
request_type = VR_FLUSH_CACHES;
|
|
||||||
else if (!strcmp(argv[1], "VR_PROGRAM_START1") || !strcmp(argv[1], "start1"))
|
|
||||||
request_type = VR_PROGRAM_START1;
|
|
||||||
else if (!strcmp(argv[1], "VR_PROGRAM_START2") || !strcmp(argv[1], "start2"))
|
|
||||||
request_type = VR_PROGRAM_START2;
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "Error - unknown vendor request %s - run with --help to see all requests\n", argv[1]);
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
if ((getuid()) || (getgid())) {
|
if ((getuid()) || (getgid())) {
|
||||||
fprintf(stderr, "Error - you must be root to run '%s'\n", argv[0]);
|
fprintf(stderr, "Error - you must be root to run '%s'\n", argv[0]);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct usb_dev_handle* xburst_h = open_xburst_device();
|
||||||
|
if (!xburst_h)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
char* parameter;
|
||||||
|
if (argc == 2)
|
||||||
|
parameter = NULL;
|
||||||
|
else
|
||||||
|
parameter = argv[2];
|
||||||
|
|
||||||
|
send_request(xburst_h, argv[1], parameter);
|
||||||
|
close_xburst_device(xburst_h);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void close_xburst_device(struct usb_dev_handle* xburst_h)
|
||||||
|
{
|
||||||
|
if (xburst_h && xburst_interface)
|
||||||
|
usb_release_interface(xburst_h, xburst_interface);
|
||||||
|
|
||||||
|
if (xburst_h)
|
||||||
|
usb_close(xburst_h);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct usb_dev_handle* open_xburst_device()
|
||||||
|
{
|
||||||
|
struct usb_device* xburst_dev = 0;
|
||||||
|
struct usb_dev_handle* xburst_h = 0;
|
||||||
|
|
||||||
usb_init();
|
usb_init();
|
||||||
|
/* usb_set_debug(255); */
|
||||||
usb_find_busses();
|
usb_find_busses();
|
||||||
usb_find_devices();
|
usb_find_devices();
|
||||||
|
|
||||||
@ -176,6 +185,42 @@ int main(int argc, char** argv)
|
|||||||
fprintf(stderr, "Error - can't claim XBurst interface: %s\n", usb_strerror());
|
fprintf(stderr, "Error - can't claim XBurst interface: %s\n", usb_strerror());
|
||||||
goto xout_xburst_h;
|
goto xout_xburst_h;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return xburst_h;
|
||||||
|
|
||||||
|
xout_xburst_h:
|
||||||
|
usb_close(xburst_h);
|
||||||
|
xout:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int send_request(struct usb_dev_handle* xburst_h, char* request, char* str_param)
|
||||||
|
{
|
||||||
|
int request_type;
|
||||||
|
int usb_status;
|
||||||
|
uint32_t u32_param;
|
||||||
|
|
||||||
|
if (!strcmp(request, "bulk_read"))
|
||||||
|
request_type = REQ_BULK_READ;
|
||||||
|
else if (!strcmp(request, "bulk_write"))
|
||||||
|
request_type = REQ_BULK_WRITE;
|
||||||
|
else if (!strcmp(request, "VR_GET_CPU_INFO") || !strcmp(request, "get_info"))
|
||||||
|
request_type = VR_GET_CPU_INFO;
|
||||||
|
else if (!strcmp(request, "VR_SET_DATA_ADDRESS") || !strcmp(request, "set_addr"))
|
||||||
|
request_type = VR_SET_DATA_ADDRESS;
|
||||||
|
else if (!strcmp(request, "VR_SET_DATA_LENGTH") || !strcmp(request, "set_len"))
|
||||||
|
request_type = VR_SET_DATA_LENGTH;
|
||||||
|
else if (!strcmp(request, "VR_FLUSH_CACHES") || !strcmp(request, "flush_cache"))
|
||||||
|
request_type = VR_FLUSH_CACHES;
|
||||||
|
else if (!strcmp(request, "VR_PROGRAM_START1") || !strcmp(request, "start1"))
|
||||||
|
request_type = VR_PROGRAM_START1;
|
||||||
|
else if (!strcmp(request, "VR_PROGRAM_START2") || !strcmp(request, "start2"))
|
||||||
|
request_type = VR_PROGRAM_START2;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "Error - unknown vendor request %s - run with --help to see all requests\n", request);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
switch (request_type) {
|
switch (request_type) {
|
||||||
case VR_GET_CPU_INFO: {
|
case VR_GET_CPU_INFO: {
|
||||||
char cpu_info_buf[VR_GET_CPU_INFO_LEN+1] = {0};
|
char cpu_info_buf[VR_GET_CPU_INFO_LEN+1] = {0};
|
||||||
@ -187,8 +232,9 @@ int main(int argc, char** argv)
|
|||||||
/* bytes */ cpu_info_buf,
|
/* bytes */ cpu_info_buf,
|
||||||
/* size */ VR_GET_CPU_INFO_LEN,
|
/* size */ VR_GET_CPU_INFO_LEN,
|
||||||
/* timeout */ USB_TIMEOUT);
|
/* timeout */ USB_TIMEOUT);
|
||||||
|
|
||||||
if (usb_status != VR_GET_CPU_INFO_LEN) {
|
if (usb_status != VR_GET_CPU_INFO_LEN) {
|
||||||
fprintf(stderr, "Error - %s() returned %i\n", argv[1], usb_status);
|
fprintf(stderr, "Error - %s() returned %i\n", request, usb_status);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
printf("VR_GET_CPU_INFO %s\n", cpu_info_buf);
|
printf("VR_GET_CPU_INFO %s\n", cpu_info_buf);
|
||||||
@ -198,13 +244,12 @@ int main(int argc, char** argv)
|
|||||||
case VR_SET_DATA_LENGTH:
|
case VR_SET_DATA_LENGTH:
|
||||||
case VR_PROGRAM_START1:
|
case VR_PROGRAM_START1:
|
||||||
case VR_PROGRAM_START2: {
|
case VR_PROGRAM_START2: {
|
||||||
uint32_t u32_param;
|
if (str_param == NULL) {
|
||||||
if (argc != 3) {
|
fprintf(stderr, "Error - number of parameters %s\n", request);
|
||||||
fprintf(stderr, "Error - number of %s parameters %i\n", argv[1], argc);
|
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
u32_param = strtoul(argv[2], 0 /* endptr */, 0 /* base */);
|
|
||||||
|
|
||||||
|
u32_param = strtoul(str_param, 0, 0);
|
||||||
usb_status = usb_control_msg(xburst_h,
|
usb_status = usb_control_msg(xburst_h,
|
||||||
/* requesttype */ USB_ENDPOINT_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
/* requesttype */ USB_ENDPOINT_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
/* request */ request_type,
|
/* request */ request_type,
|
||||||
@ -214,10 +259,10 @@ int main(int argc, char** argv)
|
|||||||
/* size */ 0,
|
/* size */ 0,
|
||||||
/* timeout */ USB_TIMEOUT);
|
/* timeout */ USB_TIMEOUT);
|
||||||
if (usb_status) {
|
if (usb_status) {
|
||||||
fprintf(stderr, "Error - %s() returned %i\n", argv[1], usb_status);
|
fprintf(stderr, "Error - %s() returned %i\n", request, usb_status);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
printf("%s %lxh\n", argv[1], (unsigned long) u32_param);
|
printf("%s %lxh\n", request, (unsigned long) u32_param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VR_FLUSH_CACHES: {
|
case VR_FLUSH_CACHES: {
|
||||||
@ -230,7 +275,7 @@ int main(int argc, char** argv)
|
|||||||
/* size */ 0,
|
/* size */ 0,
|
||||||
/* timeout */ USB_TIMEOUT);
|
/* timeout */ USB_TIMEOUT);
|
||||||
if (usb_status) {
|
if (usb_status) {
|
||||||
fprintf(stderr, "Error - %s() returned %i\n", argv[1], usb_status);
|
fprintf(stderr, "Error - %s() returned %i\n", request, usb_status);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
printf("VR_FLUSH_CACHES\n");
|
printf("VR_FLUSH_CACHES\n");
|
||||||
@ -240,14 +285,16 @@ int main(int argc, char** argv)
|
|||||||
int read_len;
|
int read_len;
|
||||||
char* read_buf;
|
char* read_buf;
|
||||||
|
|
||||||
if (argc != 3) {
|
if (str_param == NULL) {
|
||||||
fprintf(stderr, "Error - number of %s parameters %i\n", argv[1], argc);
|
fprintf(stderr, "Error - number of parameters %s\n", request);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
if (argv[2][0] == '0' && argv[2][1] == 'x')
|
|
||||||
read_len = strtol(&argv[2][2], 0 /* endptr */, 16 /* base */);
|
if (str_param[0] == '0' && str_param[1] == 'x')
|
||||||
|
read_len = strtol(&str_param[2], 0, 16);
|
||||||
else
|
else
|
||||||
read_len = strtol(argv[2], 0 /* endptr */, 10 /* base */);
|
read_len = strtol(str_param, 0, 10);
|
||||||
|
|
||||||
read_buf = (char*) malloc(read_len);
|
read_buf = (char*) malloc(read_len);
|
||||||
if (!read_buf) {
|
if (!read_buf) {
|
||||||
fprintf(stderr, "Error - cannot allocate %i bytes read buffer.\n", read_len);
|
fprintf(stderr, "Error - cannot allocate %i bytes read buffer.\n", read_len);
|
||||||
@ -273,23 +320,23 @@ int main(int argc, char** argv)
|
|||||||
FILE* file_h;
|
FILE* file_h;
|
||||||
size_t num_read;
|
size_t num_read;
|
||||||
|
|
||||||
if (argc != 3) {
|
if (str_param == NULL) {
|
||||||
fprintf(stderr, "Error - number of parameters %i\n", argc);
|
fprintf(stderr, "Error - number of parameters %s\n", request);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
file_h = fopen(argv[2], "rb");
|
file_h = fopen(str_param, "rb");
|
||||||
if (!file_h) {
|
if (!file_h) {
|
||||||
fprintf(stderr, "Error opening %s.\n", argv[2]);
|
fprintf(stderr, "Error opening %s.\n", str_param);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
if (fseek(file_h, 0, SEEK_END)) {
|
if (fseek(file_h, 0, SEEK_END)) {
|
||||||
fprintf(stderr, "Error seeking to end of %s.\n", argv[2]);
|
fprintf(stderr, "Error seeking to end of %s.\n", str_param);
|
||||||
fclose(file_h);
|
fclose(file_h);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
file_len = ftell(file_h);
|
file_len = ftell(file_h);
|
||||||
if (fseek(file_h, 0, SEEK_SET)) {
|
if (fseek(file_h, 0, SEEK_SET)) {
|
||||||
fprintf(stderr, "Error seeking to beginning of %s.\n", argv[2]);
|
fprintf(stderr, "Error seeking to beginning of %s.\n", str_param);
|
||||||
fclose(file_h);
|
fclose(file_h);
|
||||||
goto xout_xburst_interface;
|
goto xout_xburst_interface;
|
||||||
}
|
}
|
||||||
@ -320,14 +367,9 @@ int main(int argc, char** argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
usb_release_interface(xburst_h, xburst_interface);
|
|
||||||
usb_close(xburst_h);
|
return 0;
|
||||||
return EXIT_SUCCESS;
|
|
||||||
|
|
||||||
xout_xburst_interface:
|
xout_xburst_interface:
|
||||||
usb_release_interface(xburst_h, xburst_interface);
|
return 1;
|
||||||
xout_xburst_h:
|
|
||||||
usb_close(xburst_h);
|
|
||||||
xout:
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user