move meta data printing to disc.c

This commit is contained in:
Anthony Pesch 2017-07-18 21:09:01 -04:00
parent 38f7fe536a
commit 2f2f5de719
3 changed files with 59 additions and 47 deletions

View File

@ -5,6 +5,37 @@
#include "guest/gdrom/gdi.h"
#include "guest/gdrom/iso.h"
int disc_read_bytes(struct disc *disc, int fad, int len, void *dst,
int dst_size) {
CHECK_LE(len, dst_size);
uint8_t tmp[DISC_MAX_SECTOR_SIZE];
int rem = len;
while (rem) {
int n = disc->read_sectors(disc, fad, 1, GD_SECTOR_ANY, GD_MASK_DATA, tmp,
sizeof(tmp));
CHECK(n);
/* don't overrun */
n = MIN(n, rem);
memcpy(dst, tmp, n);
rem -= n;
dst += n;
fad++;
}
return len;
}
int disc_read_sectors(struct disc *disc, int fad, int num_sectors,
int sector_fmt, int sector_mask, void *dst,
int dst_size) {
return disc->read_sectors(disc, fad, num_sectors, sector_fmt, sector_mask,
dst, dst_size);
}
int disc_find_file(struct disc *disc, const char *filename, int *fad,
int *len) {
uint8_t tmp[0x10000];
@ -62,37 +93,6 @@ int disc_find_file(struct disc *disc, const char *filename, int *fad,
return 1;
}
int disc_read_bytes(struct disc *disc, int fad, int len, void *dst,
int dst_size) {
CHECK_LE(len, dst_size);
uint8_t tmp[DISC_MAX_SECTOR_SIZE];
int rem = len;
while (rem) {
int n = disc->read_sectors(disc, fad, 1, GD_SECTOR_ANY, GD_MASK_DATA, tmp,
sizeof(tmp));
CHECK(n);
/* don't overrun */
n = MIN(n, rem);
memcpy(dst, tmp, n);
rem -= n;
dst += n;
fad++;
}
return len;
}
int disc_read_sectors(struct disc *disc, int fad, int num_sectors,
int sector_fmt, int sector_mask, void *dst,
int dst_size) {
return disc->read_sectors(disc, fad, num_sectors, sector_fmt, sector_mask,
dst, dst_size);
}
void disc_get_toc(struct disc *disc, int area, struct track **first_track,
struct track **last_track, int *leadin_fad,
int *leadout_fad) {
@ -158,13 +158,27 @@ void disc_get_meta(struct disc *disc, struct disc_meta *meta) {
}
struct disc *disc_create(const char *filename) {
struct disc *disc = NULL;
if (strstr(filename, ".cdi")) {
return cdi_create(filename);
disc = cdi_create(filename);
} else if (strstr(filename, ".gdi")) {
disc = gdi_create(filename);
}
if (strstr(filename, ".gdi")) {
return gdi_create(filename);
if (disc) {
/* print meta info */
struct disc_meta meta;
disc_get_meta(disc, &meta);
char name[256];
char version[16];
char id[16];
strncpy_trim_spaces(name, meta.name, sizeof(meta.name));
strncpy_trim_spaces(version, meta.version, sizeof(meta.version));
strncpy_trim_spaces(id, meta.id, sizeof(meta.id));
LOG_INFO("disc_create %s %s - %s", name, version, id);
}
return NULL;
return disc;
}

View File

@ -500,6 +500,15 @@ int gdrom_find_file(struct gdrom *gd, const char *filename, int *fad,
return disc_find_file(gd->disc, filename, fad, len);
}
void gdrom_get_meta(struct gdrom *gd, struct disc_meta *meta) {
if (!gd->disc) {
LOG_WARNING("gdrom_get_meta failed, no disc");
return;
}
return disc_get_meta(gd->disc, meta);
}
void gdrom_get_subcode(struct gdrom *gd, int format, uint8_t *data, int size) {
CHECK_NOTNULL(gd->disc);
CHECK_GE(size, GD_SPI_SCD_SIZE);
@ -681,18 +690,6 @@ void gdrom_set_disc(struct gdrom *gd, struct disc *disc) {
}
gd->disc = disc;
/* print meta info */
struct disc_meta meta;
disc_get_meta(gd->disc, &meta);
char name[256];
char version[16];
char id[16];
strncpy_trim_spaces(name, meta.name, sizeof(meta.name));
strncpy_trim_spaces(version, meta.version, sizeof(meta.version));
strncpy_trim_spaces(id, meta.id, sizeof(meta.id));
LOG_INFO("gdrom_set_disc %s %s - %s", name, version, id);
}
/* perform "soft reset" of internal state */

View File

@ -23,6 +23,7 @@ void gdrom_get_toc(struct gdrom *gd, int area, struct gd_spi_toc *toc);
void gdrom_get_session(struct gdrom *gd, int session,
struct gd_spi_session *ses);
void gdrom_get_subcode(struct gdrom *gd, int format, uint8_t *data, int size);
void gdrom_get_meta(struct gdrom *gd, struct disc_meta *meta);
int gdrom_find_file(struct gdrom *gd, const char *filename, int *fad, int *len);
int gdrom_read_sectors(struct gdrom *gd, int fad, int num_sectors, int fmt,
int mask, uint8_t *dst, int dst_size);