mirror of https://github.com/inolen/redream.git
move meta data printing to disc.c
This commit is contained in:
parent
38f7fe536a
commit
2f2f5de719
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue