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. // Emulate a single play/pause button press on the source device.
void AVCLAN_micPlayPause() { mic_pulse(1); } void AVCLAN_micPlayPause() { mic_pulse(1); }
// Emulate a skip-forward button press: H / L / H. // Emulate skip-forward/backward button presses
void AVCLAN_micSkip() { mic_pulse(3); } 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. /* 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; respond = r_Handled;
break; break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Up): case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Up):
AVCLAN_micSkip();
cd_status.state = cd_SEEKING_TRACK; cd_status.state = cd_SEEKING_TRACK;
if (cd_status.track < 98) if (cd_status.track < 98)
++cd_status.track; ++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.secs = 0x7f;
cd_status.flags2 = 0xc0; cd_status.flags2 = 0xc0;
AVCLAN_generateStatus(out, true, dev_CMD_SW); AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipForward();
respond = r_TrackChange; respond = r_TrackChange;
break; break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Seek_Down): 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.secs = 0x7f;
cd_status.flags2 = 0xc0; cd_status.flags2 = 0xc0;
AVCLAN_generateStatus(out, true, dev_CMD_SW); AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipBackward();
respond = r_TrackChange; respond = r_TrackChange;
break; break;
case PACK3(dev_CMD_SW, dev_CD_CHANGER, Track_Fast_Forward): { 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; ++cd_status.mins;
} }
AVCLAN_generateStatus(out, true, dev_CMD_SW); AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkip(); AVCLAN_micSkipForward();
resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is
// ~1 sec from now // ~1 sec from now
respond = r_Handled; respond = r_Handled;
@@ -1260,6 +1262,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
} else } else
cd_status.secs -= 15; cd_status.secs -= 15;
AVCLAN_generateStatus(out, true, dev_CMD_SW); AVCLAN_generateStatus(out, true, dev_CMD_SW);
AVCLAN_micSkipBackward();
resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is resetStatusTimer(); // Skipped to a whole/round sec; ensure next tick is
// ~1 sec from now // ~1 sec from now
respond = r_Handled; respond = r_Handled;
+2 -1
View File
@@ -226,7 +226,8 @@ void AVCLAN_normalizeState();
#ifndef NDEBUG #ifndef NDEBUG
bool AVCLAN_micToggle(); bool AVCLAN_micToggle();
void AVCLAN_micPlayPause(); void AVCLAN_micPlayPause();
void AVCLAN_micSkip(); void AVCLAN_micSkipForward();
void AVCLAN_micSkipBackward();
bool AVCLAN_isMediaFunctioning(); bool AVCLAN_isMediaFunctioning();
void AVCLan_Measure(); void AVCLan_Measure();
#endif #endif
+9 -2
View File
@@ -269,7 +269,13 @@ int main() {
break; break;
case 's': case 's':
RS232_Print("Skip begin ... "); 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()) {} while (AVCLAN_isMediaFunctioning()) {}
RS232_Print("end\n"); RS232_Print("end\n");
break; break;
@@ -430,7 +436,8 @@ void print_help() {
"g - Toggle MIC_CONTROL high/low\n" "g - Toggle MIC_CONTROL high/low\n"
"p - double MIC play/pause pulse\n" // Confirm pulse function and "p - double MIC play/pause pulse\n" // Confirm pulse function and
// refractory timing // 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" "M - Measure bit-timing (pulse-widths and periods)\n"
#endif #endif
"? - Print this message\n"); "? - Print this message\n");