Beispiel #1
0
int nokexec_set_struct(struct multirom_status *s)
{
    char path[256];
    int has_kexec;

    memset(&nokexec_s, 0, sizeof(struct struct_nokexec));

    // primary boot.img backup
    sprintf(path, "%s/%s", mrom_dir(), "primary_boot.img");
    nokexec_s.path_primary_bootimg = strdup(path);
    INFO(NO_KEXEC_LOG_TEXT ": primary_boot.img location will be=%s\n", nokexec_s.path_primary_bootimg);

    // find boot mmcblk
    nokexec_s.path_boot_mmcblk = nokexec_find_boot_mmcblk_path(s);

    // set flags
    nokexec_s.is_allowed     = s->no_kexec & NO_KEXEC_ALLOWED;
    nokexec_s.is_ask_confirm = s->no_kexec & NO_KEXEC_CONFIRM;
    nokexec_s.is_ask_choice  = s->no_kexec & NO_KEXEC_CHOICE;
    nokexec_s.is_forced      = s->no_kexec & NO_KEXEC_FORCED;

    nokexec_s.is_disabled    = !(nokexec_s.is_allowed || nokexec_s.is_ask_confirm || nokexec_s.is_ask_choice || nokexec_s.is_forced);

    has_kexec = multirom_has_kexec();

    if (!has_kexec)
        nokexec_s.selected_method = NO_KEXEC_BOOT_NOKEXEC;
    else if (nokexec_s.is_forced)
        nokexec_s.selected_method = NO_KEXEC_BOOT_NOKEXEC;
    else
        nokexec_s.selected_method = NO_KEXEC_BOOT_NORMAL;


    // not implemented
    nokexec_s.is_allow_kexec_primary = s->no_kexec & NO_KEXEC_PRIMARY;
    nokexec_s.is_always_restore_primary = s->no_kexec & NO_KEXEC_RESTORE;

    return 0;
}
void multirom_ui_tab_rom_boot_btn(int action)
{
    if(!themes_info->data->tab_data)
        return;

    tab_data_roms *t = (tab_data_roms*)themes_info->data->tab_data;
    if(!t->list->selected)
        return;

    struct multirom_rom *rom = multirom_get_rom_by_id(mrom_status, t->list->selected->id);
    if(!rom)
        return;

    int m = M(rom->type);
    if(m & MASK_UNSUPPORTED)
    {
        active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED);
        fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error");
        fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "Unsupported ROM type.");
        fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "See XDA thread for more info.");
        fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close");

        fb_draw();
        fb_freeze(1);
        set_touch_handlers_mode(HANDLERS_ALL);
        return;
    }

    if (((m & MASK_KEXEC) || ((m & MASK_ANDROID) && rom->has_bootimg)) &&
        multirom_has_kexec() != 0)
    {
        active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED);
        fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error");
        fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "Kexec-hardboot support");
        fb_msgbox_add_text(-1, 125*DPI_MUL, SIZE_NORMAL, "required to boot this ROM.");
        fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "Use kernel with");
        fb_msgbox_add_text(-1, 215*DPI_MUL, SIZE_NORMAL, "kexec-hardboot support.");
        fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close");

        fb_draw();
        fb_freeze(1);
        set_touch_handlers_mode(HANDLERS_ALL);
        return;
    }

    if((m & MASK_KEXEC) && strchr(rom->name, ' '))
    {
        active_msgbox = fb_create_msgbox(550*DPI_MUL, 360*DPI_MUL, DRED);
        fb_msgbox_add_text(-1, 30*DPI_MUL, SIZE_BIG, "Error");
        fb_msgbox_add_text(-1, 90*DPI_MUL, SIZE_NORMAL, "ROM's name contains spaces");
        fb_msgbox_add_text(-1, 180*DPI_MUL, SIZE_NORMAL, "Remove spaces from ROM's name");
        fb_msgbox_add_text(-1, active_msgbox->h-60*DPI_MUL, SIZE_NORMAL, "Touch anywhere to close");

        fb_draw();
        fb_freeze(1);
        set_touch_handlers_mode(HANDLERS_ALL);
        return;
    }

    pthread_mutex_lock(&exit_code_mutex);
    selected_rom = rom;
    exit_ui_code = UI_EXIT_BOOT_ROM;
    pthread_mutex_unlock(&exit_code_mutex);
}