openmoko: kexecboot.diff

File kexecboot.diff, 3.7 KB (added by ew, 3 years ago)

diff against kexeboot.c from kexeboot.git 070409

  • kexecboot.c

    old new  
    349349        FB *fb; 
    350350        FILE *f; 
    351351        int angle = KXB_FBANGLE; 
    352         char *eventif = KXB_EVENTIF; 
    353352        struct bootlist * bl; 
    354353        struct input_event evt; 
    355354        struct termios old, new; 
    356355        struct hw_model_info *model; 
    357  
     356        int ev0; 
     357        int ev1; 
     358        fd_set fds; 
     359        /* hardcoded for openmoko gta02 with 2.6.24 kernel */ 
     360        char *eventif = "/dev/event0"; 
     361        char *eventif1 = "/dev/event1"; 
     362 
     363        struct input_event evt1; 
     364        int maxfd; 
     365        int nready; 
     366        int nread; 
     367        struct timeval tv; 
    358368        /* When our pid is 1 we are init-process */ 
    359369        if ( 1 == getpid() ) { 
    360370                initmode = 1; 
     
    410420                                eventif = argv[i]; 
    411421                                continue; 
    412422                        } 
     423                        if (!strcmp(argv[i], "-e") || !strcmp(argv[i], "--event")) { 
     424                          if (++i > argc) 
     425                            goto fail; 
     426                          eventif1 = argv[i]; 
     427                          continue; 
     428                        } 
    413429 
    414430                        fail: 
    415                         fprintf(stderr, "Usage: %s [-a|--angle <0|90|180|270>] \ 
    416                                 [-i|--input </dev/input/eventX>\n", 
    417                                 argv[0]); 
     431                 fprintf(stderr, "Usage: %s [-a|--angle <0|90|180|270>] \ 
     432                                [-i|--input </dev/input/eventX> [-e|--eventt </dev/input/eventX2>\n", 
     433                         /* kxecboot -i /dev/input4 -e /dev/input0  for GTA02*/ 
     434                         /*                aux             tscreen on GTA running shr-unstable */ 
     435                        argv[0]); 
    418436                        exit(-1); 
    419437                } 
    420438        } 
     
    425443        if ((fb = fb_new(angle)) == NULL) 
    426444                exit(-1); 
    427445 
    428         f = fopen(eventif,"r"); 
    429         if(!f){ 
    430             perror(eventif); 
     446        ev0 = open(eventif,O_RDONLY); 
     447        ev1 = open(eventif1,O_RDONLY); 
     448        if(!ev0 && !ev1 ){ 
     449            perror(eventif); /* maybe more sane output for for eventif1 */ 
    431450            exit(3); 
    432451        } 
    433452 
     
    445464 
    446465        do { 
    447466                display_menu(fb, bl, choice); 
    448                 do 
    449                         fread(&evt, sizeof(struct input_event), 1, f); 
    450                 while(evt.type != EV_KEY || evt.value != 0); 
    451  
    452                 switch (evt.code) { 
    453                 case KEY_UP: 
    454                         if (choice > 0) choice--; 
    455                         break; 
    456                 case KEY_DOWN: 
    457                         if ( choice < (bl->size - 1) ) choice++; 
    458                         break; 
    459                 case KEY_R: 
    460                         display_text(fb, "Rebooting..."); 
    461                         sync(); 
    462                         /* if ( -1 == reboot(LINUX_REBOOT_CMD_RESTART) ) { */ 
    463                         if ( -1 == reboot(RB_AUTOBOOT) ) { 
    464                                 perror("Can't initiate reboot"); 
     467                do{ 
     468                  /* Wait for some input. */ 
     469                  tv.tv_sec =1; 
     470                  tv.tv_usec = 0; 
     471                  FD_ZERO(&fds); 
     472                  FD_SET( ev0,&fds); 
     473                  FD_SET(ev1,&fds); 
     474                  maxfd = 8; 
     475                  nready = select(maxfd, &fds, NULL,NULL,&tv); 
     476                  /* now GTA02 specific */ 
     477                  if( FD_ISSET(ev0, &fds)) 
     478                    { 
     479                      read(ev0,&evt, sizeof(struct input_event)); 
     480                      DPRINTF("event: %i %i %i,\n",evt.type, evt.code,evt.value); 
     481                    } 
     482                  if( FD_ISSET(ev1, &fds)) 
     483                    { 
     484                      read(ev1,&evt1 ,sizeof(struct input_event) ); 
     485                      DPRINTF("event1: %i %i %i,\n",evt1.type, evt1.code,evt1.value); 
     486                      if ((evt1.code == 330) && (evt1.value == 1)) 
     487                        { 
     488                          if ( choice < (bl->size - 1) )  
     489                            { 
     490                              choice++; 
     491                              DPRINTF("Choice %i\n", choice); 
     492                            } 
     493                          else 
     494                            { 
     495                              choice=0; 
     496                            } 
     497                          DPRINTF("Selected: %i ,\n",choice ); 
     498                          break; 
    465499                        } 
    466                         break; 
    467                 case KEY_S:     /* reScan */ 
    468                         display_text(fb, "Rescanning devices.\nPlease wait..."); 
    469                         free_bootlist(bl); 
    470                         bl = scan_devices(model); 
    471                         break; 
    472                 } 
    473  
    474         } while( (bl->size == 0) || (evt.code != 87 && evt.code != 63 && 
    475                 evt.code != KEY_SPACE && evt.code != KEY_ENTER && 
    476                 evt.code != KEY_HIRAGANA && evt.code != KEY_HENKAN) ); 
     500                    } 
     501          } while( ( evt.type != EV_KEY || evt.value != 0) || ( evt.type != EV_KEY ||  evt1.value != 0) ); 
     502          // dev/event0 power 116 
     503          }while( ( evt.code != 169 ) || (bl->size == 0)  ); 
     504        draw_background(fb, "DEBUG by EW: .\n Boot selected "); 
     505        fb_render(fb); 
     506                   
    477507        fclose(f); 
    478508        // reset terminal 
    479509        tcsetattr(fileno(stdin), TCSANOW, &old);