1
0
mirror of git://projects.qi-hardware.com/xburst-tools.git synced 2024-11-22 12:11:52 +02:00

add more error check. remove the signal handler

Signed-off-by: Xiangfu Liu <xiangfu@sharism.cc>
This commit is contained in:
Xiangfu Liu 2010-04-28 18:06:28 +08:00
parent 4c7e4f9bd5
commit 07bfc33712
2 changed files with 49 additions and 27 deletions

View File

@ -10,7 +10,7 @@ bin_PROGRAMS = xbboot
xbboot_SOURCES = host_main.c xbboot_SOURCES = host_main.c
prefix = /usr prefix = /usr
pkgdatadir = $(datadir)/xburst-tools pkgdatadir = $(datadir)/xburst-tools/
if COND_FIRMWARE if COND_FIRMWARE
pkgdata_DATA = ../target-stage1/stage1.bin pkgdata_DATA = ../target-stage1/stage1.bin

View File

@ -12,7 +12,6 @@
#include <string.h> #include <string.h>
#include <usb.h> #include <usb.h>
#include <time.h> #include <time.h>
#include <signal.h>
#include "xbboot_version.h" #include "xbboot_version.h"
#define HIWORD(dw) (((dw) >> 16) & 0xFFFF) #define HIWORD(dw) (((dw) >> 16) & 0xFFFF)
@ -42,23 +41,20 @@
#define INGENIC_IN_ENDPOINT 0x81 #define INGENIC_IN_ENDPOINT 0x81
#define INGENIC_OUT_ENDPOINT 0x01 #define INGENIC_OUT_ENDPOINT 0x01
#define STAGE1_FILE_PATH (DATADIR "stage1.bin")
#define STAGE1_ADDRESS ("0x80002000")
uint8_t xburst_interface = 0; uint8_t xburst_interface = 0;
int xkill = 0;
struct usb_dev_handle* open_xburst_device(); struct usb_dev_handle* open_xburst_device();
void close_xburst_device(struct usb_dev_handle* xburst_h); 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 send_request(struct usb_dev_handle* xburst_h, char* request, char* str_param);
void signal_handler(int sig);
void show_help(); void show_help();
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
struct usb_dev_handle* xburst_h; struct usb_dev_handle* xburst_h;
signal(SIGHUP, signal_handler); /* hangup signal */
signal(SIGTERM, signal_handler); /* software termination signal from kill */
signal(SIGINT, signal_handler); /* software termination signal from kill */
if (argc < 2 if (argc < 2
|| !strcmp(argv[1], "-h") || !strcmp(argv[1], "-h")
|| !strcmp(argv[1], "--help")) { || !strcmp(argv[1], "--help")) {
@ -76,32 +72,65 @@ int main(int argc, char** argv)
} }
if (!strcmp(argv[1], "-d") || !strcmp(argv[1], "--daemon")) { if (!strcmp(argv[1], "-d") || !strcmp(argv[1], "--daemon")) {
if (argc != 4) {
show_help();
goto xquit;
}
struct timespec timx,tim1; struct timespec timx,tim1;
tim1.tv_sec = 1; tim1.tv_sec = 1;
tim1.tv_nsec = 0; tim1.tv_nsec = 0;
while(1) { while(1) {
nanosleep(&tim1,&timx);
xburst_h = open_xburst_device(); xburst_h = open_xburst_device();
if (xburst_h) { if (xburst_h) {
printf("Info - found XBurst boot device.\n"); printf("\nInfo - found XBurst boot device.\n");
printf("Info - wait 5 seconds for Xburst device booting...\n"); if (send_request(xburst_h, "set_addr", STAGE1_ADDRESS)) {
sleep(5); close_xburst_device(xburst_h);
} continue;
}
if (send_request(xburst_h, "bulk_write", STAGE1_FILE_PATH)) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "start1", STAGE1_ADDRESS)) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "get_info", "NULL")) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "set_addr", argv[2])) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "bulk_write", argv[3])) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "flush_cache","NULL")) {
close_xburst_device(xburst_h);
continue;
}
if (send_request(xburst_h, "start2", argv[2])) {
close_xburst_device(xburst_h);
continue;
}
if (xkill)
goto xquit;
if (nanosleep(&tim1,&timx) == -1){
perror("Error - ");
goto xquit; goto xquit;
} }
} }
} }
xburst_h = open_xburst_device(); xburst_h = open_xburst_device();
if (xburst_h) if (xburst_h)
send_request(xburst_h, argv[1], (argc == 2 ? NULL : argv[2])); if (send_request(xburst_h, argv[1], (argc == 2 ? NULL : argv[2]))) {
close_xburst_device(xburst_h);
return EXIT_FAILURE;
}
xquit: xquit:
close_xburst_device(xburst_h); close_xburst_device(xburst_h);
return EXIT_SUCCESS; return EXIT_SUCCESS;
@ -378,20 +407,13 @@ int send_request(struct usb_dev_handle* xburst_h, char* request, char* str_param
} }
} }
usleep(100);
return 0; return 0;
xout_xburst_interface: xout_xburst_interface:
return 1; return 1;
} }
void signal_handler(int sig){
switch(sig){
case SIGINT:
xkill = 1;
break;
}
}
void show_help() void show_help()
{ {
printf("\n" printf("\n"