from pathlib import Path
import shutil
R=Path(__file__).resolve().parent;B=R.parent
shutil.copytree(B/'mcu_pinmap_A30/firmware/固件/vacuum_target',R/'firmware/固件/vacuum_target',ignore=shutil.ignore_patterns('build','__pycache__'))
shutil.copytree(B/'mcu_pinmap_A30/firmware/固件/vacuum_control',R/'firmware/固件/vacuum_control',ignore=shutil.ignore_patterns('build','__pycache__'))
shutil.copytree(B/'mcu_pinmap_A30/firmware/固件/lamp_target',R/'firmware/固件/lamp_target',ignore=shutil.ignore_patterns('build','__pycache__'))
p=R/'firmware/固件/vacuum_target/src/vacuum_board.c';s=p.read_text();(R/'original_vacuum_board.c').write_text(s)
s=s.replace('    ADC1->ISR = ADC_ISR_EOC | ADC_ISR_EOS | ADC_ISR_OVR;\n    ADC1->CHSELR', '    ADC1->ISR = ADC_ISR_EOC | ADC_ISR_EOS | ADC_ISR_OVR | ADC_ISR_CCRDY;\n    ADC1->CHSELR')
s=s.replace('    ADC1->CHSELR = 1u << channel;\n    ADC1->CR |= ADC_CR_ADSTART;', '''    ADC1->CHSELR = 1u << channel;
    /* RM0454: ADSTART is ignored until the new channel configuration is
       applied. Never convert with an unacknowledged channel selection. */
    timeout = ADC_POLL_LIMIT;
    while (((ADC1->ISR & ADC_ISR_CCRDY) == 0u) && timeout != 0u) {
        --timeout;
    }
    if (timeout == 0u) {
        g_adc_ready = false; /* Do not reuse an uncertain ADC state. */
        return false;
    }
    ADC1->CR |= ADC_CR_ADSTART;''')
s=s.replace('    if (timeout == 0u || (ADC1->ISR & ADC_ISR_OVR) != 0u) {','    if (timeout == 0u || (ADC1->ISR & ADC_ISR_OVR) != 0u) {\n        g_adc_ready = false;')
p.write_text(s)
print('A41 vacuum actual read_adc now waits CCRDY and latches uncertain state unavailable')
