int cdReadSectors(int lba, int num, void *dest, CdRMode *rmode) { int err; if (CdRead(lba, num, dest, rmode) == 1) { CdSync(0); err = CdGetError(); return (err > 0) ? -err : err; } return -0xFF; }
void *driveStop(void *data) { if (CdStop() == 1) { if (CdSync(0) == 0) { *(int *)data = CdGetError(); } else *(int *)data = -0x100; } else *(int *)data = -0x101; return data; }
void read_manage(void) { int ret; switch (read_stat) { case 0 : /* not reading any data */ break; case 1 : /* command: set location */ CdControlF(CdlSetloc, (u_char *)&fp[read_file_num].pos); read_stat++; break; case 2 : /* waiting: setting location */ if ((ret = CdSync(1, 0)) == CdlComplete) { read_stat++; } else if (ret == CdlDiskError) { read_stat = 1; errcnt++; } break; case 3 : /* command: read data */ if (CdRead(READ_SECTORS, read_des_addr, CdlModeSpeed) == 0) { errcnt++; } else { read_stat++; } break; case 4 : /* waiting: reading data */ read_remain_sector = CdReadSync(1, 0); if (read_remain_sector == 0) { read_stat++; } else if (read_remain_sector == -1) { read_stat = 1; errcnt++; } break; case 5 : /* done */ break; default : break; } }
void *driveStandby(void *data) { int type; if (CdStandby() == 1) { if (CdSync(0) == 0) { *(int *)data = CdGetError(); } else *(int *)data = -0x100; } else *(int *)data = -0x101; do { // wait until drive detected disc type type = CdGetDiskType(); if (DISC_NOT_READY(type)) DelayThread(10 * 1000); } while (DISC_NOT_READY(type)); printf("Standby: Disc type: %02X\n", type); return data; }