1
0
mirror of https://github.com/kalymos/PsNee.git synced 2026-05-08 16:32:17 +00:00

feat(timing): link hysteresis limits and lock injection delay

Synchronized max/reset hysteresis logic to maintain the optimal operating window.

Hardcoded injection delay as it has reached its ideal sweet spot, simplifying the configuration.
This commit is contained in:
kalymos
2026-03-19 13:51:01 +01:00
parent b0f8826685
commit bd542e78d0

View File

@@ -70,9 +70,12 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/*------------------------------------------------------------------------------------------------
Hysteresis
------------------------------------------------------------------------------------------------*/
#define HYSTERESIS_MAX 15 // All model.
//#define HYSTERESIS_MAX 25 // Only FAT! For models with problematic CD players.
// Determines the number of times the data in the DATA line must match the filter of the region code injection function to trigger the injection.
#define HYSTERESIS_MAX 25 // Coupled with hysteresis-reset post-injection; allows for a
// wider tuning range without drifting out of the sweet spot
// between hysteresis_max and hysteresis_reset.
/*------------------------------------------------------------------------------------------------
Summary of practical information. Fuses. Pinout
@@ -135,7 +138,6 @@ uint8_t hysteresis = 0;
//Initializing values for region code injection timing
#define DELAY_BETWEEN_BITS 4000 // 250 bits/s (microseconds) (ATtiny 8Mhz works from 3950 to 4100) PU-23 PU-22 MAX 4250 MIN 3850
#define DELAY_BETWEEN_INJECTIONS 90 // The sweet spot is around 80~100. For all observed models, the worst minimum time seen is 72, and it works well up to 250.
/*------------------------------------------------------------------------------------------------
@@ -387,7 +389,7 @@ void PerformInjectionSequence(uint8_t injectSCEx) {
};
hysteresis = 11; // Reset hysteresis to mid-point after triggering
hysteresis = (HYSTERESIS_MAX - 10); // Reset hysteresis to mid-point after triggering
#ifdef LED_RUN
PIN_LED_ON;
#endif
@@ -402,8 +404,6 @@ void PerformInjectionSequence(uint8_t injectSCEx) {
PIN_WFCK_OUTPUT;
PIN_WFCK_CLEAR;
}
_delay_ms(DELAY_BETWEEN_INJECTIONS);
// Loop through the selected region(s)
for (uint8_t i = 0; i < 3; i++) {
@@ -452,17 +452,29 @@ void PerformInjectionSequence(uint8_t injectSCEx) {
}
}
// Clean up state between region cycles
PIN_DATA_OUTPUT;
PIN_DATA_CLEAR;
_delay_ms(DELAY_BETWEEN_INJECTIONS);
/*
EXIT CONDITION:
If we are NOT in Universal mode (3), we stop after the first
successful region injection.
*/
if (injectSCEx != 3) break;
if (injectSCEx != 3) {
PIN_DATA_OUTPUT;
PIN_DATA_CLEAR;
if (!isWfck) {
PIN_WFCK_INPUT;
PIN_DATA_INPUT;
}
break;
}
// Clean up state between region cycles
PIN_DATA_OUTPUT;
PIN_DATA_CLEAR;
_delay_ms(180);
}
// Restore pins to Input/High-Z to avoid signal interference after injection