Fix broadcasting messages and revert Playback_Status reports to broadcast

This commit is contained in:
Allen Hill
2026-07-06 20:28:59 -07:00
parent 9fd8c5636e
commit 0664c1e7bd
2 changed files with 10 additions and 7 deletions
+5 -2
View File
@@ -82,8 +82,11 @@ public:
Error::Send send(T bits, with_ack_t /*tag*/, bool expect_ack) { Error::Send send(T bits, with_ack_t /*tag*/, bool expect_ack) {
send<N>(bits, with_parity); send<N>(bits, with_parity);
if (expect_ack && !read_ACK()) if (expect_ack) {
return Send::NAK; if (!read_ACK())
return Send::NAK;
} else
sendbits<1>(1U); // still needs to fill the ack bit slot
return Send{0}; return Send{0};
}; };
+5 -5
View File
@@ -300,12 +300,12 @@ void CDChanger::react(Frame *out, detail::Error::Send err) {
[[fallthrough]]; [[fallthrough]];
case r_NormalizeState: case r_NormalizeState:
normalizeState(); normalizeState();
generateStatus(out, true, Device::STATUS); generateStatus(out, false, Device::STATUS);
out->reaction = r_SendOnly; out->reaction = r_SendOnly;
break; break;
case r_StartPlaying: case r_StartPlaying:
normalizeState(); normalizeState();
generateStatus(out, true, Device::STATUS); generateStatus(out, false, Device::STATUS);
out->reaction = r_BeganPlaying; out->reaction = r_BeganPlaying;
break; break;
case r_BeganPlaying: case r_BeganPlaying:
@@ -313,7 +313,7 @@ void CDChanger::react(Frame *out, detail::Error::Send err) {
out->reaction = r_Nothing; out->reaction = r_Nothing;
break; break;
case r_StatusReport: case r_StatusReport:
generateStatus(out, true, Device::STATUS); generateStatus(out, false, Device::STATUS);
out->reaction = r_SendOnly; out->reaction = r_SendOnly;
break; break;
case r_SendOnly: [[fallthrough]]; case r_SendOnly: [[fallthrough]];
@@ -330,7 +330,7 @@ void CDChanger::enable(Frame *out) {
secs = 0; secs = 0;
state = SEEKING | SEEKING_TRACK; state = SEEKING | SEEKING_TRACK;
flags2 = 0xc0; flags2 = 0xc0;
generateStatus(out, true, Device::STATUS); generateStatus(out, false, Device::STATUS);
out->reaction = r_StartPlaying; out->reaction = r_StartPlaying;
} }
} }
@@ -340,7 +340,7 @@ void CDChanger::resolvepending() { cdtimer_clear(); }
void CDChanger::emit(Frame *out, uint16_t peripheral) { void CDChanger::emit(Frame *out, uint16_t peripheral) {
out->peripheral_addr = peripheral; out->peripheral_addr = peripheral;
generateStatus(out, true, Device::STATUS); generateStatus(out, false, Device::STATUS);
out->reaction = r_StateReport; out->reaction = r_StateReport;
} }