mirror of
https://github.com/halleysfifthinc/AVCLAN-Mockingboard.git
synced 2026-08-07 01:13:18 +00:00
Support fast-forward/rewind
This commit is contained in:
+42
-9
@@ -987,23 +987,28 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
out->peripheral_addr = HU_ADDR;
|
out->peripheral_addr = HU_ADDR;
|
||||||
respond = r_StatusReport;
|
respond = r_StatusReport;
|
||||||
break;
|
break;
|
||||||
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Eject):
|
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Eject): {
|
||||||
// "Eject" label is multiply wrong; proper meaning unclear:
|
// "Eject" label is multiply wrong; proper meaning unclear:
|
||||||
// - First observed on initial multiple presses of "CD" button,
|
// - First observed on initial multiple presses of "CD" button,
|
||||||
// triggering (after {0x00, dev_CD_CHANGER, dev_COMM_v1, Insertion,
|
// triggering (after {0x00, dev_CD_CHANGER, dev_COMM_v1, Insertion,
|
||||||
// 0x01} response) proper activation of mockingboard/cd-changer.
|
// 0x01} response) proper activation of mockingboard/cd-changer.
|
||||||
// - Subsequently observed when pressing (technically
|
// - Subsequently observed when pressing (technically
|
||||||
// releasing?) the fast-forward button and rewind
|
// releasing?) the fast-forward button and rewind
|
||||||
out->is_unicast = true;
|
if (cd_status.state | cd_SEEKING) { // FF/RW button released
|
||||||
out->peripheral_addr = HU_ADDR;
|
cd_status.state &= ~cd_SEEKING;
|
||||||
{
|
} else {
|
||||||
const uint8_t msg[] = {0x00, dev_CD_CHANGER, dev_COMM_v1, Insertion,
|
out->is_unicast = true;
|
||||||
0x01};
|
out->peripheral_addr = HU_ADDR;
|
||||||
out->length = sizeof(msg);
|
{
|
||||||
memcpy(out->data, msg, sizeof(msg));
|
const uint8_t msg[] = {0x00, dev_CD_CHANGER, dev_CMD_SW, Insertion,
|
||||||
|
0x01};
|
||||||
|
out->length = sizeof(msg);
|
||||||
|
memcpy(out->data, msg, sizeof(msg));
|
||||||
|
}
|
||||||
|
respond = r_Handled;
|
||||||
}
|
}
|
||||||
respond = r_Handled;
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Initial_Report_Request):
|
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Initial_Report_Request):
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case PACK3(dev_STATUS, dev_CD_CHANGER, Initial_Report_Request):
|
case PACK3(dev_STATUS, dev_CD_CHANGER, Initial_Report_Request):
|
||||||
@@ -1065,6 +1070,34 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
|
|||||||
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
||||||
respond = r_TrackChange;
|
respond = r_TrackChange;
|
||||||
break;
|
break;
|
||||||
|
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Fast_Forward): {
|
||||||
|
cd_status.state |= cd_SEEKING;
|
||||||
|
*cd_Time_Sec += 15;
|
||||||
|
if (*cd_Time_Sec > 60) {
|
||||||
|
*cd_Time_Sec -= 60;
|
||||||
|
++*cd_Time_Min;
|
||||||
|
}
|
||||||
|
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
||||||
|
respond = r_Handled;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Rewind): {
|
||||||
|
cd_status.state |= cd_SEEKING;
|
||||||
|
if (*cd_Time_Sec < 15) {
|
||||||
|
if (*cd_Time_Min > 0) {
|
||||||
|
uint8_t d = 15 - *cd_Time_Sec;
|
||||||
|
*cd_Time_Sec = 60 - d;
|
||||||
|
--*cd_Time_Min;
|
||||||
|
} else {
|
||||||
|
*cd_Time_Min = 0;
|
||||||
|
*cd_Time_Sec = 0;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
*cd_Time_Sec -= 15;
|
||||||
|
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
||||||
|
respond = r_Handled;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case PACK3(dev_CMD_SW, dev_CD_CHANGER, CD_Enable_Random):
|
case PACK3(dev_CMD_SW, dev_CD_CHANGER, CD_Enable_Random):
|
||||||
cd_status.flags |= cd_RANDOM;
|
cd_status.flags |= cd_RANDOM;
|
||||||
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
AVCLAN_generateStatus(out, true, dev_CMD_SW);
|
||||||
|
|||||||
Reference in New Issue
Block a user