예제 #1
0
파일: chopper.c 프로젝트: Rockbox/rockbox
/* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter)
{
    (void)parameter;
    int ret;

    rb->lcd_setfont(FONT_SYSFIXED);
#if LCD_DEPTH > 1
    rb->lcd_set_backdrop(NULL);
#endif
#ifdef HAVE_LCD_COLOR
    rb->lcd_set_background(LCD_BLACK);
    rb->lcd_set_foreground(LCD_WHITE);
#endif

    /* Turn off backlight timeout */
    backlight_ignore_timeout();

    rb->srand( *rb->current_tick );

    configfile_load(CFG_FILE, config, 1, 0);

    chopper_load(true);
    ret = chopGameLoop();

    configfile_save(CFG_FILE, config, 1, 0);

    rb->lcd_setfont(FONT_UI);
    /* Turn on backlight timeout (revert to settings) */
    backlight_use_settings();

    return ret;
}
예제 #2
0
enum plugin_status plugin_start(const void* parameter)
{
    (void)parameter;
#if LCD_DEPTH > 1
    rb->lcd_set_backdrop(NULL);
#endif
    /* Turn off backlight timeout */
    backlight_ignore_timeout();

#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
    rb->lcd_set_mode(LCD_MODE_PAL256);
#endif
    return main();
}
예제 #3
0
파일: rockblox.c 프로젝트: josephks/rockbox
enum plugin_status plugin_start (const void *parameter)
{

    (void) parameter;

    rb->srand (*rb->current_tick);

    /* Load HighScore if any */
    highscore_load(SCORE_FILE, highscores, NUM_SCORES);

#if LCD_DEPTH > 1
    rb->lcd_set_backdrop(NULL);
#endif

#ifdef HAVE_LCD_BITMAP
    rb->lcd_setfont (FONT_SYSFIXED);
#else
    if (!pgfx_init(4, 2))
    {
        rb->splash(HZ*2, "Old LCD :(");
        return PLUGIN_OK;
    }
#endif
    /* Turn off backlight timeout */
    backlight_ignore_timeout();
    load_game();
    resume_file = resume;
    while(!rockblox_loop()) {
        if(!resume) {
            int position = highscore_update(rockblox_status.score,
                                            rockblox_status.level, "",
                                            highscores, NUM_SCORES);
            if (position != -1) {
                if (position == 0)
                    rb->splash(HZ*2, "New High Score");
                highscore_show(position, highscores, NUM_SCORES, true);
            }
        }
    }

#ifndef HAVE_LCD_BITMAP
    pgfx_release();
#endif
    /* Save user's HighScore */
    highscore_save(SCORE_FILE, highscores, NUM_SCORES);
    backlight_use_settings();

    return PLUGIN_OK;
}
enum plugin_status plugin_start(const void* parameter)
{
    int ret;

    (void)parameter;
    /* Turn off backlight timeout */
    backlight_ignore_timeout();

    ret = plugin_main();

    /* Turn on backlight timeout (revert to settings) */
    backlight_use_settings();

    return ret;
}
예제 #5
0
파일: test_fps.c 프로젝트: 4nykey/rockbox
/* plugin entry point */
enum plugin_status plugin_start(const void* parameter)
{
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
    char str[32];
    int cpu_freq;
#endif

    /* standard stuff */
    (void)parameter;
    
#ifdef HAVE_TOUCHSCREEN
    rb->touchscreen_set_mode(rb->global_settings->touch_mode);
#endif

    log_init();
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
    cpu_freq = *rb->cpu_frequency; /* remember CPU frequency */
#endif
    backlight_ignore_timeout();

    time_main_update();
    rb->sleep(HZ);
#if defined(HAVE_LCD_COLOR) && (MEMORYSIZE > 2)
    time_main_yuv();
#endif
#if LCD_DEPTH < 4
    time_greyscale();
#endif
#ifdef HAVE_REMOTE_LCD
    time_remote_update();
#endif

#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
    if (*rb->cpu_frequency != cpu_freq)
        rb->snprintf(str, sizeof(str), "CPU clock changed!");
    else
        rb->snprintf(str, sizeof(str), "CPU: %d MHz",
                     (cpu_freq + 500000) / 1000000);
    log_text(str);
#endif
    backlight_use_settings();

    /* wait until user closes plugin */
    plugin_quit();

    return PLUGIN_OK;
}
예제 #6
0
파일: rockblox.c 프로젝트: josephks/rockbox
static int rockblox_loop (void)
{
    int button;
#if defined(ROCKBLOX_OFF_PRE) || defined(ROCKBLOX_DROP_PRE)
    int lastbutton = BUTTON_NONE;
#endif
    long next_down_tick = *rb->current_tick + level_speed(rockblox_status.level);

    if (rockblox_menu()) {
        return 1;
    }
    resume = false;
    resume_file = false;

    while (1) {
#ifdef HAS_BUTTON_HOLD
        if (rb->button_hold ()) {
            /* Turn on backlight timeout (revert to settings) */
            backlight_use_settings();
            rb->splash(0, "Paused");
            while (rb->button_hold ())
                rb->sleep(HZ/10);

            /* Turn off backlight timeout */
            backlight_ignore_timeout();

            /* get rid of the splash text */
            rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT);
            show_details ();
#ifdef HIGH_SCORE_Y
            show_highscores ();
#endif
            draw_next_block ();
            refresh_board ();
        }
#endif

        button = rb->button_get_w_tmo (MAX(next_down_tick - *rb->current_tick, 1));
        switch (button) {
#ifdef ROCKBLOX_RC_OFF
            case ROCKBLOX_RC_OFF:
#endif
            case ROCKBLOX_OFF:
#ifdef ROCKBLOX_OFF_PRE
                if (lastbutton != ROCKBLOX_OFF_PRE)
                    break;
#endif
                resume = true;
                return 0;
                break;

#if defined(ROCKBLOX_ROTATE)
            case ROCKBLOX_ROTATE:
#endif
            case ROCKBLOX_ROTATE_CCW:
            case ROCKBLOX_ROTATE_CCW | BUTTON_REPEAT:
#ifdef HAVE_SCROLLWHEEL
                /* if the wheel is disabled, add an event to the stack. */
                if(wheel_enabled == false)
                    wheel_events++;

                /* if it's enabled, go ahead and rotate.. */
                if(wheel_enabled)
#endif
#ifdef ROCKBLOX_ROTATE_CCW2
                /* fallback */
            case ROCKBLOX_ROTATE_CCW2:
#endif
                move_block (0, 0, (rockblox_status.co + 1) % figures[rockblox_status.cf].max_or);
                break;

            case ROCKBLOX_ROTATE_CW:
            case ROCKBLOX_ROTATE_CW | BUTTON_REPEAT:
#ifdef HAVE_SCROLLWHEEL
                if(wheel_enabled == false)
                    wheel_events++;

                if(wheel_enabled)
#endif
#ifdef ROCKBLOX_ROTATE_CW2
                /* fallback */
            case ROCKBLOX_ROTATE_CW2:
#endif
                move_block (0, 0,
                            (rockblox_status.co + figures[rockblox_status.cf].max_or -
                             1) % figures[rockblox_status.cf].max_or);
                break;

            case ROCKBLOX_DOWN:
            case ROCKBLOX_DOWN | BUTTON_REPEAT:
                move_block (0, 1, rockblox_status.co);
                break;

            case ROCKBLOX_RIGHT:
            case ROCKBLOX_RIGHT | BUTTON_REPEAT:
                move_block (1, 0, rockblox_status.co);
                break;

            case ROCKBLOX_LEFT:
            case ROCKBLOX_LEFT | BUTTON_REPEAT:
                move_block (-1, 0, rockblox_status.co);
                break;

            case ROCKBLOX_DROP:
#ifdef ROCKBLOX_DROP_PRE
                if (lastbutton != ROCKBLOX_DROP_PRE)
                    break;
#endif
                while (canMoveTo (rockblox_status.cx, rockblox_status.cy + 1, rockblox_status.co))
                    move_block (0, 1, rockblox_status.co);
                rockblox_status.dropped = true;
                break;
#ifdef ROCKBLOX_RESTART
            case ROCKBLOX_RESTART:
                rb->splash (HZ * 1, "Restarting...");
                init_rockblox (false);
                break;
#endif

            default:
                if (rb->default_event_handler (button) == SYS_USB_CONNECTED)
                    return PLUGIN_USB_CONNECTED;
                break;
        }
#if defined(ROCKBLOX_OFF_PRE) || defined(ROCKBLOX_DROP_PRE)
        if (button != BUTTON_NONE)
            lastbutton = button;
#endif

#ifdef HAVE_SCROLLWHEEL
        /* check if we should enable the scroll wheel, if events
         * begin to stack up... */
        if(wheel_enabled == false)
        {
            /* stopped rotating the wheel, reset the count */
            if(wheel_events == last_wheel_event)
            {
                last_wheel_event = 0;
                wheel_events = 0;
            }
            /* rotated the wheel a while constantly, enable it. */
            else if(wheel_events > 3)
            {
                wheel_enabled = true;
            }

            /* this evens out the last event and the "current" event.
             * if we get an event next time through button reading, it will
             * remain ahead of last_event. if we don't, they'll end up equaling
             * each other.. thus, the scroll count will be reset. */
            if(wheel_enabled == false && wheel_events > last_wheel_event)
                last_wheel_event++;
        }
#endif

        if (TIME_AFTER(*rb->current_tick, next_down_tick)) {
            move_down ();
            next_down_tick += level_speed(rockblox_status.level);
            if (TIME_AFTER(*rb->current_tick, next_down_tick))
                /* restart time "raster" when we had to wait longer than usual
                 * (pause, game restart etc) */
                next_down_tick = *rb->current_tick + level_speed(rockblox_status.level);
        }

        if (rockblox_status.gameover) {
#if LCD_DEPTH >= 2
            rb->lcd_set_foreground (LCD_BLACK);
#endif
            show_game_over();
            resume = false;
            return 0;
        }

        refresh_board ();
    }

    return 0;
}
예제 #7
0
enum plugin_status plugin_start(const void* parameter)
{
    int button;
#ifdef MAZE_NEW_PRE
    int lastbutton = BUTTON_NONE;
#endif
    int quit = 0;
    struct maze maze;
    (void)parameter;

    /* Turn off backlight timeout */
    backlight_ignore_timeout();

    /* Seed the RNG */
    rb->srand(*rb->current_tick);

    FOR_NB_SCREENS(i)
        rb->screens[i]->set_viewport(NULL);

    /* Draw the background */
#if LCD_DEPTH > 1
    rb->lcd_set_backdrop(NULL);
#if LCD_DEPTH >= 16
    rb->lcd_set_foreground(LCD_RGBPACK( 0, 0, 0));
    rb->lcd_set_background(LCD_RGBPACK(182, 198, 229)); /* rockbox blue */
#elif LCD_DEPTH == 2
    rb->lcd_set_foreground(0);
    rb->lcd_set_background(LCD_DEFAULT_BG);
#endif
#endif

    /* Initialize and draw the maze */
    maze_init(&maze);
    maze_generate(&maze);
    FOR_NB_SCREENS(i)
        maze_draw(&maze, rb->screens[i]);

    while(!quit) {
#ifdef __PLUGINLIB_ACTIONS_H__
        button = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts,
                ARRAYLEN(plugin_contexts));
#else
        button = rb->button_get(true);
#endif
        switch(button) {
        case MAZE_NEW:
#ifdef MAZE_NEW_PRE
            if(lastbutton != MAZE_NEW_PRE)
                break;
#endif
            maze_init(&maze);
            maze_generate(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_SOLVE:
            maze_solve(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_UP:
        case MAZE_UP_REPEAT:
            maze_move_player_up(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_RIGHT:
        case MAZE_RIGHT_REPEAT:
            maze_move_player_right(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_DOWN:
        case MAZE_DOWN_REPEAT:
            maze_move_player_down(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_LEFT:
        case MAZE_LEFT_REPEAT:
            maze_move_player_left(&maze);
            FOR_NB_SCREENS(i)
                maze_draw(&maze, rb->screens[i]);
            break;
        case MAZE_QUIT:
            /* quit plugin */
            quit=1;
            break;
        default:
            if (rb->default_event_handler(button) == SYS_USB_CONNECTED) {
                /* quit plugin */
                quit=2;
            }
            break;
        }
#ifdef MAZE_NEW_PRE
        if( button != BUTTON_NONE )
            lastbutton = button;
#endif
    }
    /* Turn on backlight timeout (revert to settings) */
    backlight_use_settings();
    return ((quit == 1) ? PLUGIN_OK : PLUGIN_USB_CONNECTED);
}
예제 #8
0
파일: resistor.c 프로젝트: IlVerz/rockbox
static void color_to_resistance(void) 
{
    backlight_ignore_timeout();
    bool quit = false;
    int button_input = 0;
            
    /* The colors of the bands */
    enum color first_band = 0;
    enum color second_band = 0;
    enum color third_band = 0;
    enum color fourth_band = 0;
           
    int total_resistance_centiunits = 0;
    char total_resistance_str [35];
            
    rb->splash(HZ/2, "Colour to resistance");
    rb->lcd_clear_display();
            
    while(!quit) {
        first_band = do_first_band_menu();
        if(first_band==RES_INVALID) break;

        second_band = do_second_band_menu();
        if(second_band==RES_INVALID) break;

        third_band = do_third_band_menu();
        if(third_band==RES_INVALID) break;

        fourth_band = do_fourth_band_menu();
        if(third_band==RES_INVALID) break;
                    
        total_resistance_centiunits = calculate_resistance(first_band, 
                                                           second_band,
                                                           third_band);

        rb->lcd_clear_display();
        lineno = INITIAL_TEXT_Y;
#ifndef USE_TEXT_ONLY
        draw_resistor(first_band, second_band, third_band, fourth_band);
#endif                     
        draw_resistor_text(first_band, second_band, third_band, fourth_band);

        if(total_resistance_centiunits % 100 == 0) {
            /* No decimals */
            rb->snprintf(total_resistance_str, sizeof(total_resistance_str), 
                         "Resistance: %d %s",
                         total_resistance_centiunits/100,
                         unit_abbrev);
        }
        else {
            rb->snprintf(total_resistance_str, sizeof(total_resistance_str), 
                         "Resistance: %d.%2.2d %s",
                         total_resistance_centiunits/100,
                         total_resistance_centiunits%100,
                         unit_abbrev);
        }
        display->set_viewport(&text_vp);
        rb->lcd_puts_scroll(total_resistance_str_x, lineno++,
                            total_resistance_str);
        rb->lcd_puts_scroll(tolerance_str_x, lineno++,
                            get_tolerance_str(fourth_band));
        rb->lcd_update();
                    
        button_input = rb->button_get(true);
        switch(button_input) {
            case PLA_RIGHT:
                break;
            case PLA_EXIT:
            case PLA_SELECT:
            default:
                quit = true;
                backlight_use_settings();
                break;
        }                   
    }
    display->set_viewport(&text_vp);
    rb->lcd_stop_scroll();
    display->set_viewport(&screen_vp);
    rb->lcd_clear_display();
    return;
}
예제 #9
0
파일: resistor.c 프로젝트: IlVerz/rockbox
static void resistance_to_color(void) 
{
    backlight_ignore_timeout();
    int menu_selection;
    int menu_selection_tol;
    int button_press;
    int i;
    bool quit = false;
    char kbd_buffer [10];
    int kbd_input_int;
    int temp;
    int in_resistance_int;
    
    int power_ten=0;
    int first_band_int = 0;
    int second_band_int = 0;
    
    enum color first_band;
    enum color second_band;
    enum color multiplier;
    enum color fourth_band = 0;
    enum color units_used = 0;
    
    char out_str[20];
    
    for(i=0; i<=10; i++) { kbd_buffer[i] = 0; }
    /* This cleans out the mysterious garbage that appears */
    rb->lcd_clear_display();
    rb->splash(HZ/2, "Resistance to Colour");
    MENUITEM_STRINGLIST(r_to_c_menu, "Select unit to use:", NULL, 
                        "Ohms", "Kiloohms (KOhms)", "Megaohms (MOhms)",
                        "Gigaohms (GOhms)");
    MENUITEM_STRINGLIST(r_to_c_menu_tol, "Tolerance to display:", NULL,
                        "5%", "10%", "1%", "2%", "20%");
      
    while(!quit) {
        int ret;
        ret=menu_selection = rb->do_menu(&r_to_c_menu, &menu_selection,
                                     NULL, false);
        if(ret<0) break;
        
        rb->kbd_input(kbd_buffer, sizeof(kbd_buffer));
        /* As stated above somewhere, we (I) need to make a calculator-like
           keypad, that keyboard isn't all that fun to use. */
        ret = rb->do_menu(&r_to_c_menu_tol, &menu_selection_tol,
                                         NULL, false);
        if(ret<0) break;

        switch(menu_selection_tol) {
            case 0: /* 5% */
                fourth_band = RES_GOLD;
                break;
            case 1: /* 10% */
                fourth_band = RES_SILVER;
                break;
            case 2: /* 1% */
                fourth_band = RES_BROWN;
                break;
            case 3: /* 2% */
                fourth_band = RES_RED;
                break;
            case 4: /* 20% */
                fourth_band = RES_NONE;
                break;
        }
            
        kbd_input_int = rb->atoi(kbd_buffer);
        in_resistance_int = kbd_input_int;
        
        switch(menu_selection) {
            case 0:
                power_ten=0;
                units_used = RES_BLACK;
                break;
            case 1: /* KOhms */
                power_ten=3;
                units_used = RES_ORANGE;
                break;
            case 2: /* MOhms */
                power_ten=6;
                units_used = RES_BLUE;
                break;
            case 3: /* GOhms */
                power_ten=9;
                units_used = RES_WHITE;
                break;
        }

        temp=kbd_input_int;
        while(temp>=100) {
            temp/=10;
            power_ten++;
        }
        first_band_int=temp/10;
        second_band_int=temp%10;

        first_band = get_band_rtoc(first_band_int);
        second_band = get_band_rtoc(second_band_int);
        multiplier = get_band_rtoc(power_ten);

        if( first_band == RES_INVALID
         || second_band == RES_INVALID
         || multiplier == RES_INVALID) {
            rb->splashf(HZ, "%d %s can not be represented",
                        in_resistance_int,band_data[units_used].unit);
            return;
        }
        
        rb->lcd_clear_display();
        lineno = INITIAL_TEXT_Y;
#ifndef USE_TEXT_ONLY
        draw_resistor(first_band, second_band, multiplier, fourth_band);
#endif                     
        draw_resistor_text(first_band, second_band, multiplier, fourth_band);
        
        rb->snprintf(out_str, sizeof(out_str), "Input: %d %s", in_resistance_int,
                     band_data[units_used].unit);
        display->set_viewport(&text_vp);
        rb->lcd_puts_scroll(r_to_c_out_str_x, lineno++, out_str);
        rb->lcd_update();
        
        button_press = rb->button_get(true);
        switch(button_press) {
            case PLA_SELECT:
                break;
            default:
                quit = true;
                backlight_use_settings();
                break;
        }
    }
    display->set_viewport(&text_vp);
    rb->lcd_stop_scroll();
    display->set_viewport(&screen_vp);
    rb->lcd_clear_display();
}
예제 #10
0
파일: resistor.c 프로젝트: IlVerz/rockbox
static void led_resistance_calc(void)
{
    backlight_ignore_timeout();
    int voltage_menu_selection, button_press, j, k, l, foreward_current = 0;
    int fwd_current_selection = 0;
    bool quit = false;
    char kbd_buffer [5];
    char fwd_kbd_buffer [5];
    int input_voltage, led_voltage = 0;

    int resistance = 0;
    int rounded_resistance = 0;
    int temp;
    int power_rating_in = 0;
    int rounded_power_rating = 0;
    int out_int = 0;
    char current_out_str [16];
    char true_current_out_str [40];
    char rounded_resistance_out_str [40];
    char power_rating_out_str [40];
                         
    int power_ten, first_band_int, second_band_int = 0;
    
    enum color first_band;
    enum color second_band;
    enum color multiplier;
    enum color fourth_band = RES_NONE;
    
    rb->lcd_clear_display();
    
    MENUITEM_STRINGLIST(voltage_menu, "Select LED voltage:", NULL,
                        "2v (Common red, orange)", "1.5v (IR)", "2.1v (Yellow)",
                        "2.2v (Green)", "3.3v (True green, blue, white, UV)", 
                        "4.6v (Blue - 430nm)");
    MENUITEM_STRINGLIST(fwd_current_menu, "Select foreward current:", NULL,
                 "20mA - Most common for 5mm and 3mm LEDs - select if unsure.",
                 "Key in other (only if already known)");
    
    while(!quit) {
        int ret;
        ret = voltage_menu_selection = rb->do_menu(&voltage_menu, 
                      &voltage_menu_selection, NULL, false);
        if(ret<0) break;
        ret = fwd_current_selection = rb->do_menu(&fwd_current_menu, 
                      &fwd_current_selection,  NULL, false);
        if(ret<0) break;
        rb->lcd_clear_display();


        rb->splash(HZ*2, "(First) Input the supply voltage:");
        memset(kbd_buffer,0,sizeof(kbd_buffer));
        rb->kbd_input(kbd_buffer, sizeof(kbd_buffer));
        input_voltage = rb->atoi(kbd_buffer);
        if(input_voltage == 0) break;

        if(input_voltage != (int)input_voltage) {
            input_voltage *= 10;
            }
        else { input_voltage *= 100; }
                
        switch(voltage_menu_selection) {
            case 0: /* 2v */
                led_voltage = 200;
                break;
            case 1: /* 1.5v */
                led_voltage = 150;
                break;
            case 2: /* 2.1 */
                led_voltage = 210;
                break;
            case 3:
                led_voltage = 220;
                break;
            case 4:
                led_voltage = 330;
                break;
            case 5:
                led_voltage = 460;
                break;
        }
        switch(fwd_current_selection) {
            case 0: /* 20mA */
                foreward_current = 2; /* 20mA * 100 */
                break;
            case 1:
                rb->lcd_clear_display();
                rb->splash(HZ*2, "Input the foreward current, in mA");
                memset(fwd_kbd_buffer,0,sizeof(fwd_kbd_buffer));
                rb->kbd_input(fwd_kbd_buffer, sizeof(fwd_kbd_buffer));
                foreward_current = ((rb->atoi(fwd_kbd_buffer))/10);
                break;
        }
        
        if(foreward_current == 0) break;

        rb->lcd_clear_display();
        
        resistance = (input_voltage - led_voltage) / foreward_current;
        out_int = resistance;
        
        int total_common_values = 11;
        int total_power_values = 9;
        
        if(led_voltage > input_voltage) {
            rb->splash(HZ, "Problem: LED voltage is higher than the source.");
            break;
        }
        
        for(j = 0; j < total_common_values; j++) {
            for(k = 1; k < 5; k++) {
                if( resistance == (common_values[j] * powi(10, k))) {
                    rounded_resistance = (common_values[j] * powi(10, k)); 
                                          /* perfect match */
                    break;
                }
                else if(resistance >= (common_values[j] * powi(10, k)) && 
                        resistance <= (common_values[j+1] * powi(10, k))) {
                    rounded_resistance = (common_values[j+1] * powi(10, k));
                           /* the higher resistance, to be safe */
                    break;
                }
                else { break; }
            }
        }
            
        if(rounded_resistance == 0) 
        {
            rb->splash(HZ, "Problem: Input voltage too high.");
            break;
        }
        power_rating_in = ((input_voltage/100)*(input_voltage/100)*1000 / rounded_resistance);
        /* in mW */
        for(l = 0; l < total_power_values; l++) {
            if((int)power_rating_in == power_ratings[l]) {
                rounded_power_rating = (power_ratings[l]);
                break;
            }
            else if(power_rating_in >= power_ratings[l] && 
                    power_rating_in <= power_ratings[l+1]) {
                rounded_power_rating = power_ratings[l+1];
                break;
            }
            else { break; }
        }
        
        get_power_rating_str(rounded_power_rating);    
                 
        power_ten=0;
        temp=rounded_resistance;
        while(temp>=100) {
            temp/=10;
            power_ten++;
        }
        first_band_int=temp/10;
        second_band_int=temp%10;
        
        first_band = get_band_rtoc(first_band_int);
        second_band = get_band_rtoc(second_band_int);
        multiplier = get_band_rtoc(power_ten);
    
        rb->lcd_clear_display();
        lineno = INITIAL_TEXT_Y;
#ifndef USE_TEXT_ONLY
        draw_resistor(first_band, second_band, multiplier, fourth_band);
#endif
        draw_resistor_text(first_band, second_band, multiplier, fourth_band);
    
        rb->snprintf(current_out_str, sizeof(current_out_str), "%d mA", 
                         (foreward_current*10));
        
        rb->snprintf(true_current_out_str, sizeof(true_current_out_str), 
                     "Input: %dv, %d Ohms @ %s", (input_voltage/100), 
                     out_int, current_out_str);
        rb->snprintf(rounded_resistance_out_str, 
                     sizeof(rounded_resistance_out_str), 
                     "Rounded/displayed: [%d %s]", rounded_resistance, 
                     band_data[multiplier].unit);
        rb->snprintf(power_rating_out_str, sizeof(power_rating_out_str), 
                     "Recommended: %s or greater",
                     get_power_rating_str(rounded_power_rating));

        display->set_viewport(&text_vp);
        rb->lcd_puts_scroll(resistance_val_x, lineno++, true_current_out_str);
        rb->lcd_puts_scroll(resistance_val_x, lineno++, rounded_resistance_out_str);
        rb->lcd_puts_scroll(resistance_val_x, lineno++, power_rating_out_str);

        rb->lcd_update();
        
        button_press = rb->button_get(true);
        switch(button_press) {
            case PLA_SELECT:
                break;
            default:
                quit = true;
                backlight_use_settings();
                break;
        }
    }
    display->set_viewport(&text_vp);
    rb->lcd_stop_scroll();
    display->set_viewport(&screen_vp);
    rb->lcd_clear_display();
}
예제 #11
0
파일: pong.c 프로젝트: Cortexelus/rockbox
/* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter)
{
    struct pong pong;
    int game = 1;

    int blink_timer = 0;
    int blink_rate = 20;
    bool blink = true;

    /* init the struct with some silly values to start with */

    pong.ball.x = 20*RES;
    pong.ball.y = 20*RES;
    pong.ball.speedx = SPEEDX;
    pong.ball.speedy = SPEEDY;

    pong.player[0].xpos = 0;
    pong.player[0].e_pad = 0;
    pong.player[0].w_pad = 7;
    pong.player[1].xpos = LCD_WIDTH-PAD_WIDTH;
    pong.player[1].e_pad = 0;
    pong.player[1].w_pad = 40;

    /* start every game in demo mode */
    pong.player[0].iscpu = pong.player[1].iscpu = true;

    pong.player[0].score = pong.player[1].score = 0; /* lets start at 0 - 0 ;-) */

    /* if you don't use the parameter, you can do like
       this to avoid the compiler warning about it */
    (void)parameter;

    /* Turn off backlight timeout */
    backlight_ignore_timeout();
    /* Clear screen */
    rb->lcd_clear_display();

    /* go go go */
    while(game > 0) {
        if (game == 2) { /* Game Paused */
            rb->splash(0, "PAUSED");
            while(game == 2)
                game = keys(&pong); /* short circuit */
            rb->lcd_clear_display();
        }

        if( pong.player[0].iscpu && pong.player[1].iscpu ) {
            if(blink_timer<blink_rate) {
                ++blink_timer;
            }
            else {
                blink_timer=0;
                blink = !blink;
            }

            if(blink==true) {
                blink_demo();
            }
            else {
                rb->lcd_clear_display();
            }
        }

        showscore(&pong);
        pad(&pong, 0); /* draw left pad */
        pad(&pong, 1); /* draw right pad */
        ball(&pong); /* move and draw ball */

        rb->lcd_update();

        game = keys(&pong); /* deal with keys */
    }

    /* Turn on backlight timeout (revert to settings) */
    backlight_use_settings();
    return (game == 0) ? PLUGIN_OK : PLUGIN_USB_CONNECTED;
}
예제 #12
0
파일: rockboy.c 프로젝트: Rockbox/rockbox
/* this is the plugin entry point */
enum plugin_status plugin_start(const void* parameter)
{
    rb->lcd_setfont(FONT_SYSFIXED);

    rb->lcd_clear_display();

    if (!parameter)
    {
        rb->splash(HZ*3, "Play gameboy ROM file! (.gb/.gbc)");
        return PLUGIN_OK;
    }
    if(rb->audio_status())
    {
        audio_bufferbase = audio_bufferpointer
            = rb->plugin_get_buffer(&audio_buffer_free);
        plugbuf=true;
    }
    else
    {
        audio_bufferbase = audio_bufferpointer
            = rb->plugin_get_audio_buffer(&audio_buffer_free);
        plugbuf=false;
    }
#if MEMORYSIZE <= 8 && (CONFIG_PLATFORM & PLATFORM_NATIVE)
    /* loaded as an overlay plugin, protect from overwriting ourselves */
    if ((unsigned)(plugin_start_addr - (unsigned char *)audio_bufferbase)
        < audio_buffer_free)
        audio_buffer_free = plugin_start_addr - (unsigned char *)audio_bufferbase;
#endif
    setoptions();

    shut=0;
    cleanshut=0;

#ifdef HAVE_WHEEL_POSITION
    rb->wheel_send_events(false);
#endif

#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
    rb->lcd_set_mode(LCD_MODE_PAL256);
#endif

    /* ignore backlight time out */
    backlight_ignore_timeout();

    gnuboy_main(parameter);

#ifdef HAVE_WHEEL_POSITION
    rb->wheel_send_events(true);
#endif

#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
    rb->lcd_set_mode(LCD_MODE_RGB565);
#endif

    backlight_use_settings();

    if(!rb->audio_status())
        rockboy_pcm_close();

    if(shut&&!cleanshut)
    {
        rb->splash(HZ/2, errormsg);
        return PLUGIN_ERROR;
    }

    rb->splash(HZ/2, "Closing Rockboy");

    savesettings();

    cleanup();

    return PLUGIN_OK;
}
예제 #13
0
파일: greyscale.c 프로젝트: Rockbox/rockbox
/* this is only a demo of what the framework can do */
int main(void)
{
    int time;
    int x, y, i;
    int button, scroll_amount;
    bool black_border = false;

    static const unsigned char rockbox[] = {
    /* ...........................................
     * .####...###...###..#...#.####...###..#...#.
     * .#...#.#...#.#...#.#..#..#...#.#...#..#.#..
     * .####..#...#.#.....###...####..#...#...#...
     * .#..#..#...#.#...#.#..#..#...#.#...#..#.#..
     * .#...#..###...###..#...#.####...###..#...#.
     * ...........................................
     * 43 x 7 pixel, 1 bpp
     */
       0x00, 0x3E, 0x0A, 0x0A, 0x1A, 0x24, 0x00, 0x1C, 0x22, 0x22,
       0x22, 0x1C, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x14, 0x00, 0x3E,
       0x08, 0x08, 0x14, 0x22, 0x00, 0x3E, 0x2A, 0x2A, 0x2A, 0x14,
       0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x22, 0x14, 0x08,
       0x14, 0x22, 0x00
    };
    
    static const unsigned char showing[] = {
    /* .......................................
     * ..####.#...#..###..#...#.#.#...#..####.
     * .#.....#...#.#...#.#...#.#.##..#.#.....
     * ..###..#####.#...#.#.#.#.#.#.#.#.#..##.
     * .....#.#...#.#...#.#.#.#.#.#..##.#...#.
     * .####..#...#..###...#.#..#.#...#..####.
     * .......................................
     * 39 x 7 pixel, 1 bpp
     */
       0x00, 0x24, 0x2A, 0x2A, 0x2A, 0x12, 0x00, 0x3E, 0x08, 0x08,
       0x08, 0x3E, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x1E,
       0x20, 0x18, 0x20, 0x1E, 0x00, 0x3E, 0x00, 0x3E, 0x04, 0x08,
       0x10, 0x3E, 0x00, 0x1C, 0x22, 0x22, 0x2A, 0x3A, 0x00
    };
    
    static const unsigned char grayscale_grey[] = {
    /* .......................................................
     * ..####.####...###..#...#..####..###...###..#.....#####.
     * .#.....#...#.#...#.#...#.#.....#...#.#...#.#.....#.....
     * .#..##.####..#####..#.#...###..#.....#####.#.....####..
     * .#...#.#..#..#...#...#.......#.#...#.#...#.#.....#.....
     * ..####.#...#.#...#...#...####...###..#...#.#####.#####.
     * .......................................................
     * 55 x 7 pixel, 8 bpp
     */
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110,
       120,120, 20, 20, 20, 20,120,222,222,222,222,120,120,120, 24, 24,
        24,120,120,226,120,120,120,226,120,120, 28, 28, 28, 28,120,120,
       230,230,230,120,120,120, 32, 32, 32,120,120,234,120,120,120,120,
       120, 36, 36, 36, 36, 36,120,
       130, 20,130,130,130,130,130,222,130,130,130,222,130, 24,130,130,
       130, 24,130,226,130,130,130,226,130, 28,130,130,130,130,130,230,
       130,130,130,230,130, 32,130,130,130, 32,130,234,130,130,130,130,
       130, 36,130,130,130,130,130,
       140, 20,140,140, 20, 20,140,222,222,222,222,140,140, 24, 24, 24,
        24, 24,140,140,226,140,226,140,140,140, 28, 28, 28,140,140,230,
       140,140,140,140,140, 32, 32, 32, 32, 32,140,234,140,140,140,140,
       140, 36, 36, 36, 36,140,140,
       130, 20,130,130,130, 20,130,222,130,130,222,130,130, 24,130,130,
       130, 24,130,130,130,226,130,130,130,130,130,130,130, 28,130,230,
       130,130,130,230,130, 32,130,130,130, 32,130,234,130,130,130,130,
       130, 36,130,130,130,130,130,
       120,120, 20, 20, 20, 20,120,222,120,120,120,222,120, 24,120,120,
       120, 24,120,120,120,226,120,120,120, 28, 28, 28, 28,120,120,120,
       230,230,230,120,120, 32,120,120,120, 32,120,234,234,234,234,234,
       120, 36, 36, 36, 36, 36,120,
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
       110,110,110,110,110,110,110
    };

    /* Turn off backlight timeout */
    backlight_ignore_timeout();

    rb->lcd_setfont(FONT_SYSFIXED);   /* select default font */

    /* get the remainder of the plugin buffer */
    gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);

    /* initialize the greyscale buffer:
       Archos: 112 pixels wide, 7 rows (56 pixels) high.
       H1x0: 160 pixels wide, 30 rows (120 pixels) high. */
    if (!grey_init(gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP,
                   LCD_WIDTH, GFX_HEIGHT, NULL))
    {
        rb->splash(HZ, "Not enough memory.");
        return PLUGIN_ERROR;
    }

    /* place greyscale overlay 1 row down */
    grey_set_position(0, 8);

    rb->lcd_puts(0, 0, "Shades: 129");
    rb->lcd_update();

#ifdef HAVE_ADJUSTABLE_CPU_FREQ
    rb->cpu_boost(true);
#endif
    grey_show(true);          /* switch on greyscale overlay */

    time = *rb->current_tick; /* start time measurement */

    grey_set_background(150);
    grey_clear_display();     /* fill everything with grey 150 */

    /* draw a dark grey line star background */
    grey_set_foreground(80);
    for (y = 0; y < GFX_HEIGHT; y += 8)                   /* horizontal part */
    {
        grey_drawline(0, y, (LCD_WIDTH-1), (GFX_HEIGHT-1) - y); /*grey lines */
    }
    for (x = 10; x <= LCD_WIDTH; x += 10)                    /* vertical part */
    {
        grey_drawline(x, 0, (LCD_WIDTH-1) - x, (GFX_HEIGHT-1)); /*grey lines */
    }

    grey_set_foreground(0);
    grey_drawrect(0, 0, LCD_WIDTH, GFX_HEIGHT);   /* black border */

    /* draw grey tones */
    for (i = 0; i < GFX_GREYTONE_WIDTH; i++)
    {
        x = ((LCD_WIDTH-GFX_GREYTONE_WIDTH)/2) + i;
        grey_set_foreground(GFX_GREYTONE_STEP * i);
        /* vertical lines */
        grey_vline(x, (GFX_HEIGHT/8), (GFX_HEIGHT-GFX_HEIGHT/8-1));
    }

    grey_set_drawmode(DRMODE_COMPLEMENT);
    /* invert rectangle (lower half) */
    grey_fillrect((LCD_WIDTH-GFX_GREYTONE_WIDTH)/2, (GFX_HEIGHT/2+1),
                  GFX_GREYTONE_WIDTH, (GFX_HEIGHT/2-GFX_HEIGHT/8-1));
    /* invert a line */
    grey_hline((LCD_WIDTH-GFX_GREYTONE_WIDTH)/2,
               (LCD_WIDTH+GFX_GREYTONE_WIDTH)/2, (GFX_HEIGHT/2-1));

    /* show bitmaps (1 bit and 8 bit) */
    /* opaque */
    grey_set_drawinfo(DRMODE_SOLID, 255, 100);
    grey_mono_bitmap(rockbox,
                     MAX((LCD_WIDTH/2-47), ((LCD_WIDTH-GFX_GREYTONE_WIDTH)/2)),
                     (5*GFX_HEIGHT/16-4), 43, 7);
    /* transparent */
    grey_set_drawinfo(DRMODE_FG, 0, 100);
    grey_mono_bitmap(showing, (LCD_WIDTH/2+4) , (5*GFX_HEIGHT/16-4), 39, 7);
    /* greyscale */
    grey_gray_bitmap(grayscale_grey, ((LCD_WIDTH-55)/2), (11*GFX_HEIGHT/16-4),
                     55, 7);

    grey_update();

    time = *rb->current_tick - time;  /* end time measurement */

    rb->lcd_putsf(0, 0, "Shades: 129, %d.%02ds", time / 100, time % 100);
    grey_deferred_lcd_update();       /* schedule an lcd_update() */
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
    rb->cpu_boost(false);
#endif

    /* drawing is now finished, play around with scrolling 
     * until you press OFF or connect USB
     */
    grey_set_background(255);
    while (true)
    {
        scroll_amount = 1;

        button = rb->button_get(true);

        exit_on_usb(button);

        if (button & GREYSCALE_SHIFT)
        {
            if (!black_border)
            {
                grey_set_background(0);
                black_border = true;
            }
        }
        else
        {
            if (black_border)
            {
                grey_set_background(255);
                black_border = false;
            }
        }

        if (button & BUTTON_REPEAT)
            scroll_amount = 4;

        switch (button & ~(GREYSCALE_SHIFT | BUTTON_REPEAT))
        {
            case GREYSCALE_LEFT:

                grey_scroll_left(scroll_amount);  /* scroll left */
                grey_update();
                break;

            case GREYSCALE_RIGHT:

                grey_scroll_right(scroll_amount); /* scroll right */
                grey_update();
                break;

            case GREYSCALE_UP:

                grey_scroll_up(scroll_amount);    /* scroll up */
                grey_update();
                break;

            case GREYSCALE_DOWN:

                grey_scroll_down(scroll_amount);  /* scroll down */
                grey_update();
                break;
#ifdef GREYSCALE_RC_OFF
            case GREYSCALE_RC_OFF:
#endif
            case GREYSCALE_OFF:
                return PLUGIN_OK;
        }
    }
}