summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorPali Rohár <pali.rohar@gmail.com>2012-08-11 09:54:05 +0200
committerPali Rohár <pali.rohar@gmail.com>2012-08-11 09:54:05 +0200
commitcb25a8bd3e3c67bbe18ae0584c49b03a9b186e00 (patch)
treeb5b61f17874ae7496b4e55e002f2a69b5f2e434d /src/main.c
parent3c4c0088f022b4623089bc2f9529f1c611e3dacc (diff)
download0xFFFF-cb25a8bd3e3c67bbe18ae0584c49b03a9b186e00.tar.bz2
main: Move image fitering to functions, do not fail if device or hwrev is not detected
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c133
1 files changed, 78 insertions, 55 deletions
diff --git a/src/main.c b/src/main.c
index 966bf82..a94777f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -241,6 +241,51 @@ static void parse_image_arg(char * arg, struct image_list ** image_first) {
}
+void filter_images_by_type(enum image_type type, struct image_list ** image_first) {
+
+ struct image_list * image_ptr = *image_first;
+ while ( image_ptr ) {
+ struct image_list * next = image_ptr->next;
+ if ( image_ptr->image->type != type ) {
+ image_list_del(image_ptr);
+ if ( image_ptr == *image_first )
+ *image_first = next;
+ }
+ image_ptr = next;
+ }
+
+}
+
+void filter_images_by_device(enum device device, struct image_list ** image_first) {
+
+ struct image_list * image_ptr = *image_first;
+ while ( image_ptr ) {
+ struct image_list * next = image_ptr->next;
+ if ( image_ptr->image->device != device && image_ptr->image->device != DEVICE_ANY ) {
+ image_list_del(image_ptr);
+ if ( image_ptr == *image_first )
+ *image_first = next;
+ }
+ image_ptr = next;
+ }
+
+}
+
+void filter_images_by_hwrev(const char * hwrev, struct image_list ** image_first) {
+
+ struct image_list * image_ptr = *image_first;
+ while ( image_ptr ) {
+ struct image_list * next = image_ptr->next;
+ if ( ! image_hwrev_is_valid(image_ptr->image, hwrev) ) {
+ image_list_del(image_ptr);
+ if ( image_ptr == *image_first )
+ *image_first = next;
+ }
+ image_ptr = next;
+ }
+
+}
+
int main(int argc, char **argv) {
const char * optstring = ""
@@ -348,14 +393,12 @@ int main(int argc, char **argv) {
struct usb_device_info * usb_dev = NULL;
- char hwrev[20];
char buf[512];
simulate = 0;
noverify = 0;
verbose = 0;
- memset(hwrev, 0, sizeof(hwrev));
show_title();
while ( ( c = getopt(argc, argv, optstring) ) != -1 ) {
@@ -547,54 +590,24 @@ int main(int argc, char **argv) {
/* filter images by type */
if ( filter_type ) {
enum image_type type = image_type_from_string(filter_type_arg);
- if ( ! type ) {
+ if ( ! type )
ERROR("Specified unknown image type for filtering: %s", filter_type_arg);
- } else {
- image_ptr = image_first;
- while ( image_ptr ) {
- struct image_list * next = image_ptr->next;
- if ( image_ptr->image->type != type ) {
- image_list_del(image_ptr);
- if ( image_ptr == image_first )
- image_first = next;
- }
- image_ptr = next;
- }
- }
+ else
+ filter_images_by_type(type, &image_first);
}
/* filter images by device */
if ( filter_device ) {
enum device device = device_from_string(filter_device_arg);
- if ( ! device ) {
+ if ( ! device )
ERROR("Specified unknown device for filtering: %s", filter_device_arg);
- } else {
- image_ptr = image_first;
- while ( image_ptr ) {
- struct image_list * next = image_ptr->next;
- if ( image_ptr->image->device != device && image_ptr->image->device != DEVICE_ANY ) {
- image_list_del(image_ptr);
- if ( image_ptr == image_first )
- image_first = next;
- }
- image_ptr = next;
- }
- }
+ else
+ filter_images_by_device(device, &image_first);
}
/* filter images by hwrev */
- if ( filter_hwrev ) {
- image_ptr = image_first;
- while ( image_ptr ) {
- struct image_list * next = image_ptr->next;
- if ( ! image_hwrev_is_valid(image_ptr->image, filter_hwrev_arg) ) {
- image_list_del(image_ptr);
- if ( image_ptr == image_first )
- image_first = next;
- }
- image_ptr = next;
- }
- }
+ if ( filter_hwrev )
+ filter_images_by_hwrev(filter_hwrev_arg, &image_first);
/* reorder images for flashing (first x-loader, second secondary) */
/* set 2nd and secondary images for cold-flashing */
@@ -749,6 +762,12 @@ int main(int argc, char **argv) {
}
}
+ if ( dev_load && dev_flash ) {
+ ERROR("Options load and flash cannot de used together");
+ ret = 1;
+ goto clean;
+ }
+
if ( dev_boot || dev_reboot || dev_load || dev_flash || dev_cold_flash || dev_ident || set_root || set_usb || set_rd || set_rd_flags || set_hw || set_kernel || set_nolo || set_sw || set_emmc ) {
do {
@@ -789,23 +808,17 @@ int main(int argc, char **argv) {
}
usb_dev->detected_device = nolo_get_device(usb_dev);
- if ( ! usb_dev->detected_device ) {
- printf("Cannot detect device\n");
- usb_close_device(usb_dev);
- usb_dev = NULL;
- continue;
- }
-
- printf("Device: %s\n", device_to_string(usb_dev->detected_device));
+ if ( ! usb_dev->detected_device )
+ printf("Device: (not detected)\n");
+ else
+ printf("Device: %s\n", device_to_string(usb_dev->detected_device));
- if ( nolo_get_hwrev(usb_dev, hwrev, sizeof(hwrev)) < 0 ) {
- printf("Cannot detect HW revision\n");
- usb_close_device(usb_dev);
- usb_dev = NULL;
- continue;
- }
+ buf[0] = 0;
+ nolo_get_hwrev(usb_dev, buf, sizeof(buf));
+ printf("HW revision: %s\n", buf[0] ? buf : "(not detected)");
- printf("HW revision: %s\n", hwrev);
+ if ( buf[0] )
+ usb_dev->detected_hwrev = strdup(buf);
buf[0] = 0;
nolo_get_nolo_ver(usb_dev, buf, sizeof(buf));
@@ -874,11 +887,21 @@ int main(int argc, char **argv) {
printf("\n");
+ /* filter images by device & hwrev */
+ if ( usb_dev->detected_device )
+ filter_images_by_device(usb_dev->detected_device, &image_first);
+ if ( usb_dev->detected_hwrev )
+ filter_images_by_hwrev(usb_dev->detected_hwrev, &image_first);
+
/* load */
+ if ( dev_load ) {
// if ( image_first )
+ }
/* flash */
+ if ( dev_flash) {
// if ( image_first )
+ }
/* configuration */
if ( set_rd_flags ) {