Add triple-press for skip back

This commit is contained in:
Allen Hill
2026-06-21 14:24:02 -07:00
parent c8a3797b82
commit 2a195972a8
3 changed files with 18 additions and 7 deletions
+7 -4
View File
@@ -218,8 +218,9 @@ ISR(TCA0_OVF_vect) { mic_timer_isr_body(false); }
// Emulate a single play/pause button press on the source device.
void AVCLAN_micPlayPause() { mic_pulse(1); }
// Emulate a skip-forward button press: H / L / H.
void AVCLAN_micSkip() { mic_pulse(3); }
// Emulate skip-forward/backward button presses
void AVCLAN_micSkipForward() { mic_pulse(3); } // double-press
void AVCLAN_micSkipBackward() { mic_pulse(5); } // triple-press
/* Disable non-read related interrupts (USART RX, PIT, TCA) during AVCLAN reads.
*/
@@ -1205,7 +1206,6 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
respond = r_Handled;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Up):
AVCLAN_micSkip();
cd_status.state = cd_SEEKING_TRACK;
if (cd_status.track < 98)
++cd_status.track;
@@ -1215,6 +1215,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
cd_status.secs = 0x7f;
cd_status.flags2 = 0xc0;
AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipForward();
respond = r_TrackChange;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Down):
@@ -1230,6 +1231,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
cd_status.secs = 0x7f;
cd_status.flags2 = 0xc0;
AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipBackward();
respond = r_TrackChange;
break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Fast_Forward): {
@@ -1240,7 +1242,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
++cd_status.mins;
}
AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkip();
AVCLAN_micSkipForward();
resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is
// ~1 sec from now
respond = r_Handled;
@@ -1260,6 +1262,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
} else
cd_status.secs -= 15;
AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipBackward();
resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is
// ~1 sec from now
respond = r_Handled;
+2 -1
View File
@@ -226,7 +226,8 @@ void AVCLAN_normalizeState();
#ifndef NDEBUG
bool AVCLAN_micToggle();
void AVCLAN_micPlayPause();
void AVCLAN_micSkip();
void AVCLAN_micSkipForward();
void AVCLAN_micSkipBackward();
bool AVCLAN_isMediaFunctioning();
void AVCLan_Measure();
#endif
+9 -2
View File
@@ -269,7 +269,13 @@ int main() {
break;
case 's':
RS232_Print("Skip begin ... ");
AVCLAN_micSkip();
AVCLAN_micSkipForward();
while (AVCLAN_isMediaFunctioning()) {}
RS232_Print("end\n");
break;
case 'b':
RS232_Print("Skip back begin ... ");
AVCLAN_micSkipBackward();
while (AVCLAN_isMediaFunctioning()) {}
RS232_Print("end\n");
break;
@@ -430,7 +436,8 @@ void print_help() {
"g - Toggle MIC_CONTROL high/low\n"
"p - double MIC play/pause pulse\n" // Confirm pulse function and
// refractory timing
"s - MIC skip pulse\n"
"s - MIC skip forward\n"
"b - MIC skip backward\n"
"M - Measure bit-timing (pulse-widths and periods)\n"
#endif
"? - Print this message\n");