void BiosFlasher_OnOperationProgress(OperationState_t state, float progress) { char msg[64]; // TODO: Check overflow memset(msg, 0, sizeof(msg)); switch(state) { case eErasing: sprintf(msg, "Erasing: %d%%", (int)(progress * 100)); break; case eWriting: sprintf(msg, "Writing: %d%%", (int)(progress * 100)); break; case eReading: sprintf(msg, "Reading: %d%%", (int)(progress * 100)); break; case eNone: case eCompare: break; }; GUI_LabelSetText(self.m_LabelProgress, msg); GUI_ProgressBarSetPosition(self.m_ProgressBar, progress); }
void BiosFlasher_EnableMainPage() { if (GUI_CardStackGetIndex(self.pages) != 0) { ScreenFadeOut(); thd_sleep(200); GUI_CardStackShowIndex(self.pages, 0); ScreenFadeIn(); } bflash_dev_t* dev = BiosFlasher_DetectFlashChip(); char info[64]; sprintf(info, "Model: %s", dev->name); GUI_LabelSetText(BiosFlasher_GetWidget("label_flash_name"), info); sprintf(info, "Size: %dKb", dev->size); GUI_LabelSetText(BiosFlasher_GetWidget("label_flash_size"), info); sprintf(info, "Voltage: %dV", (dev->flags & F_FLASH_LOGIC_3V) ? 3 : 5); GUI_LabelSetText(BiosFlasher_GetWidget("label_flash_voltage"), info); sprintf(info, "Access: %s", (dev->flags & F_FLASH_PROGRAM) ? "Read/Write" : "Read only"); GUI_LabelSetText(BiosFlasher_GetWidget("label_flash_access"), info); }
void Speedtest_Run(GUI_Widget *widget) { uint8 *buff = (uint8*)0x8c400000; size_t buff_size = 0x10000; int size = 0x800000, cnt = 0, rs; int64 time_before, time_after; uint32 t; double speed; file_t fd; int read_only = 0; char name[64]; char result[128]; const char *wname = GUI_ObjectGetName((GUI_Object *)widget); if(!strncasecmp(wname, "/cd", 3)) { read_only = 1; snprintf(name, sizeof(name), "%s/1DS_CORE.BIN", wname); if(FileExists(name)) { goto readtest; } else { snprintf(name, sizeof(name), "%s/1ST_READ.BIN", wname); goto readtest; } } show_status_ok("Testing WRITE speed..."); GUI_LabelSetText(self.speedwr, "..."); GUI_LabelSetText(self.speedrd, " "); snprintf(name, sizeof(name), "%s/%s.tst", wname, lib_get_name()); if(FileExists(name)) { fs_unlink(name); } /* WRITE TEST */ fd = fs_open(name, O_CREAT | O_WRONLY); if (fd == FILEHND_INVALID) { ds_printf("DS_ERROR: Can't open %s for write: %d\n", name, errno); show_status_error("Can't open file for write"); return; } ShutdownVideoThread(); time_before = timer_ms_gettime64(); while(cnt < size) { rs = fs_write(fd, buff, buff_size); if(rs <= 0) { fs_close(fd); InitVideoThread(); ds_printf("DS_ERROR: Can't write to file: %d\n", errno); show_status_error("Can't write to file"); return; } buff += rs; cnt += rs; } time_after = timer_ms_gettime64(); InitVideoThread(); t = (uint32)(time_after - time_before); speed = size / ((float)t / 1000); fs_close(fd); snprintf(result, sizeof(result), "Write speed %.2f Kbytes/s (%.2f Mbit/s) Time: %ld ms", speed / 1024, ((speed / 1024) / 1024) * 8, t); GUI_LabelSetText(self.speedwr, result); show_status_ok("Complete!"); ds_printf("DS_OK: Complete!\n" " Test: write\n Time: %ld ms\n" " Speed: %.2f Kbytes/s (%.2f Mbit/s)\n" " Size: %d Kb\n Buff: %d Kb\n", t, speed / 1024, ((speed / 1024) / 1024) * 8, size / 1024, buff_size / 1024); readtest: show_status_ok("Testing READ speed..."); GUI_LabelSetText(self.speedrd, "..."); /* READ TEST */ fd = fs_open(name, O_RDONLY); if (fd == FILEHND_INVALID) { ds_printf("DS_ERROR: Can't open %s for read: %d\n", name, errno); show_status_error("Can't open file for read"); return; } if(read_only) { GUI_LabelSetText(self.speedwr, "Write test passed"); /* Reset ISO9660 filesystem cache */ fs_ioctl(fd, NULL, 0); fs_close(fd); fd = fs_open(name, O_RDONLY); } time_before = time_after = t = cnt = 0; speed = 0.0f; size = fs_total(fd); buff = rd_buff; ShutdownVideoThread(); time_before = timer_ms_gettime64(); while(cnt < size) { rs = fs_read(fd, buff, buff_size); if(rs <= 0) { fs_close(fd); InitVideoThread(); ds_printf("DS_ERROR: Can't read file: %d\n", errno); show_status_error("Can't read file"); return; } cnt += rs; } time_after = timer_ms_gettime64(); t = (uint32)(time_after - time_before); speed = size / ((float)t / 1000); fs_close(fd); if(!read_only) { fs_unlink(name); } else { cdrom_spin_down(); } snprintf(result, sizeof(result), "Read speed %.2f Kbytes/s (%.2f Mbit/s) Time: %ld ms", speed / 1024, ((speed / 1024) / 1024) * 8, t); InitVideoThread(); ds_printf("DS_OK: Complete!\n" " Test: read\n Time: %ld ms\n" " Speed: %.2f Kbytes/s (%.2f Mbit/s)\n" " Size: %d Kb\n Buff: %d Kb\n", t, speed / 1024, ((speed / 1024) / 1024) * 8, size / 1024, buff_size / 1024); GUI_LabelSetText(self.speedrd, result); show_status_ok("Complete!"); }
static void show_status_error(char *msg) { GUI_LabelSetTextColor(self.status, 255, 0, 0); GUI_LabelSetText(self.status, msg); }
static void show_status_ok(char *msg) { GUI_LabelSetTextColor(self.status, 28, 227, 70); GUI_LabelSetText(self.status, msg); ScreenWaitUpdate(); }
void gd_ripper_StartRip() { file_t fd; CDROM_TOC toc ; int status, disc_type ,cdcr ,start ,s_end ,nsec ,type ,tn ,session,terr=0; char dst_folder[MAX_FN_LEN]; char dst_file[MAX_FN_LEN]; char riplabel[64]; char text[MAX_FN_LEN]; uint64 stoptimer , starttimer , riptime; starttimer = timer_ms_gettime64 (); // timer cdrom_reinit(); snprintf(text ,MAX_FN_LEN,"%s", GUI_TextEntryGetText(self.gname)); if(GUI_WidgetGetState(self.sd_c)) { snprintf(dst_folder, MAX_FN_LEN, "/sd/%s", text); }else if(GUI_WidgetGetState(self.hdd_c)) { snprintf(dst_folder, MAX_FN_LEN, "/ide/%s", text); }else if(GUI_WidgetGetState(self.net_c)) { snprintf(dst_folder, MAX_FN_LEN, "/net/%s", text); } //ds_printf("Dst file1 %s\n" ,dst_folder); getstatus: if((cdcr = cdrom_get_status(&status, &disc_type)) != ERR_OK) { switch (cdcr){ case ERR_NO_DISC : ds_printf("DS_ERROR: Disk not inserted\n"); return; case ERR_DISC_CHG : cdrom_reinit(); goto getstatus; case CD_STATUS_BUSY : thd_sleep(200); goto getstatus; case CD_STATUS_SEEKING : thd_sleep(200); goto getstatus; case CD_STATUS_SCANNING : thd_sleep(200); goto getstatus; default: ds_printf("DS_ERROR: GD-rom error\n"); return; } } if (disc_type == CD_CDROM_XA){ rname: snprintf(dst_file,MAX_FN_LEN, "%s.iso", dst_folder); if ((fd=fs_open(dst_file , O_RDONLY)) != FILEHND_INVALID) { fs_close(fd); strcpy(dst_file,"\0"); strcat(dst_folder , "0"); goto rname ; } else disc_type = 1; } else if (disc_type == CD_GDROM){ rname1: if ((fd=fs_open (dst_folder , O_DIR)) != FILEHND_INVALID) { fs_close(fd); strcat(dst_folder , "0"); goto rname1 ; } else {strcpy(dst_file,"\0"); snprintf(dst_file,MAX_FN_LEN,"%s", dst_folder); disc_type = 2; fs_mkdir(dst_file); } while(cdrom_read_toc(&toc, 1) != CMD_OK) { terr++; cdrom_reinit(); if (terr > 100){ ds_printf("DS_ERROR: Toc read error for gdlast\n"); fs_rmdir(dst_folder); return; } } terr=0; self.lastgdtrack = TOC_TRACK(toc.last); } else { ds_printf("DS_ERROR: This is not game disk\nInserted %d disk\n",disc_type); return; } //ds_printf("Dst file %s\n" ,dst_file); for (session=0; session < disc_type; session++) { cdrom_set_sector_size(2048); while(cdrom_read_toc(&toc, session) != CMD_OK) { terr++; if(terr==5) cdrom_reinit(); thd_sleep(500); if (terr > 10) { ds_printf("DS_ERROR: Toc read error\n"); if (disc_type == 1) { if(fs_unlink(dst_file) != 0) ds_printf("Error delete file: %s\n" ,dst_file); }else { if ((fd=fs_open (dst_folder , O_DIR)) == FILEHND_INVALID) { ds_printf("Error folder '%s' not found\n" ,dst_folder); return; } dirent_t *dir; while ((dir = fs_readdir(fd))){ if (!strcmp(dir->name,".") || !strcmp(dir->name,"..")) continue; strcpy(dst_file,"\0"); snprintf(dst_file, MAX_FN_LEN, "%s/%s", dst_folder, dir->name); fs_unlink(dst_file); } fs_close(fd); fs_rmdir(dst_folder); } return; } } terr = 0; int first = TOC_TRACK(toc.first); int last = TOC_TRACK(toc.last); for (tn=first; tn <= last; tn++ ) { if (disc_type == 1) tn = last; type = TOC_CTRL(toc.entry[tn-1]); if (disc_type == 2) { strcpy(dst_file,"\0"); snprintf(dst_file,MAX_FN_LEN,"%s/track%02d.%s", dst_folder, tn, (type == 4 ? "iso" : "raw")); } start = TOC_LBA(toc.entry[tn-1]); s_end = TOC_LBA((tn == last ? toc.leadout_sector : toc.entry[tn])); nsec = s_end - start; if (disc_type == 1 && type == 4) nsec -= 2 ; else if (session==1 && tn != last && type != TOC_CTRL(toc.entry[tn])) nsec -= 150; else if (session==0 && type == 4) nsec -= 150; if (disc_type == 2 && session == 0) { strcpy(riplabel,"\0"); sprintf(riplabel,"Track %d of %d\n",tn ,self.lastgdtrack ); } else if (disc_type == 2 && session == 1 && tn != self.lastgdtrack) { strcpy(riplabel,"\0"); sprintf(riplabel,"Track %d of %d\n",tn ,self.lastgdtrack ); } else { strcpy(riplabel,"\0"); sprintf(riplabel,"Last track\n"); } GUI_LabelSetText(self.track_label, riplabel); if (rip_sec(tn, start, nsec, type, dst_file, disc_type) != CMD_OK) { GUI_LabelSetText(self.track_label, " "); stoptimer = timer_ms_gettime64 (); // timer GUI_ProgressBarSetPosition(self.pbar, 0.0); cdrom_spin_down(); if (disc_type == 1) { if(fs_unlink(dst_file) != 0) ds_printf("Error delete file: %s\n" ,dst_file); } else { if ((fd=fs_open (dst_folder , O_DIR)) == FILEHND_INVALID) { ds_printf("Error folder '%s' not found\n" ,dst_folder); return; } dirent_t *dir; while ((dir = fs_readdir(fd))){ if (!strcmp(dir->name,".") || !strcmp(dir->name,"..")) continue; strcpy(dst_file,"\0"); snprintf(dst_file, MAX_FN_LEN, "%s/%s", dst_folder, dir->name); fs_unlink(dst_file); } fs_close(fd); fs_rmdir(dst_folder); } return ; } GUI_LabelSetText(self.track_label, " "); GUI_ProgressBarSetPosition(self.pbar, 0.0); } } GUI_LabelSetText(self.track_label, " "); GUI_WidgetMarkChanged(self.app->body); if (disc_type == 2){ if (gdfiles(dst_folder, dst_file, text) != CMD_OK){ cdrom_spin_down(); if ((fd=fs_open (dst_folder , O_DIR)) == FILEHND_INVALID) { ds_printf("Error folder '%s' not found\n" ,dst_folder); return; } dirent_t *dir; while ((dir = fs_readdir(fd))){ if (!strcmp(dir->name,".") || !strcmp(dir->name,"..")) continue; strcpy(dst_file,"\0"); snprintf(dst_file, MAX_FN_LEN, "%s/%s", dst_folder, dir->name); fs_unlink(dst_file); } fs_close(fd); fs_rmdir(dst_folder); return; } } GUI_ProgressBarSetPosition(self.pbar, 0.0); cdrom_spin_down(); stoptimer = timer_ms_gettime64 (); // timer riptime = stoptimer - starttimer; int ripmin = riptime / 60000 ; int ripsec = riptime % 60 ; ds_printf("DS_OK: End ripping. Save at %d:%d\n",ripmin,ripsec); }
void BiosFlasher_EnableResultPage(int result, const char* fileName) { ScreenFadeOut(); thd_sleep(200); GUI_CardStackShowIndex(self.pages, 3); ScreenFadeIn(); char title[32]; char msg[64]; // TODO: Check overflow memset(title, 0, sizeof(title)); memset(msg, 0, sizeof(msg)); switch(self.m_CurrentOperation) { case eWriting: if (result == eSuccess) { sprintf(title, "Done"); sprintf(msg, "Writing successful"); } else { sprintf(title, "Error"); sprintf(msg, "Writing fail. Status code: %d", result); } break; case eReading: if (result == eSuccess) { sprintf(title, "Done"); sprintf(msg, "Reading successful. File stored at file %s", fileName); } else { sprintf(title, "Error"); sprintf(msg, "Reading fail. Status code: %d", result); } break; case eCompare: if (result == eSuccess) { sprintf(title, "Done"); sprintf(msg, "Comare successful. Flash data match"); } else if (result == eDataMissmatch) { sprintf(title, "Done"); sprintf(msg, "Comare successful. Flash data missmatch"); } else { sprintf(title, "Error"); sprintf(msg, "Comaring fail. Status code: %d", result); } break; case eNone: case eErasing: break; }; GUI_LabelSetText(BiosFlasher_GetWidget("result_title_text"), title); GUI_LabelSetText(BiosFlasher_GetWidget("result_desc_text"), msg); }