Skip to content

Commit

Permalink
Merge branch 'releaseprep'
Browse files Browse the repository at this point in the history
  • Loading branch information
erichelgeson committed Oct 26, 2024
2 parents 6b3f1b2 + b287da5 commit 5e279a5
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 12 deletions.
7 changes: 6 additions & 1 deletion lib/CUEParser/src/CUEParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ const CUETrackInfo *CUEParser::next_track()
}
else if (strncasecmp(m_parse_pos, "PREGAP ", 7) == 0)
{
// Unstored pregap, which offsets the data start on CD but does not
// affect the offset in data file.
const char *time_str = skip_space(m_parse_pos + 7);
m_track_info.unstored_pregap_length = parse_time(time_str);
}
Expand All @@ -104,11 +106,13 @@ const CUETrackInfo *CUEParser::next_track()

if (index == 0)
{
// Stored pregap that is present both on CD and in data file
m_track_info.track_start = time;
got_pause = true;
}
else if (index == 1)
{
// Data content of the track
m_track_info.data_start = time;
got_data = true;
}
Expand All @@ -120,6 +124,7 @@ const CUETrackInfo *CUEParser::next_track()
if (got_data && !got_pause)
{
m_track_info.track_start = m_track_info.data_start;
m_track_info.data_start += m_track_info.unstored_pregap_length;
}

if (got_track && got_data)
Expand Down Expand Up @@ -279,4 +284,4 @@ uint32_t CUEParser::get_sector_length(CUEFileMode filemode, CUETrackMode trackmo
{
return 0;
}
}
}
3 changes: 2 additions & 1 deletion lib/CUEParser/src/CUEParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct CUETrackInfo
// Source file name and file type, and offset to start of track data in bytes.
char filename[CUE_MAX_FILENAME+1];
CUEFileMode file_mode;
uint64_t file_offset; // corresponds to track_start below
uint64_t file_offset; // corresponds to data_start below

// Track number and mode in CD format
int track_number;
Expand All @@ -70,6 +70,7 @@ struct CUETrackInfo
uint32_t data_start;

// LBA for the beginning of the track, which will be INDEX 00 if that is present.
// If there is unstored PREGAP, it's added between track_start and data_start.
// Otherwise this will be INDEX 01 matching data_start above.
uint32_t track_start;
};
Expand Down
57 changes: 55 additions & 2 deletions lib/CUEParser/test/CUEParser_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ FILE "Sound.wav" WAVE
TEST(track->track_mode == CUETrack_AUDIO);
TEST(track->sector_length == 2352);
TEST(track->unstored_pregap_length == 2 * 75);
TEST(track->data_start == start2);
TEST(track->data_start == start2 + 2 * 75);
}

COMMENT("Test TRACK 03 (audio with index 0)");
Expand Down Expand Up @@ -177,10 +177,63 @@ TRACK 03 MODE1/2352
return status;
}

bool test_datatrackpregap()
{
bool status = true;
const char *cue_sheet = R"(
FILE "issue422.bin" BINARY
TRACK 01 AUDIO
INDEX 01 00:00:00
TRACK 02 MODE1/2352
PREGAP 00:02:00
INDEX 01 01:06:19
)";

CUEParser parser(cue_sheet);

COMMENT("test_datatrackpregap()");
COMMENT("Test TRACK 01 (audio)");
const CUETrackInfo *track = parser.next_track();
TEST(track != NULL);
if (track)
{
TEST(strcmp(track->filename, "issue422.bin") == 0);
TEST(track->file_mode == CUEFile_BINARY);
TEST(track->file_offset == 0);
TEST(track->track_number == 1);
TEST(track->track_mode == CUETrack_AUDIO);
TEST(track->sector_length == 2352);
TEST(track->unstored_pregap_length == 0);
TEST(track->data_start == 0);
TEST(track->track_start == 0);
}

COMMENT("Test TRACK 02 (data)");
track = parser.next_track();
TEST(track != NULL);
if (track)
{
TEST(strcmp(track->filename, "issue422.bin") == 0);
TEST(track->file_mode == CUEFile_BINARY);
TEST(track->file_offset == 0xB254B0);
TEST(track->track_number == 2);
TEST(track->track_mode == CUETrack_MODE1_2352);
TEST(track->sector_length == 2352);
TEST(track->unstored_pregap_length == 75 * 2);
TEST(track->data_start == (60 + 6 + 2) * 75 + 19);
TEST(track->track_start == (60 + 6) * 75 + 19);
}

track = parser.next_track();
TEST(track == NULL);

return status;
}


int main()
{
if (test_basics() && test_datatracks())
if (test_basics() && test_datatracks() && test_datatrackpregap())
{
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion lib/CUEParser/test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ all: CUEParser_test
./CUEParser_test

CUEParser_test: CUEParser_test.cpp ../src/CUEParser.cpp
g++ -Wall -Wextra -o $@ -I ../src $^
g++ -Wall -Wextra -g -ggdb -o $@ -I ../src $^
4 changes: 2 additions & 2 deletions src/BlueSCSI_cdrom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ static uint32_t getLeadOutLBA(const CUETrackInfo* lasttrack)
image_config_t &img = *(image_config_t*)scsiDev.target->cfg;
uint32_t lastTrackBlocks = (img.file.size() - lasttrack->file_offset)
/ lasttrack->sector_length;
return lasttrack->track_start + lastTrackBlocks;
return lasttrack->data_start + lastTrackBlocks;
}
else
{
Expand Down Expand Up @@ -1461,7 +1461,7 @@ static void doReadCD(uint32_t lba, uint32_t length, uint8_t sector_type,
getTrackFromLBA(parser, lba, &trackinfo);

// Figure out the data offset in the file
uint64_t offset = trackinfo.file_offset + trackinfo.sector_length * (lba - trackinfo.track_start);
uint64_t offset = trackinfo.file_offset + trackinfo.sector_length * (lba - trackinfo.data_start);
debuglog("------ Read CD: ", (int)length, " sectors starting at ", (int)lba,
", track number ", trackinfo.track_number, ", sector size ", (int)trackinfo.sector_length,
", main channel ", main_channel, ", sub channel ", sub_channel,
Expand Down
2 changes: 1 addition & 1 deletion src/BlueSCSI_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include <BlueSCSI_platform.h>

// Use variables for version number
#define FW_VER_NUM "2024.09.16"
#define FW_VER_NUM "2024.10.27"
#define FW_VER_SUFFIX "dev" // 3 char only - 'dev' or 'rel'
#define BLUESCSI_FW_VERSION FW_VER_NUM "-" FW_VER_SUFFIX

Expand Down
9 changes: 5 additions & 4 deletions src/BlueSCSI_initiator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ static void scsiInitiatorUpdateLed()
// Update status indicator, the led blinks every 5 seconds and is on the longer the more data has been transferred
const int period = 256;
int phase = (millis() % period);
int duty = g_initiator_state.sectors_done * period / g_initiator_state.sectorcount;
int duty = (int64_t)g_initiator_state.sectors_done * period / g_initiator_state.sectorcount;

// Minimum and maximum time to verify that the blink is visible
if (duty < 50) duty = 50;
Expand Down Expand Up @@ -372,9 +372,10 @@ void scsiInitiatorMainLoop()
g_initiator_state.target_file.flush();

int speed_kbps = numtoread * g_initiator_state.sectorsize / (millis() - time_start);
log_f("SCSI read succeeded, sectors done: %d / %d speed %d kB/s - %.2f%%",
g_initiator_state.sectors_done, g_initiator_state.sectorcount, speed_kbps,
(float)(((float)g_initiator_state.sectors_done / (float)g_initiator_state.sectorcount) * 100.0));
log("SCSI read succeeded, sectors done: ",
(int)g_initiator_state.sectors_done, " / ", (int)g_initiator_state.sectorcount,
" speed ", speed_kbps, " kB/s - ",
(int)(100 * (int64_t)g_initiator_state.sectors_done / g_initiator_state.sectorcount), "%");
}
}
}
Expand Down

0 comments on commit 5e279a5

Please sign in to comment.