Tweak/fix(?) Initial/Playback/Loading responses

This commit is contained in:
Allen Hill
2026-06-13 19:42:05 +00:00
parent 6a9b8affa2
commit c591e87c98
+27 -13
View File
@@ -976,6 +976,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
// Unicast to CD changer: bytes are (0x00, from, to, action, [extra...]).
switch (PACK3(b1, b2, b3)) {
case PACK3(dev_COMM_v1, dev_CD_CHANGER, Enable_Function_Req):
[[fallthrough]];
case PACK3(dev_COMM_v2, dev_CD_CHANGER, Enable_Function_Req):
out->is_unicast = true;
out->peripheral_addr = HU_ADDR;
@@ -988,6 +989,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
respond = r_StartPlaying;
break;
case PACK3(dev_COMM_v1, dev_CD_CHANGER, Disable_Function_Req):
[[fallthrough]];
case PACK3(dev_COMM_v2, dev_CD_CHANGER, Disable_Function_Req):
AVCLAN_stopPlaying();
out->length = sizeof(function_change_resp);
@@ -1000,30 +1002,38 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
respond = r_StatusReport;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Initial_Report_Request):
[[fallthrough]];
case PACK3(dev_STATUS, dev_CD_CHANGER, Initial_Report_Request):
out->length = sizeof(cdinitreport_resp);
memcpy(out->data, cdinitreport_resp, sizeof(cdinitreport_resp));
out->data[1] = b1; // respond to device that requested
out->data[0] = 0x00; // Add leading zero-byte for unicast comms
out->length = sizeof(cdinitreport_resp) + 1;
memcpy(&out->data[1], cdinitreport_resp, sizeof(cdinitreport_resp));
out->data[2] = b1; // respond to device that requested
out->is_unicast = true;
out->peripheral_addr = HU_ADDR;
respond = r_Handled;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Playback_Request):
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Playback_Request): [[fallthrough]];
case PACK3(dev_STATUS, dev_CD_CHANGER, Playback_Request):
out->data[1] = b1;
out->data[2] = Playback_Report;
out->length = sizeof(cdstatus_resp);
serializeCDStatus(&out->data[3]);
out->data[0] = 0x00;
out->data[1] = dev_CD_CHANGER;
out->data[2] = b1;
out->data[3] = Playback_Report;
out->length = sizeof(AVCLAN_CD_Status_t) + 4;
serializeCDStatus(&out->data[4]);
out->is_unicast = true;
out->peripheral_addr = HU_ADDR;
respond = r_Handled;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Loading_Request2):
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Loading_Request2): [[fallthrough]];
case PACK3(dev_STATUS, dev_CD_CHANGER, Loading_Request2):
out->length = sizeof(cdloading_resp);
memcpy(out->data, cdloading_resp, sizeof(cdloading_resp));
out->data[1] = b1;
out->data[2] = Loading_Response2;
out->data[0] = 0x00;
out->length = sizeof(cdloading_resp) + 1;
memcpy(&out->data[1], cdloading_resp, sizeof(cdloading_resp));
out->data[2] = b1;
out->data[3] = Loading_Response2;
out->is_unicast = true;
out->peripheral_addr = HU_ADDR;
respond = r_Handled;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Up):
cd_status.state = cd_SEEKING_TRACK;
@@ -1222,6 +1232,10 @@ void AVCLAN_generateStatus(AVCLAN_frame_t *status) {
void AVCLAN_normalizeState() {
// if (cd_status.state != cd_PLAYBACK) {
if (cd_status.mins > 99)
cd_status.mins = 0;
if (cd_status.secs > 99)
cd_status.secs = 0;
cd_status.state = cd_PLAYBACK;
cd_status.flags &= (uint8_t)~(cd_DISK_SCAN | cd_SCAN);
cd_status.flags2 = 0x80;