diff --git a/src/avclandrv.c b/src/avclandrv.c index 57fd947..02f9c2f 100644 --- a/src/avclandrv.c +++ b/src/avclandrv.c @@ -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; diff --git a/src/avclandrv.h b/src/avclandrv.h index bb3774d..2fef1a6 100644 --- a/src/avclandrv.h +++ b/src/avclandrv.h @@ -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 diff --git a/src/sniffer.c b/src/sniffer.c index 20a2b98..039fbfc 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -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");